进程管理-死锁问题
死锁的定义
进程管理时操作系统的核心,如果设计不当,就会出现死锁的问题,如果一个进程在等待一件不可能发生的事,则进程就死锁了,而如果一个或多个进程产生死锁,就会造成系统死锁
死锁的例子:程推进顺序不当、同类资源分配不当、PV操作使用不当等情况都可能造成死锁。
实例:
进程推进顺序不当引起的死锁。设系统中有一台读卡机A,一台打印机B,它们被进程P1和P2共享,进程P1和P2并发执行时按下列顺序请求和释放资源。
·假如按P1<a>P2<a>P1<b>P2<b>的次序执行,则系统发生死锁。
因为进程P1执行Request(A)时,由于读卡机未被占用,所有请求可以得到满足;进程P2执行Request(B)时,由于打印机未被占用,所以请求也可以得到满足;接着进程P1执行Request(B)时,由于打印机被占用,所有请求得不到满足,P1等待;进程P2执行Request(A)时,由于读卡机被占用,所以请求得不到满足,P2也等待。此时,双方都在请求对方已占有的资源,系统发生死锁。
形成死锁的四个必要条件
- 互斥:进程对其所要求的资源进行排他性控制,即一次只允许一个进程使用。
- 请求保持:零星的请求资源,即已获得部分资源又请求资源被阻塞。
- 不剥夺:进程已获得的资源在未使用完之前不能被剥夺,只能在使用完时由自己释放。
- 环路等待:当发生死锁时,在进程资源有向图中必然构成环路,其中每个进程占有了下一个进程申请的一个或多个资源
死锁的预防:打破四大条件
- 打破互斥资源:共享资源
- 打破保持和等待:进程主动释放资源
- 打破不可剥夺:系统剥夺其他已分配资源
- 打破环路等待:使其不构成环路
死锁的避免
- 有序资源分配法:资源轮流分配,进程依次执行(资源利用率低)。
- 银行家算法:按照一定的原则进行资源分配(更加灵活)。
银行家算法
当一个进程对资源的最大需求量不超过系统中剩余资源数时,可以将资源分配给此进程,使其能够正常运行。 进程可以分批请求资源,但请求的总数不能超过此进程的最大需求量。当系统现有的资源不能满足进程尚需资源数时,对进程的资源请求可以推迟分配,但总能使进程在有限时间内得到所需资源
经典例题:
假设系统中有三类互斥资源R1、R2、R3,可用资源数量分别是9、8、5。在同一时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下所示,如果进程按( )序列执行,那么系统状态是安全的。
① 求剩下的资源数量:
② 进程运行完成后释放它所占用的资源。