半期复习——第三章:死锁(3.5~3.7)

发布时间 2023-04-16 21:59:37作者: 一只朋克小狗

 

3.5 死锁概述

一、资源问题

    1.可重用性资源和消耗性资源 

    2.可抢占性资源和不可抢占性资源 

二、产生死锁的原因

   

三、死锁的必要条件和处理方法

    1.死锁的发生必须具备下列四个必要条件: 

        ①互斥条件:指进程对所分配到的资源进行排它性使用 

        ②请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求 

        ③不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

        ④环路等待条件:指在发生死锁时,必然存在一个进程—资源的环形链  

    2.处理死锁的方法

 

3.6 预防死锁

一、摒弃“请求和保持”条件

    规定所有进程在开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源。这样,该进程在整个运行期间:便不会再提出资源要求

二、摒弃“不剥夺”条件 

    当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源。待以后需要时再重新申请。

三、摒弃“环路等待”条件

    将所有资源按类型进行线性排队,并赋予不同的序号 所有进程对资源的请求必须严格按照资源序号递增的次序提出 这样,在所形成的资源分配图中,不可能再出现环路 

 

3.7 避免死锁

一、系统安全状态

    指系统能按某种进程顺序(P1,P2,…,Pn),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成

二、银行家算法

    1.数据结构

        ①可利用资源向量Available:含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目

        ②最大需求矩阵Max:n×m的矩阵,定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K  

        ③分配矩阵Allocation:n×m的矩阵,定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程Pi当前已分得Rj类资源的数目为K

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

    2.银行家算法

    3.安全检查

 

3.8 死锁的检测与解除

一、死锁的检测

    1.资源分配图

        e={ Pi, rj } :进程pj请求一个单位的rj资源。

        e={ rj, Pi } :把一个单位的资源rj分配给进程Pi。  

    2.死锁定理:S为死锁状态的充分条件是,当且仅当S状态的资源分配图是不可完全简化的

二、死锁的解除(2)

    1.剥夺资源。从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态

    2.撤消进程。最简单的撤消进程的方法,是使全部死锁进程都夭折掉;或者按照某种顺序逐个地撤消进程,直至有足够的资源可用,使死锁状态消除为止