死锁概念
进程相互等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象
死锁 饥饿 死循环
死锁产生的必要条件
互斥条件:只有对必须互斥使用的资源的争抢才能导致死锁
不剥夺条件:进程所获得的资源在未使用完之前,不能由其他资源强行夺走,只能主动释放。
请求和保持的条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他的进程占用,此时请求进程被阻塞,但又对自己有的资源保持不放。
循环等待条件:存在一种进程资源的循环等待链,联众的每一个进程已获得的资源同时被下一个进程请求
注意!发生死锁时一定又循环等待,但是发生循环等待时未必死锁。
死锁的处理策略
预防死锁 避免死锁 死锁的检测与解除
死锁的处理策略
预防死锁
破坏互斥条件
把互斥设备从逻辑上改成可以同时使用的设备
破坏不剥夺条件
破坏请求和保持条件
破坏循环等待条件
总结
避免死锁
安全序列
如图,如果答应了B借30亿那么后面的钱都回不来了
如图如果时A想借20亿,发现这并不是死局,钱都是能够要回来的
银行家算法
根据当前剩余的资源数和每一个进程最多还要的进程数进行比较,如果存在能够满足的进程就将其加入安全序列并且把他之前已分配的资源数加入剩余资源数(此进程归还资源),依次循环得到安全序列,表明当前序列出去安全状态则不可能发生死锁,如果当前所有进程的最多需要资源数都大于系统所剩资源数则为不安全序列,有可能发生死锁。
算法实现思路
死锁的检测和解除
死锁检测
S为死锁状态的充分必要条件是:当且仅当S状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理
此时P1的请求可以满足,只要满足了P1之后P1归还了所有资源之后(消除了所有的P1边)P2也可以执行结束(消除了所有P2的边),就称之为这个图为可简化
如果时这种情况所有进程这个时候都不能被满足,所以所有进程都会被阻塞,不能消除所有的边,则发生死锁
死锁的解除
真题
2019:死锁的预防可以确保进程之间不发生死锁,银行家算法是用来避免死锁的,动态的计算资源分配和合理性,并不能计算当前是否发生死锁,通过资源分配图可以检测当前是否发生死锁,发生死锁必然有两个及其以上的进程,进入阻塞态。
2013:若处于安全状态则一定不会发生死锁,若处于不安全状态则有可能发生死锁。