死锁的定义:两个或多个进程无限期地等待永远不会发生的条件的一种系统状态
结果:每个进程都被永远堵塞
定义2:在两个或多个进程中,每个进程都有某种资源但需要申请另一个进程持有的某种资源,此时每个进程都拥有其部分运行所需的一部分资源但是都不够,所以都堵塞。
死锁的起因:
1.资源数目不足,进程对资源的竞争而产生死锁
2.并发进程的推进顺序不当:
进程请求资源和释放资源的顺序不当,导致死锁。
死锁预防策略:
死锁的必要条件:
1.互斥条件:进程互斥使用资源,资源具有独占性
2.不剥夺条件:进程在访问完资源前不能被其他进程强行波多
3.部分分配条件:
进程边运行边申请资源,临时需要临时分配
区别于 全部分配
4.环路条件:
多个进程构成环路:环中每个进程已占用的资源被前一进程申请,而自己所申请的资源又被环中后一进程占用着
解决死锁的策略:
预防死锁
通过设置某些限制条件,破坏死锁四个必要条件中的一个或多个来预防死锁
破坏互斥条件(难)
破坏不剥夺条件(代价大)
破坏部分分配条件(预先静态分配)
破坏环路条件(有序资源分配)
优点:容易实现,广泛使用
缺点:限制严格,资源利用率和吞吐量降低
避免死锁:
不事先采取限制去破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估若分配资源是否会让系统进入死锁状态,若是拒绝分配从而避免死锁
优点:只需要较弱的限制条件,可以获得较高的资源利用率和系统吞吐量
缺点:实现比较难
检测死锁和恢复死锁:
允许死锁发生,但可以通过检测机制及时检测出死锁状态,并精确明确与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁状态解脱出来。
缺点:1。检测方法复杂,难度大
2.恢复方式靠人工
预先静态分配法:
目的:破坏部分分配条件
策略:进程运行前将所需资源一次性全部分配给它。因此进程在运行过程中不再提出资源请求,从而避免出现堵塞或死锁。
特点:
1.执行可能被延迟,所需资源不能全部满足时
2.应用开销增大:运行前估算资源需求。
3.资源利用率低:资源被占而不用
改进:资源分配的单位由进程改为程序步
有序资源分配法:
目的:破坏环路条件,使得环路无法构成
策略:系统中的每个资源分配有一个唯一序号;
进程每次申请资源时只能申请序号更大的资源
资源分配策略:
分配资源时检测资源序号是否符合递增规定