操作系统之死锁篇

死锁

由进程同步可知,当并发进程需要竞争使用资源和相互协作向前推进时,如果不采取同步措施,或同步措施不当,就很容易引发死锁。

因此死锁产生的原因:并发进程对临界资源的竞争、并发进程推进顺序不当。

死锁产生的必要条件

1.互斥条件(资源互斥使用)

2.占有并请求条件(占有资源不释放,请求资源得不到)

3.不剥夺条件(进程占有资源无法被其他进程剥夺)

4.环路等待条件(每一个进程等待下一个进程释放该进程已经获得的资源,构成回路,这里需要了解资源分配图的概念,概念点我

处理死锁基本方法

预防死锁:破坏必要条件即可,重点破坏条件3和4。

避免死锁:合理安排并发进程推进顺序。

检测死锁:不采取任何措施,出现死锁时能检测即可。

解除死锁:检测死锁的目的,检测后挂起或撤销部分处于死锁的进程,并释放资源,分配给需要这些资源的阻塞进程


以下讲解各个方法的具体解决措施

 

预防死锁

资源的互斥是资源的属性,破坏互斥条件(使互斥资源变为共享的?)不现实,从2,3,4条件入手。

破坏占用并请求:调整资源分配策略

静态分配策略:进程执行前提供其所需的所有资源

动态分配策略:进程获取资源的条件是先释放占用的资源

允许剥夺

不是剥夺进程的占用资源,而是当进程请求资源无法得到时,暂时放弃请求。

阻止回路等待

对资源使用层次分配策略:

1.资源分层

2.得到资源后只能再向更高层申请资源,

3.同一层的资源不能同时占有多个,

4.释放资源顺序从高层到底层。

点我

死锁避免

了解一个概念

系统安全状态:系统存在某种并发进程执行顺序,以这样的顺序给进程分配相应的资源,不会导致系统产生死锁。

系统安全不会死锁,系统不安全可能会死锁,原因点我

银行家算法判断系统是否安全的经典实现案例,分配钱(也就是资源时满足以下条件):

1.每个进程提前说明最大资源需求

2.进程每次提出部分资源申请并获得分配

3.满足进程最大资源时,进程完成并释放所占用的资源

4.进程所需最大资源大于系统现有资源时则进程等待,系统保证有限时间内给与进程资源分配。

 

检测死锁

死锁存在的必要条件是存在环路等待。

分两种情况

1.系统存在多类资源每类资源只有一个,出现环路等待,死锁!

2.多类资源每类资源多个,环路等待无法判断,故使用进程标记法:

进程开始前查看所需资源是否小于等于系统现有最大资源,是,则进程执行,执行完毕释放资源并归还系统,并将进程标记。

依次类推当所有进程标记完而没有死锁产生则无死锁,否则,死锁!

 

死锁解除

1.资源抢占,人工干预,如挂起死锁进程。

2.回退释放资源,记录并保存进程执行顺序,出现死锁回退,有点系统还原。

3.结束死锁进程释放资源,没啥好解释了。

 

补充知识----线程死锁

线程死锁和进程死锁一样,不过多了一个概念,同一进程中线程可死锁,不同进程间线程也可死锁。可以这样理解,死锁是对互斥资源利用产生冲突,只要线程执行过程中出现对同一互斥资源的抢夺现象则可能出现死锁,跟是否是同一进程并没有半毛线关系。

 

猜你喜欢

转载自blog.csdn.net/qq_36201577/article/details/81205562
今日推荐