计算机操作系统复习----死锁相关知识

1、死锁的概念
两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象。死锁源于多个进程对资源的争夺,不仅对不可抢占资源进行争夺时会引起死锁,而且对可消耗资源进行争夺,也会引起死锁。

2、死锁产生的原因
(1、因竞争资源发生死锁
现象:系统中供多个进程共享的资源数目不足以满足全部进程的需要时,就会引起对诸多资源的竞争而发生死锁的现象
(2、进程推进顺序不当发生死锁

3、死锁产生的四个必要条件
(1、互斥条件:一个资源一次只能被一个进程使用
(2、请求与保持条件: 一个进程因请求资源而阻塞时,对已获得资源保持不放
(3、不可剥夺条件:进程获得的资源在未完全使用前,不能强行剥夺
(4、循环等待条件:若干进程之间形成一种头尾相接的环形资源等待链。

4、处理死锁的办法
只要上述条件不成立,就不会产生死锁,所以解决死锁的基本方法有:预防死锁
、避免死锁、检测死锁、解除死锁
预防死锁方法系统性能比较差
避免死锁:在分配资源之前预先计算资源分配的安全性,若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。最具代表性的避免算法是银行家算法。

5、银行家算法概念
银行家算法是用来避免死锁的,该算法原本是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。在os 中可用它来避免死锁。
银行家算法的过程:每一个进程在进入系统时,必须声明在运行过程中可能需要的每种资源的最大单元数目,其数目不应该超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先区确定是否有足够的资源分配给该系统,若有,再进一步计算在将这些资源分配给进程之后,是否会使系统处于不安全的状态。如果不会,才将资源分配给该进程。

6、银行家算法数据结构
(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个才能完成任务。

7、银行家算法流程。
Ri 表示进程i的请求量,如果Ri [j] = K 表示进程i需要Rj类资源。当进程i发出资源请求之后,系统按照以下步骤进程检查。
(1、R[i,j] <= Need[i,j] ,即进程i请求的资源数目要小于等于需要的资源数目,则转步骤2,否则认为出错。
(2、R[i,j] <= Available[i,j],即进程i请求的资源数目要小于等于系统可用的资源数目,则转步骤3 ,否则认为出错。
(3、系统试探着将资源分配给进程i,并修改其数据结构
(4、系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,则正式将资源分配给进程i,完成此次分配。否则,将此次试探分配作废,恢复原来的资源分配状态,让进程i 等待。

猜你喜欢

转载自blog.csdn.net/weixin_43352448/article/details/87907064
今日推荐