死锁
当一个系统中多个进程对某些临界资源进行访问时,就有可能发生死锁。所谓死锁,就是多个进程都请求某些资源,而这些资源都由这组进程中的其他进程所保持,这样他们都处于持有自己的资源而又等待别的进程释放资源的状态。
发生死锁的充分必要条件是:
- 互斥条件:即进程对临界资源的访问是互斥的,不能同时有两个或以上的进程访问某一资源;
- 循环等待条件:每个进程都在等待其他进程释放自己所请求的资源;
- 请求和保持条件:每个进程都占有一些资源,并还需要申请其他资源。在自己的任务完成之前不会释放自己已经拥有的资源;
- 不可剥夺条件:也称「不可抢占条件」。就是资源只能由进程自己来释放,而别的进程是不能剥夺的;
处理死锁的方法有:
- 预防死锁:即通过破坏四个充要条件中的一个或多个,使系统无法发生死锁。但要注意的是,互斥条件是某些资源必须具有的条件,不仅不应该破坏,还应保证。所以只能破坏其他三个条件;
- 避免死锁:同样是属于事先预防的策略,但并不是破坏死锁发生的条件,而是在资源分配的过程中,采用某种方法防止系统进入不安全状态。常用的方法有银行家算法;
- 检测死锁:当死锁发生时,通过某种方法检测出来,然后采取适当的措施,把进程从死锁中解脱出来;
- 解除死锁:当检测到已经发生死锁时,采用相应的措施解除死锁。通常是撤销某些进程,释放其资源;
【完】