进程的死锁
死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
死锁会带来的后果:
1. 使进程得不到正确的结果,处于死锁的进程得不到所需的资源,不能向前推进,顾得不到结果。
2. 使资源利用率降低,处于死锁的进程不释放已占有的资源,以至于这些资源不能被其他进程利用,所以资源利用率降低了。
3. 产生新的死锁。其他进程申请不到资源,也会产生死锁
最终这些后果,可能会造成系统崩溃!
进程死锁的四个必要条件:
(1) 互斥:至少有一个资源必须处于非共享模式,即一个资源一次只有一个进程使用。如果另一进程申请该资源,那么申请进程必须等到该资源被释放为止。
(2) 占有并等待:一个进程必须占有至少一个资源,并等待另一为其他进程所占有的资源。
(3) 非抢占:资源不能被抢占,即资源只能在进程完成任务后自动释放。
(4) 循环等待: 有一组等待进程{P0, P1, ..., Pn},P0等待的资源为P1所占有,P1等待的资源为P2所占有,。。。,Pn-1等待的资源为Pn所占有,最后Pn等待的资源为P0所占有,从而形成了一个等待循环。
死锁的预防:
只要确保至少有一个必要条件不成立,就能预防死锁发生。
1) 互斥——对于非共享资源,必须要有互斥条件。不过通常不能通过否定互斥条件来预防死锁:有的资源本身就是非共享的。
2) 占有并等待——打破该条件,必须保证:当一个进程申请一个资源时,它不能占有其他资源。
3) 非抢占——对已分配的资源不能抢占。确保该条件不成立,可以使用如下协议:如果一个进程占有资源并申请并一个不能立即分配的资源,那么其现已分配的资源都可被抢占。即这些资源都被隐式释放。
4) 循环等待——确保该条件不成立的方法是对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。
预防死锁的副作用是降低设备的使用率和系统的吞吐率。
死锁避免:
要求操作系统事先得到有关进程申请资源和使用资源的额外信息。通过获悉这些信息,系统将能够确定:对于一个申请,进程是否应等待。
例题:
(多选)在多重处理系统中,处理死锁的办法有两种:一是防止其发生;二是发生后进行处理。下面的方法属于防止其发生的是哪一个? BC
A、破坏互斥条件
B、破坏不可剥夺条件
C、破坏循环等待条件
D、杀死某个激活死锁的进程
解析:产生死锁的四个必要条件:互斥条件、请求与保持条件、不可剥夺条件、循环等待条件,互斥条件是无法破坏的,而D选项属于死锁事后处理操作