避免死锁:银行家算法_第1页
避免死锁:银行家算法_第2页
避免死锁:银行家算法_第3页
避免死锁:银行家算法_第4页
避免死锁:银行家算法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、避免死锁:银家算法避免死锁: 银家算法在银中,客户申请贷款的数量是有限的,每个客户在第次申请贷款时要声明完成该项所需的最资量,在满所有贷款要求时,客户应及时归还。银家在客户申请的贷款数量不超过拥有的最值时,都应尽量满客户的需要。在这样的描述中,银家就好操作系统,资就是资源,客户就相当于要申请资源的进程。死锁是指两个或两个以上的进程在执过程中,由于竞争资源或者由于彼此通信造成的种阻塞的现象,若外作,它们都将法推进下去。此时称系统处于死锁状态或系统产了死锁,这些永远在互相等待的进程称为死锁进程。产死锁的必要条件:互斥条件:指进程对所分配到的资源进排它性使,即在段时间内某资源只由个进程占。如果此时还

2、有其它进程请求资源,则请求者只能等待,直占有资源的进程毕释放。请求和保持条件:指进程已经保持少个资源,但提出了新的资源请求,该资源已被其它进程占有,此时请求进程阻塞,但对已获得的其它资源保持不放。不剥夺条件:指进程已获得的资源,在未使完之前,不能被剥夺,只能在使完时由释放。环路等待条件:指在发死锁时,必然存在个进程资源的环形链,即进程集合P0,P1,P2,Pn中的P0正P1占的资源;P1正在等待P2占的资源,Pn正在等待已被P0占的资源。在等待个死锁避免理解了死锁的原因,尤其是产死锁的四个必要条件,就可以最可能地避免、预防和解除死锁。所以,在系统设计、进程调度等注意如何能够不让这四个,在系统运

3、过程中,对进程发出的每个系统能够满的资源申请进动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发死锁,则不予分配,否则予以分配。因此,对资源的分配要给予合理的规划。银家算法是避免死锁的种重要法。操作系统按照银家制定的规则为进程分配资源,当进程次申请资源时,要测试该进程对资源的最需求量,如果系统现存的资源可以满它的最需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执中继续申请资源时,先测试该进程已占的资源数与本次申请的资源数之和是否超过了该进程对资源的最需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满该进程尚需的最资源量,若能满则按当前的申请量分配资源,否则

4、也要推迟分配。例:有5个进程P1,P2,P3,P4,P5。4类资源R1,R2,R3,R4 各数量为6、3、4、2T0时刻各进程分配资源情况如下T0时刻为安全状态,存在安全序列P4,P1,P2,P3,P5如下:银家算法在避免死锁度上常有效,但是需要在进程运前就知道其所需资源的最值,且进程数也通常不是固定的,因此使有限,但从思想上可以提供了解,可以转换地应在其他地M=3种类型的资源(A,B,C,) 进程个数n=5已分配资源数 资源需求量Available=(2,3,3);A24323B10001C22544A31021B43021C74310P1P2P3P4P5请求序列如下:a:进程P2请求资源(

5、0,3,4)b:进程P4请求资源(1,0,1)c:进程P1请求资源(2,0,1)d:进程P3请求资源(0,0,2)#define m 3alloc00 = 2; alloc01 = 1; alloc02 = 2;alloc10 = 4; alloc11 = 0; alloc12 = 2;alloc20 = 3; alloc21 = 0; alloc22 = 5;alloc30 = 2; alloc31 = 0; alloc32 = 4;alloc40 = 3; alloc41 = 1; alloc42 = 4;need00 = 3; need01 = 4; need02 = 7;need10

6、= 1; need11 = 3; need12 = 4;need20 = 0; need21 = 0; need22 = 3;need30 = 2; need31 = 2; need32 = 1;need40 = 1; need41 = 1; need42 = 0;void display() availablei endl;bool judge()bool non;int workm, finishn;for (i = 0; im; i+) worki = availablei;for (i = 0; in; i+) finishi = 0;while (tag-)for (i = 0; i

7、n; i+)if (finishi = 0)non = true;for (j = 0; j workj) non = false;if(non)for (j = 0; j m; j+)workj = workj + allocij;finishi = 1;non = true;for (i = 0; i n; i+)else return 0;return;return;for (int j = 0; j m; j+) /试探性分配if (judge()display();/ cout requestk0 requestk1 requestk2;cout 资源分配后系统处于不安全状态 endl;for (int j = 0; j m; j+) /试探性分配还原cout endl;int main()init();display

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论