本文是在张尧学老师编写的《计算机操作系统教程(第4版)》的基础上,综合相关资料和博客所写,纯属个人总结篇,若有错误,请留言指出,谢谢。参考博客文中会给出相应链接。
一、死锁
1、所谓死锁
是指各并发进程相互等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。
2、死锁的起因
死锁的起因是并发进程的资源竞争,产生死锁的根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数。
3、产生死锁的必要条件(缺一不可)
(1)互斥条件。并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作的,进程对它所需要的资源进行排他性控制。
(2)不剥夺条件。进程所获得的资源在使用完毕之前,不能被其他进程强行剥夺,而只能由获得资源的进程自己释放。
(3)部分分配。进程每次申请它所需要的一部分资源,在等待新资源的同时,继续占用已分配到的资源。
(4)环路条件。存在一种进程循环链,链中每一个进程已获得的资源同时被下一个进程请求。
4、死锁的消除方法
预防、避免、检测与恢复。
(1)死锁预防有两种方法:
一、打破资源的互斥和不可剥夺这两个条件,如允许进程同时访问某些资源等。但没有办法解决那些不允许被同时访问的资源时所带来的死锁问题。如打印机
二、预先分配各并发程序所需的全部资源。也存在很多缺点,如,降低进程的并发性。
三、打破死锁的环路条件。把资源按顺序排列,使进程在申请、保持资源时不形成环路。限制了进程对资源的请求,而且存在一定系统开销
(2)死锁避免也称动态预防。
因为系统采用动态分配资源,在分配的过程中预测出死锁发生的可能性加以避免的方法。死锁回避需要占用系统较大的开销。
(3)死锁的检测和恢复
死锁检测算法检查并发进程组是否构成资源的请求和保持环路。
恢复办法:终止各锁住进程、或按一定顺序终止进程序列,直到已释放到有足够多的资源来完成剩下的进程时为止。
二、银行家算法
见之前写的博客银行家算法
Ref: