判断死锁的公式(一)
3.8--死锁定理

本讲完毕
2
在资源分配图中,通常用圆圈表示每个进程,用方框表示每 种资源类型。由于同一资源类型可能有多个实例,所以在矩 形中用圆点数表示实例数。
1 集合P、R和E: P={P1,P2,P3} R={r1,r2,r3,r4} E={p1→r1, p2→r3, r1→p2, r2→p2, r2→p1, r3→p3}
4
P1
P1
P1
P2
P2
P2
(a)
(b)
(c)
图 3-21 资源分配图的简化 5
r1 .
p1
p2
r1 .
p1
p2
..
r2
. r3
p3
. r3
p3
. ..
(a)
r4
r1 .
p1
. r3
p2
p3
..
. ..
r2
r4
(b)
..ห้องสมุดไป่ตู้
. ..
r4 r2
(c)
6
又如下图:该图是不可完全简化的
死锁定理: S为死锁状态的充分条件是, 当且仅当S状态的资源分配 图 是不可完全简化的,该 充分条件称为死锁定理。
死锁定理
郑州轻工业大学 计算机与通信工程学院
资源分配图 系统资源分配图是一个有向图,该图有一个节点的集合V和一个边的 集合E组成。节点集合V分成两种类型的节点: P={p1, p2, …, pn},它由系统中所有活动进程组成;R={r1, r2, … , rm},它由系 统中全部资源类型组成。 从进程pi到资源类型r j 的有向边记为pi →rj,它表示进程pi申请了 资源类型r j 的一个实例,并正在等待资源。从资源类型r j 到进程pi 的有向边记为r j →pi,它表示资源类型的一个实例r j 已经分配给进 程pi。 有向边pi →rj称为请求边,而有向边r j →pi称为分配边。
09 死锁

(3)Work=Work+Allocationi,Finish[i]=true,转步骤(2)。 (4)如果存在Finish[i]=false不成立,则系统出现死锁,而且, 进程Pi被锁住。
死锁检测算法与死锁避免算法的比较
银行家算法举例
假定系统有5个进程{P0,P1,P2,P3,P4}和3种类型的资源 {A,B,C},每一种资源的数量分别为12,7,9,在T0时刻的资源 分配情况如下表:
Max A P0 P1 P2 7 3 9 B 5 2 0 C 3 2 2
Allocation A 0 2 3 B 1 0 0 C 0 0 2 A
如果资源满足某个进程的要求,则在系统资源分配 图中消去此进程的所有请求边和分配边,成为孤立 结点。对所有进程执行该操作,最终如果所有进程 成为孤立结点,则称该图是完全简化的;否则则称 该图是不可完全简化的。 系统为死锁状态的充要条件是:当且仅当该状态的 系统资源分配图是不可完全简化的。
分别化简下图所示的资源分配图,并判断系 统中是否存在死锁。
• 进程P1等待进程P3的信件S3来到后再向进程P2发送信 件S1; • P2又要等待P1的信件S1来到后再向P3发送信件S2; • 而P3也要等待P2的信件S2来到后才能发出信件S3。
这种情况下形成了循环等待,产生死锁。
死锁的定义
操作系统中的死锁指:多个进程因竞争资 源而造成的一种僵局,如果没有外力的作 用,这些进程就都再也不能向前推进了。
6.2 死锁的预防
破坏互斥条件
• 使资源可同时访问而不是互斥使用,这种做法不 现实。 • 由资源的性质所决定。
计算机软件-死锁

