一、死锁避免讨论

死锁避免

在这个例子中,有进程P、进程Q。系统当中一共有M个资源,假设A为P进程对资源的需求的最大量,那么用系统中资源总数减去A就得到一个Y点,对于进程Q,一旦Q进程占有的资源数量超过了Y这一点,那就意味着P进程得不到它所需要的最大的需求量A 了。

死锁避免
同样的道理,如果B是Q进程对资源的最大需求量,那么M-B得到一个X点,也就是说,如果P进程对资源的占有量超过了X点,也就意味着Q进程得不到它的最大需求量B。

死锁避免
如上图X1为当前分配给P的资源数量,Y2为当前分配给Q的资源数量,X1、Y1形成一个交叉点,那么从这个交叉点出发,如下图无论是Q进程还是P进程,系统中剩余资源的总数都能够满足P或者Q对资源的需求量。
死锁避免
另一情况如下两个图:X2为当前分配给P的资源数量,Y1为当前分配给Q资源数量。同样的有交叉点,那么进程Q,它还需要的资源量也就是说得到最多的资源量B,它现在得到了Y1这么多个资源,但是系统中剩余的资源不能够满足Q剩余的需要了,但是剩余的资源足够P的需求,所以当P得到他所需要的资源,然后执行结束释放资源,从而使得Q进程也能够满足它的资源需求。

死锁避免死锁避免
下一种情况,如下图:此时交叉点就落入了一个三角区域,无论是P进程还是Q进程,系统剩余的资源数量既不能满足Q进程也不能满足P进程,可以看到如果P进程想得到A这么多个数量,那么这个时候那条线已近穿过了那条蓝色的斜线,这条边实际上是系统总共的数量,因此对于P进程,他拿不到所需的全部资源,Q进程也是如此,因此从三角区域当中的某一点出发,P进程和Q进程都无法获得足够的资源继续执行。
死锁避免
小结:当进程执行过程中提出资源申请时,操作系统应该根据当时系统所出的状态,或者,把资源分配给这个进程之后,进入一个新的状态来调整资源分配策略。具体来看。如下图,先看到左下脚的区域,无论是 P进程还是Q进程提出资源申请,操作系统都可以去满足,在看到左上角和右下角的矩形区域,以右下角的来讨论,假如说目前的资源分配状态在右下脚的矩形区域内,P进程提出资源申请,操作系统可以无条件的满足这个进程的对资源的需求,但是如果Q进程提出了资源申请,那么当它得到资源的总数只要不超过Y,操作系统就可以给它分配,如果超过Y,那么操作系统就不应该把资源分配给Q进程,对资源的分配要控制,不能够出现让进程P和Q对资源的申请数量的交叉点进入三角区域,一旦进入三角区域,剩余的资源既不能满足Q进程也不能满足P进程,如果交叉点落在的线上,但不包括O1、O3这两个点,这个时候系统的所有资源都被分配完了,每个进程P,Q都没达到资源最大需求量,链各个进程都在等,就出现了死锁现象。所以操作系统要在资源分配过程中进行相应的控制,不能让结果落入三角区域

死锁避免
二、死锁避免定义

**定义:**在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统发生死锁或者可能发生死锁,则不予分配,否则可以分配。

安全状态:
如果系统中存在一个由所有进程构成的安全序列P1,…,Pn,则称系统处于安全状态,如果分配资源之和,系统处于安全状态就分配,相反就不分配,根据安全状态来决定这次分配是否执行。
安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1<=i<=n)
它以后需要的资源数量不超过系统当前剩余资源量与所有进程Pj(j<i)当前占有资源之和,则系统处于安全状态,

比如进程序列的第一个进程P1,就可以描述为,P1以后还需要的资源数,不超过当前资源所剩的资源数量,很显然,这个资源就可以分配给这个进程,那么让P1执行结束释放之前给的资源,剩下的集合里P2,P2以后需要的资源数量不超过系统剩的资源数量以及前面的进程P1进程占用资源之和,那么P2也能够完成,后面的以此类推,只要安全序列找到了,就不会发生死锁,处于安全状态。就是说系统处于安全状态就一定没有死锁发生。

三、安全状态好不安全状态

不安全状态:系统中不存在一个安全序列,
不安全状态一定会导致死锁,当然目前他还没有进入死锁,因为系统中还有一些资源,但是继续往前走,不管系统采用什么分配策略,也无法挽回走向死锁的目标了

安全序列可以是一个也可以是多个,死锁状态是不安全状态的一个子集。

相关文章: