死锁产生的条件

1,互斥条件

同一时间一个资源只能被一个任务使用

2,请求与保持条件

T1持有S1的同时,请求S2资源,但是不能立即获得(T表示任务,S表示资源)

3,不可剥夺条件

T1持有的资源无法被T2剥夺

4,循环等待条件

若干进程之间形成一种头尾相连的循环等待条件(T1拥有S1请求S2,同时T2拥有S2请求S1)

这四个是产生死锁的四个必要条件,我们只需要破除其中任何一个条件就不会构成死锁

  • 打破互斥条件:将独占式资源改为虚拟资源(不太可行)
  • 打破请求与保持条件:采用资源预分配策略,即进程运行前申请全部资源,满足则运行
  • 打破不可剥夺条件:当一个进程占有一独占性资源又申请另一独占性资源而无法满足时,则放出原占有的资源
  • 打破循环等待条件:实现资源有序分配策略

银行家算法

操作系统中大家都学过

数据结构:
1)可利用资源向量Available
是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。
2)最大需求矩阵Max
这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
3)分配矩阵Allocation
这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。
4)需求矩阵Need

这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。

下面是三者之间的关系:

Need[i,j]=Max[i,j]-Allocation[i,j]

我们只需要找到一个安全序列即可,一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

猜你喜欢

转载自blog.csdn.net/ailaojie/article/details/89321799