(二)设备共享
设某系统拥有一台打印机和一台光标记阅读机, 并为进程P1,P2共享.要某时刻t,进程P1,P2分别占 用了打印机和光标记阅读机.在时刻t1(t1>t) P1又 申请光标记阅读机,但由于光标记阅读机被P2占用, 因此P1处于等光标记阅读机的状态.而到时刻 t2(t2>t1), P2又申请打印机,但由于打印机被P1占 用,因此P2处于等打印机的状态.显然,在t2以后p1 和p2都无法继续进行下去了.此时,系统出现了僵 持局面,也称为出现了死锁现象. 一组进程竞争资源可能出现一种僵持局面,而当 进程相互等待对方完成某个动作时,也可能发生互 相等待的局面.例如考虑两个进程a和b,它们对信 号灯x和y的操作如下:
5.4 死锁
5.4.1 死锁的概念
操作系统的基本特征是并发与共享.系统允许多 个进程并发执行,并且共享系统的软,硬件资源.为了 最大限度的利用计算机系统的资源,操作系统应该采 用动态分配系统各种资源的策略.然而,采用这种策 略时,当对某资源的申请数目超过了这类资源的入口 数目,若分配不当,可能出现进程之间互相等待资源 又都不能向前推进的情况,造成进程相互封锁的危险, 这种现象叫做死锁现象.
(2)进程间推进顺序非法.进程在运行过程 中,请求和释放资源的顺序不当,也同样会Байду номын сангаас 致产生进程死锁.
如上图所示,用一个资源-进程有向图来 说明死锁现象,图中,以方框代表资源,以圆圈 代表进程;从资源到进程的箭头,表示该资源 分配给进程,构成资源分配边;而从进程到资 源的箭头表示进程请求资源,构成资源的请 求边.于是该图来描述I/O设备共享时的死锁 情况.由图可风,进程P1,P2的资源分配边和 资源请求边形成了一个环路.
5.4.3 死锁产生的必要条件 虽然进程在运行过程中,可能发生死锁,但死锁的 发生也必须具备一定的条件.综上所述不难看出,死 锁的发生必须具备下列四个条件. (1)互斥条件:指进程对所分配的资源进行排它性使 用,即在一段时间内某资源只由一个进程使 用.如果此时还有其它进程请求该资源,则请求 者只能等待,直至占有该资源的进程用毕释放. (2)不剥夺条件:进程所获得的资源在未使用完 毕之前,不能被其他进程强行夺走
操作系统十大算法之死锁检测算法

