操作系统理论 第三章(处理机调度与死锁)—第七节(避免死锁)

写在前面:

  1. 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili

一、系统安全状态

        在死锁避免方法中,把系统的状态分为安全状态和不安全状态。当系统处于安全状态时,可避免发生死锁,反之,当系统处于不安全状态时,则可能进入到死锁状态。

        安全状态是指系统能按某种进程顺序来为每个进程分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成,如果系统无法找到这样一个安全序列(或者不按安全序列分配资源),则称系统处于不安全状态

        虽然并非所有不安全状态都必然会转为死锁状态,但当系统进入不安全状态后,就有可能进入死锁状态,反之,只要系统处于安全状态,系统便不会进入死锁状态,因此避免死锁的实质在于,系统在进行资源分配时应使系统不进入不安全状态

二、利用银行家算法避免死锁

1、银行家算法概述

        最有代表性的避免死锁的算法是Dijkstra的银行家算法,起这样的名字是由于该算法原本是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户要求的情况。

2、银行家算法中的数据结构

(1)可利用资源向量Available。这是一个含有m个元素的一维数组,每个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=k,表示系统中现有R_{j}类资源K个。

(2)最大需求矩阵Max。这是一个n×m的矩阵,它定义了系统中n个进程中的每个进程对m类资源的最大需求。如果Max[i, j]=K,则表示进程i需要R_{j}类资源的最大数目为K。

(3)分配矩阵Allocation。这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i, j]=K,则表示进程i当前已分得R_{j}类资源的数目为K。

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

(5)上述三个矩阵存在关系:Need[i, j]=Max[i, j]-Allocation[i, j]

3、银行家算法的处理步骤

4、安全性算法的处理步骤

5、举例

        假定系统中有五个进程{P_{0},P_{1},P_{2},P_{3},P_{4}}和三类资源{A,B,C},各种资源的数量分别为10、5、7。系统中T_{0}时刻的资源分配情况如下所示:

(1)考察T_{0}时刻的安全性:利用安全性算法对T_{0}时刻的资源分配情况进行分析可知,在T_{0}时刻存在着一个安全序列{P_{1},P_{3},P_{4},P_{2},P_{0}},故系统是安全的。

(2)P_{1}发出请求向量Request_{1}\left ( 1,0,2 \right ),系统按银行家算法进行检查:

(3)P_{4}发出请求向量Request_{4}\left ( 3,3,0 \right ),系统按银行家算法进行检查:

(4)P_{0}发出请求向量Request_{0}\left ( 0,2,0 \right ),系统按银行家算法进行检查:

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevalin爱灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值