p>预防死锁的方法:核心思想是破坏死锁的四个必要条件之一,即
-
破坏请求与保持条件:采用预先静态分配的方法,即进程在运行前一次申请完它所需要的全部资源,在未满足全部资源时不运行;但系统资源被严重浪费,且易导致“饥饿”状态;
-
破坏不可剥夺条件:当一个进程请求新的资源但未满足时,该进程必须释放已经保持的所有资源,以后需要时再重新申请;但反复地申请和释放资源会增加系统开销,降低系统吞吐量;
-
破坏循环等待条件:采用顺序资源分配法,即给系统中的资源编号,规定每个进程必须按照编号顺序申请资源;但限制了新类型设备的增加。
避免死锁的方法:
-
进程启动拒绝:如果一个进程的请求会导致死锁,则不执行该进程;
-
资源分配拒绝:又名银行家算法,如果一个进程增加的资源请求会导致死锁,则不允许分配。
检测死锁的方法:
-
为每个进程和每个资源制定唯一编号;
-
设定一张资源分配表,记录各进程与占用资源之间的对应关系;
-
设定一张进程等待表,记录各进程与申请资源之间的对应关系;
-
判断是否出现环路,是则引发死锁。
解除死锁的方法:
-
资源剥夺法:挂起某些死锁进程,并释放其所保持的资源,分配给其他死锁进程,但应防止被挂起的进程长时间得不到资源,而处于资源匮乏的状态;
-
撤销进程法:强制撤销部分、甚至全部死锁进程,并释放其所保持的资源;撤销顺序可以按照进程优先级和撤销进程代价的高低来进行;
-
进程回退法:让某些死锁进行回退到足以回避死锁的地步,回退过程中自愿释放自愿,但要求系统保留进程历史信息,设置还原点。