什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁

什么是死锁

死锁是指多个进程因竞争资源而形成的一种僵局(互相等待),若无外力做用,这些进程都将没法向前推动。例如,在某一个计算机系统中只有一台打印机和一台输入 设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2 所占用,而P2在未释放打印机以前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均没法继续执行,此时两个进程陷入死锁状态。

死锁产生的缘由

1. 系统资源的竞争

系统资源的竞争致使系统资源不足,以及资源分配不当,致使死锁。

2. 进程运行推动顺序不合适

进程在运行过程当中,请求和释放资源的顺序不当,会致使死锁。

产生死锁的四个必要条件:

互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时如有其余进程请求该资源,则请求进程只能等待。

请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其余进程占有,此时请求进程被阻塞,但对本身已得到的资源保持不放。

不可剥夺条件:进程所得到的资源在未使用完毕以前,不能被其余进程强行夺走,即只能 由得到该资源的进程本身来释放(只能是主动释放)。

循环等待条件: 若干进程间造成首尾相接循环等待资源的关系

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不知足,就不会发生死锁。

死锁的避免与预防:

死锁避免的基本思想:

系统对进程发出每个系统可以知足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若是分配后系统可能发生死锁,则不予分配,不然予以分配。这是一种保证系统不进入死锁状态的动态策略。

理解了死锁的缘由,尤为是产生死锁的四个必要条件,就能够最大可能地避免、预防和解除死锁。因此,在系统设计、进程调度等方面注意如何让这四个必要条件不成立,如何肯定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的状况下占用资源。所以,对资源的分配要给予合理的规划。

死锁避免和死锁预防的区别:

死锁预防是设法至少破坏产生死锁的四个必要条件之一,严格的防止死锁的出现,而死锁避免则不那么严格的限制产生死锁的必要条件的存在,由于即便死锁的必要条件存在,也不必定发生死锁。死锁避免是在系统运行过程当中注意避免死锁的最终发生。

相关文章
相关标签/搜索