写在前面:
- 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
- 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili
一、系统安全状态
在死锁避免方法中,把系统的状态分为安全状态和不安全状态。当系统处于安全状态时,可避免发生死锁,反之,当系统处于不安全状态时,则可能进入到死锁状态。
安全状态是指系统能按某种进程顺序来为每个进程分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成,如果系统无法找到这样一个安全序列(或者不按安全序列分配资源),则称系统处于不安全状态。
虽然并非所有不安全状态都必然会转为死锁状态,但当系统进入不安全状态后,就有可能进入死锁状态,反之,只要系统处于安全状态,系统便不会进入死锁状态,因此避免死锁的实质在于,系统在进行资源分配时应使系统不进入不安全状态。
二、利用银行家算法避免死锁
1、银行家算法概述
最有代表性的避免死锁的算法是Dijkstra的银行家算法,起这样的名字是由于该算法原本是为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户要求的情况。
2、银行家算法中的数据结构
(1)可利用资源向量Available。这是一个含有m个元素的一维数组,每个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=k,表示系统中现有类资源K个。
(2)最大需求矩阵Max。这是一个n×m的矩阵,它定义了系统中n个进程中的每个进程对m类资源的最大需求。如果Max[i, j]=K,则表示进程i需要类资源的最大数目为K。
(3)分配矩阵Allocation。这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i, j]=K,则表示进程i当前已分得类资源的数目为K。
(4)需求矩阵Need。这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i, j]=K,则表示进程i还需要类资源K个才能完成其任务。
(5)上述三个矩阵存在关系:Need[i, j]=Max[i, j]-Allocation[i, j]
3、银行家算法的处理步骤
4、安全性算法的处理步骤
5、举例
假定系统中有五个进程{,
,
,
,
}和三类资源{A,B,C},各种资源的数量分别为10、5、7。系统中
时刻的资源分配情况如下所示:
(1)考察时刻的安全性:利用安全性算法对
时刻的资源分配情况进行分析可知,在
时刻存在着一个安全序列{
,
,
,
,
},故系统是安全的。
(2)发出请求向量
,系统按银行家算法进行检查:
(3)发出请求向量
,系统按银行家算法进行检查:
(4)发出请求向量
,系统按银行家算法进行检查: