死锁的处理策略
1.预防死锁
-
破坏互斥条件:把必须互斥使用的资源改造成可以同时使用的资源。比如SPOOLing技术将进程在逻辑上把互斥设备改造成共享设备。
-
破坏不剥夺条件:当某个进程请求资源得不到满足时,它必须释放所有资源,待以后需要时再申请;
-
破坏请求和保持条件:采用静态分配方法。再它请求的资源未满足前,不让它投入运行。投入运行后,资源一直归它所有。
-
破坏循环等待条件:采用顺序资源分配法。首先给系统中的资源编号,规定必须按编号递增的顺序请求资源。
2.避免死锁
1)安全序列
如果按某个顺序分配资源,则每个进程都能顺利完成。安全序列可能有多个。
2)银行家算法
-
检查此次申请是否超过了之前的最大需求数
-
检查此时系统剩余的可用资源是否还能满足这次请求
-
试探着分配,更改各数据结构
-
用安全性算法检查此次分配是否会导致系统进入不安全状态。即检查当前剩余可用资源是否能满足某个进程的最大需求,如果可以就把该进程加入安全序列。
3.检测和解除
1)死锁检测算法
依次消除与不阻塞进程相连的边,直到无边可消。
死锁定理:如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁。
2)死锁解除算法
-
资源剥夺法:挂起某些死锁进程,并将他的资源分配给其它死锁进程。
-
撤销进程法:强制撤销部分甚至全部死锁进程。
-
进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步。