操作系统 死锁

什么是死锁?

多个进程竞争共享资源导致进程无法正常向前推进的僵局。

进程使用资源的顺序:

申请访问------访问资源------释放资源

如果进程申请共享资源的顺序不当,也可能造成死锁

产生死锁的原因

(1)竞争共享资源 (2)进程推进顺序不当

产生死锁的四个必要条件

(1)互斥条件(2)请求与保持条件(3)环路等待条件(4)不可剥夺条件

处理死锁的基本方法

预防死锁

根据死锁产生的四个必要条件,只要破坏其中一个即可预防死锁。其中互斥条件无法摒弃,因为我们无法预知进程是否访问临界资源,故不能破坏互斥条件

摒弃请求和保持条件

方法:进程一次性申请到整个运行过程中所需要的全部资源。

摒弃不可剥夺条件

让进程在有必要的时候释放自身所占据的资源,但是实现复杂且代价高,不实用。

摒弃环路等待条件

方法:规定进程必须按一定顺序申请资源(进行编号处理)。对所有不同类型的资源排序,要求每个进程按递增顺序申请资源。

避免死锁

安全状态

定义:系统可以找到一个进程执行序列,按此序列分配资源可以保证进程的执行顺利完成。

安全状态下,死锁不会发生。

安全状态示例:

安全状态
进程 最大需求 已分配资源 系统可用资源
p1 10 5 3
p2 4 2
p3 9 2

进程执行序列:p2--p1--p3

先把可用3资源给p2,p2完成后释放资源,给p1,p1完成后释放资源给p3。按此序列可以保证进程顺利完成。

不安全状态

定义:系统不能找到一个进程执行序列使按此序列分配资源可以保证进程的执行顺利完成。

不安全状态下,可能会发生死锁。

不安全状态示例:

不安全状态
进程 最大需求 已分配资源 系统可用资源
p1 10 5 2
p2 4 2
p3 9 3

在此示例就找不到可以使进程顺利完成的进程执行序列,称为不安全状态。

避免死锁的典型算法:银行家算法

死锁的检测与解除

死锁检测

操作系统不采取预防与避免死锁的方法来解决死锁问题,而是检测是否有死锁的产生,若产生,则解除死锁。

何时调用检测算法:(1)死锁发生频率 (2)死锁发生时,有多少进程受影响

如果死锁经常发生,那就要经常调用检测算法。

资源分配图:系统死锁可以利用资源分配图进行描述

死锁定理:用于检测系统所处的资源分配状态S是否为死锁状态。S为死锁状态的充分条件是有且仅当S状态的资源分配图是不可完全简化的。

死锁解除

(1)终止处于死锁状态的进程

(2)抢占死锁进程占用的资源

你可能感兴趣的:(笔记,大数据)