cout<<"进程循环等待队列:";
p=flag; //存在进程循环等待队列的那一进程
//进程循环等待队列中的所有进程是table表中的这一行是1的进程,只是顺序要再确定
t=1;
while(t){
cout<<p<<" ";
for(j=0;j<max_process+1;j++){
}
return 1;
}
//检测
void check()
{
int table[MAXQUEUE][MAXQUEUE];
int table1[MAXQUEUE][MAXQUEUE];
int i,j,k;
int flag,t,p;
int max_process;
}
else{
while(!feof(fp)){
fscanf(fp,"%d %d",&occupy[occupy_quantity].resource,&occupy[occupy_quantity].process);
occupy_quantity++;
}
}
cout<<"请输入进程等待表文件的文件名:"<<endl;
if(occupy[i].process>max_process){
max_process=occupy[i].process;
}
}
for(i=0;i<wait_quantity;i++){
死锁基本概念

死锁总概在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁。
若无外力作用,它们都将无法推进下去.这些永远在互相等待的进程称为死锁进程.死锁的四个必要条件:互斥,占有且等待,循环等待。
进程的死锁问题可以用有向图进行准备而形象的描述,这种有向图称为系统资源分配图.一个系统资源分配图SRAG可定义为一个二元组,即SRAG=(V,E),其中V是顶点的集合,而E是有向边的集合.顶点集合可分为两种部分:P=(P1,P2,…Pn),是由系统内的所有进程组成的集合,每一个Pi代表一个进程;R=(r1,r2,…rm),是系统内所有资源组成的集合,每一个ri代表一类资源.基于上述资源分配图的定义,可给出判定死锁的法则,又称为死锁定理.(1) 如果资源分配图中没有环路,则系统没有死锁(2) 如果资源分配图中出现了环路,则系统中可能存在死锁.预防死锁的方法:资源一次性分配:(破坏请求和保持条件)可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。
此外,也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。
因此,对资源的分配要给予合理的规划。
其中一个比较好的死锁避免算法是,银行家算法:当第i个进程需要请求系统资源时,我们就将其对各个资源的需求量送入Re数组中,然后系统依次执行。
(1)若j从1到M,所有Re(j)<=Need(i,j),则程序可继续,否则说明i进程的这次请求数量,超出了事先给定的它对Rj资源的最大需求,转出错处理。
3.6死锁

22
四、死锁避免(3)
3、银行家问题与死锁问题的对应关系
15
三、死锁防止策略(4)
4、破坏第四个条件—循环等待条件
采用层次分配策略。
资源被分成多个层次
当进程得到某一层的一个资源后,它只能再申请 较高层次的资源
当进程要释放某层的一个资源时,必须先释放占 有的较高层次的资源 当进程得到某一层的一个资源后,它想申请该层 的另一个资源时,必须先释放该层中的已占资源
接下来所有的消费者和生产者进程都会阻塞,这些进 程发生了死锁。
10
一、死锁的概念(8)
比较例1和例2,一个会死锁,一个不会死锁,两者的 区别到底在哪里? 区别在于资源是整体原子申请的,还是分割为若干部 件逐个申请的。打印机、读卡机属于可分别独立工作 的资源,申请到任何一个资源都可启动该资源工作, 无须等待申请到另一资源后才工作。
16
各信号量如果这样编号: 1、empty 2、full 3、mutex 且进程只能按照编号由小到大的顺序申请资源,则生产者P1遵 循了正确的资源申请次序。消费者C1执行了错误的资源申请次 序。 生产者P1 消费者C1 P(mutex);//申请3号资源 P(full);//申请2号资源 P(empty);//申请1号资源 P(mutex);//申请3号资源
–操作系统(银行家)
–操作系统管理的资源(周转资金)
–进程(要求贷款的客户)
23
四、死锁避免(4)
死锁

死锁的例子
P1 ......; Receive(P2, M); ......; Send(P2,M); ......; P2 ......; Receive(P1,M); ......; Send(P1,M); ......;
死锁的例子
P1 Request(D); ......; Request(T); ......; Release(T); ......; Release(D); P2 Reques(T); ......; Request(D); ......; Release(D); ......; Release(T);
银行家(banker)算法
为了检查一个状态是安全的,银行家 检验他是否有充分的资源满足某个 顾客。如果有,这些贷款被假定是 要还贷的,并且检查该顾客现在最 接近限额,等等。如果所有的贷款 最终都能够还贷,则状态是安全的 ,可以贷给其初始的请求。
图 多资源的银行家算法
多资源的银行家算法
银行家算法可以推广到处理多资源的 情况。在图中左边矩阵表示资源当 前的赋予情况,右边矩阵表示每个 进程为了完成仍然需要资源的情况 。向量E表示系统所具有的资源,向 量P表示当前进程所占有的资源,向 量A表示系统可供使用的资源。
定义 4.1 如果不存在T使得S→i→T,则称 进程Pi在状态S被阻塞(blocked)。 进程P1在状态T被阻塞。 定义 4.2 如果进程Pi在状态S被阻塞,并且 对于所有满足S→*→T的状态T,进程Pi 在状态T也被阻塞,则称进程Pi在状态S 死锁(deadlocked)。 进程P2在状态U和V死锁。进程P1在状态 T不死锁,因为T→2→S不阻塞进程P1。
银行家(banker)算法
检查一个状态是否安全的算法如下: ⑴寻找一行R它的未满足资源需求小 于或等于A。如果不存在这样的行R ,系统最终将死锁,因为没有一个 进程能够运行完成。 ⑵假设所选中的行R的进程请求它所 需的全部资源并结束,标志该进程 终止并且将它的全部资源加到向量A 上。
死锁

3. 安全性检查算法
令Work和Finish分别是长度为m和n的向量。 ① 初始化 Work=Available,Finish[i]=false (i=1,2,…,n) ② 从进程集合中找满足下列条件的进程Pi ( Finish[i]=false ) and (Needi ≤Work ) 如果找到转③,否则转④ ③ 释放Pi的全部资源, 即Work=Work+ Allocationi; Finish[i]=true;转②; ④ 如果Finish[i]=true (i=1,2,…,n)对所有i 都成立,则返回“安全”标记,否则返回“不安 全”标记。
进程P1 ┇ 申请文件F r1:申请磁带机T ┇ 释放磁带机T 释放文件F ┇
进程P2 ┇ 申请磁带机T ┇ r2:申请文件F ┇ 释放文件F 释放磁带机T ┇
图 2.17 描述了这种死锁情况,图中形成了一个循环 等待链,其中:方框表示资源,圆圈表示进程,从资源到 进程的箭头(有向边)表示分配,而从进程到资源的箭头则 表示请求,这种描述方式形成的图称为“进程—资源图”。
2. 产生死锁的原因和必要条件 由以上例子可知产生死锁现象的原因: 一是系统提供的资源不能满足每个进程的 使用需求;二是在多道程序运行时,进程 推进顺序不合法。 产生死锁有四个必要条件:
互斥条件 不剥夺条件 请求和保持条件 环路等待条件
2.6.2 死锁的预防 只要使四个必要条件中至少有一个 不能成立,就可以达到预防死锁的目的。
算法步骤如下: ① 如果Requesti>Needi则出错(请求量超过申报的 最大量)否则转②;. ② 如果Requesti>Available则Pi等待,否则转③; ③ 系统对Pi所请求的资源实施试探分配,更改数据 结构中的数值: Available=Available-Requesti Allocationi=Allocationi+ Requesti Needi=Needi- Requesti ④ 执行安全性算法,如果系统是安全的,则承认试 分配,否则废除试分配,让进程Pi等待。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
判断死锁的公式(一)
判断死锁的公式
在计算机科学领域,死锁是指多个进程或线程因争夺系统资源而
产生的一种阻塞现象,导致系统无法前进。
为了判断是否发生死锁,
提出了一些公式和算法。
下面列举了几个常用的判断死锁的公式:
1. 死锁必要条件
死锁的发生需要满足以下四个条件: - 互斥条件:每个资源只能同时被一个进程或线程占用。
- 占有和等待条件:已经获得资源的进
程可以等待其他资源,同时阻塞其他进程对已获得资源的访问。
- 不
可抢占条件:已分配给进程的资源不能被强制性地抢占,只能由占有
资源的进程释放。
- 循环等待条件:存在一个进程资源的循环等待链,每个进程都在等待下一个进程所占有的资源。
如果以上四个条件同时满足,就有可能发生死锁。
2. 死锁检测算法
死锁检测算法可以根据系统资源的状态来判断是否发生死锁。
其
中最著名的算法是银行家算法(Banker’s algorithm),其公式如下:Available: 各资源的可用数量
Max: 各进程对各资源的最大需求
Allocation: 各进程已分配到的资源数量
Need = Max - Allocation: 各进程尚需的资源数量
Work = Available
Finish[i] = false,对所有进程i初始化为false
while (存在一个未标记完成的进程P)
{
if (Need[P] <= Work)
{
Work += Allocation[P]
Finish[P] = true
}
P = 下一个未标记完成的进程
}
该算法通过判断系统是否存在一个安全序列来确定是否发生死锁。
3. 死锁预防公式
死锁预防是在系统设计阶段采取措施,避免死锁的发生。
其中一
个常用的公式是银行家公式(Banker’s formula),用于计算进程对
资源的最大需求量。
公式如下:
Need[i, j] = Max[i, j] - Allocation[i, j]
其中,Need[i, j]表示进程i对资源j的最大需求量,Max[i, j]表示进程i对资源j的最大需求量,Allocation[i, j]表示进程i
已分配到的资源j的数量。
4. 死锁避免公式
死锁避免通过动态地分配资源来避免死锁的发生。
一个常用的公式是安全状态公式(Safe state algorithm),其逻辑如下:Available: 各资源的可用数量
Allocation: 各进程已分配到的资源数量
Request: 各进程对资源的请求数量
如果 Request[i] <= Need[i],否则出错
如果 Request[i] <= Available,否则等待
如果分配资源后系统仍然处于安全状态,即不存在死锁,那么执行分配操作,否则等待。
该公式通过动态检查分配资源后系统是否处于安全状态,以决定是否进行资源的分配。
通过以上公式和算法,我们可以有效地判断、预防和避免死锁的发生,保障系统的正常运行。