2.3操作系统-进程管理:死锁、死锁的产生条件、死锁资源数计算
2.3操作系统-进程管理:死锁、死锁的产生条件、死锁资源数计算
- 死锁
- 死锁的产生条件
- 死锁资源数计算
死锁
进程管理是操作系统的核心,如果设计不当,就会出现死锁的问题。如果一个进程在等待意见不可能发生的事,进程就会死锁。而如果一个或多个进程产生死锁,就会造成系统死锁。
死锁的产生条件
死锁的产生有四大条件,互斥、保持和等待、不剥夺、环路等待。
打破其中一项即可。
假设资源是🍍🍍🍓,现在有两个进程A、B,进程A需要🍍🍍🍓,进程B需要🍍🍓,现在状态是A🍍🍍,B🍓。
B拿到了🍓,但是缺少🍍,A拿到了🍍🍍,但是没有🍓,二者都无法继续执行,此时都不释放资源,而是一直占有着。
打破死锁:破坏互斥条件
互斥表示同一时间资源只给一个线程用,线程之间资源不共享。
破坏互斥条件,资源不再是不可共享的,也就是说B的🍓可以给A用,这样A进程就可以拿到缺少的资源🍓,然后继续执行,A用完释放掉资源,再给B用。
打破死锁:破坏保持和等待
破坏保持和等待,B等待一会儿,没有资源,就释放调自己占用的资源🍓,这样A进程就可以拿到缺少的资源🍓,然后继续执行,A用完释放掉资源,再给B用。
打破死锁:不剥夺
破坏不剥夺,A去抢B的🍓,抢到后,这样A进程就可以拿到缺少的资源🍓,然后继续执行,A用完释放掉资源,再给B用。
打破死锁:环路等待
环路等待就是A等待B,B等待A,此时没有其它进程参与,AB循环等待。
进程C也参与进来了,C有🍍🍓,用完释放掉资源。
死锁资源数计算
系统有3个进程ABC,这三个进程都需要5个资源。如果系统至少有多少个资源,则不可能发生死锁。
资源数记作n,进程数记作m,每个进程需要的资源数记作W或者Wi
每个进程需要的资源数相同的情况下
n≥m×(w−1)+1n \geq m×(w-1)+1 n≥m×(w−1)+1
即最小资源数≥进程数×(单进程需要的资源数−1)+1即最小资源数 \geq 进程数×(单进程需要的资源数-1)+1 即最小资源数≥进程数×(单进程需要的资源数−1)+1
n=3×(5-1)+1=13,系统至少有13个资源,则不可能发生死锁。
每个进程需要的资源数不同的情况下,对(w-1)进行累加操作即可
系统有3个进程ABC,这三个进程依次需要3、4、5个资源。如果系统至少有多少个资源,则不可能发生死锁。
n≥(3−1)+(4−1)+(5−1)+1=10n \geq (3-1)+(4-1)+(5-1)+1=10 n≥(3−1)+(4−1)+(5−1)+1=10