死锁的避免实验报告

死锁的避免实验报告
死锁的避免实验报告

信息科学与技术学院实验报告

课程名称: 操作系统实验项目: 死锁的避免

实验地点:指导教师: 日期:

实验类型:(验证性实验综合性实验设计性实验)

专业: 计算机服务外包班级: 14外3 姓名: 周鹏飞学号: 1414104033

一、实验目的及要求

了解死锁避免的概念,掌握避免死锁的算法

二、实验仪器、设备或软件

VC++6.0

三、实验内容及原理

银行家算法流程图:

银行家算法是死锁处理中较为经典的一种避免死锁的方法,它一般分为单资源银行家算法和多资源银行家算法,所谓单资源银行家算法是指只有一种可用资源,多银行家算法是指由多种可用资源,它主要是通过合理的分配资源使得系统不产生死锁的思想来完成。

1.Available是一个长度为m的向量,它表示每类资源可用的数量,Available【j】=k表

示rj类资源可用的数量为k。

2.Max是一个n*m矩阵,它表示每个进程对资源的最大需求,Max【i,j】=k,表示进程之

多可用申请k个rj类资源单位。

3,Allocation是一个n*m矩阵,它表示当前分给每个进程的资源数目。Allocation【i,j】=k,表示进程当前分到k个rj类资源。

4.Need是一个n*m矩阵,它表示每个进程还缺少多少资源。Need【i,j】=k,表示进程尚

需k个rj类资源才能完成其任务。显然Need【i,j】=Max【i,j】-Allocation【i,j】。

当输入进程数与资源数,以及各进程所需的资源和已分配资源之后,系统就会寻找安全序列,若能找到一个安全序列,则结果表明当前系统安全,若找不到则当前系统不安全。

假设进程P提出请求Request[i],则银行家算法按如下步骤进行判断:

1)如果Request[i] <=Need[i],则转向2);否则出错。

2)如果Request[i] <=Available[i],则转向3);否则出错。

3)系统试探分配相关资源,修改相关数据:

Available[i]=Available[i]-Request[i];

Allocation[i]=Allocation[i]+Request[i];

Need[i]=Need[i]-Request[i];

4)系统执行安全性检查,如安全,则分配成立;否则试探性分配资源作废,系统恢复原状,

进程进入等待状态。

4.1.2安全检测函数(check)

1)设置两个向量work和finish:work = available,表示系统可提供给进程继续运行所需的各类资源数目;finish表示系统是否有足够的资源分配给进程,使之完成。开始时先做finish【i】:=false;当有足够资源分配给进程时,再令finish【i】:=true。

2)从进程集合中找到一个嫩满足下述条件的进程:

a:finish【i】=false;b:need【i】【j】<=work[j];若找到,执行(3),否则,执行(4)。

3):当进程i获得资源后,可顺利执行,直到完成,并释放出分配给它的资源,故应执行:

Work【j】:=work【j】+allocation[i,j];

Finish[i]:=true;

A[v++]=I;

Go to step 2;

4):如果所有进程的finish【i】=true都满足,则表示系统处于安全状态,输出安全

序列,否则系统处于不安全状态。

四、实验步骤(或过程)

#include

#include

#include

#define False 0

#define True 1

int Max[100][100]={0};//各进程所需各类资源的最大需求

int Avaliable[100]={0};//系统可用资源

char name[100]={0};//资源的名称

int Allocation[100][100]={0};//系统已分配资源

int Need[100][100]={0};//还需要资源

int Request[100]={0};//请求资源向量

int temp[100]={0};//存放安全序列

int Work[100]={0};//存放系统可提供资源

int M=100;//作业的最大数为100

int N=100;//资源的最大数为100

void showdata()//显示资源矩阵

{

int i,j;

cout<<"系统目前可用的资源[Avaliable]:"<

for(i=0;i

cout<

cout<

for (j=0;j

cout<

cout<

cout<<" Max Allocation Need"<

cout<<"进程名 ";

for(j=0;j<3;j++){

for(i=0;i

cout<

cout<<" ";

}

cout<

for(i=0;i

cout<<" "<

for(j=0;j

cout<

cout<<" ";

for(j=0;j

cout<

cout<<" ";

for(j=0;j

cout<

cout<

}

}

int changdata(int i)//进行资源分配

{

int j;

for (j=0;j

Avaliable[j]=Avaliable[j]-Request[j];

Allocation[i][j]=Allocation[i][j]+Request[j]; Need[i][j]=Need[i][j]-Request[j];

}

return 1;

}

int safe()//安全性算法

{

int i,k=0,m,apply,Finish[100]={0};

int j;

int flag=0;

Work[0]=Avaliable[0];

Work[1]=Avaliable[1];

Work[2]=Avaliable[2];

for(i=0;i

apply=0;

for(j=0;j

if (Finish[i]==False&&Need[i][j]<=Work[j]){ apply++;

if(apply==N){

for(m=0;m

Work[m]=Work[m]+Allocation[i][m];//变分配数

Finish[i]=True;

temp[k]=i;

i=-1;

k++;

flag++;

}

}

}

}

for(i=0;i

if(Finish[i]==False){

cout<<"系统不安全"<

return -1;

}

}

cout<<"系统是安全的!"<

cout<<"分配的序列:";

for(i=0;i

cout<

if(i";

}

cout<

return 0;

}

void share()//利用银行家算法对申请资源对进行判定

{

char ch;

int i=0,j=0;

ch='y';

cout<<"请输入要求分配的资源进程号(0-"<

cin>>i;//输入须申请的资源号

cout<<"请输入进程 "<

for(j=0;j

{

cout<

cin>>Request[j];//输入需要申请的资源

}

for (j=0;j

if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错

{

cout<<"进程 "<

cout<<" 分配不合理,不予分配!"<

ch='n';

break;

}

else {

if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则 { //出错

cout<<"进程"<

cout<<" 分配出错,不予分配!"<

ch='n';

break;

}

}

}

if(ch=='y') {

changdata(i);//根据进程需求量变换资源

showdata();//根据进程需求量显示变换后的资源

safe();//根据进程需求量进行银行家算法判断

}

}

void addresources(){//添加资源

int n,flag;

cout<<"请输入需要添加资源种类的数量:";

cin>>n;

flag=N;

N=N+n;

for(int i=0;i

cout<<"名称:";

cin>>name[flag];

cout<<"数量:";

cin>>Avaliable[flag++];

}

showdata();

safe();

}

void delresources(){//删除资源

char ming;

int i,flag=1;

cout<<"请输入需要删除的资源名称:";

do{

cin>>ming;

for(i=0;i

if(ming==name[i]){

flag=0;

break;

}

if(i==N)

cout<<"该资源名称不存在,请重新输入:";

}

while(flag);

for(int j=i;j

{

name[j]=name[j+1];

Avaliable[j]=Avaliable[j+1];

}

N=N-1;

showdata();

safe();

}

void changeresources(){//修改资源函数

cout<<"系统目前可用的资源[Avaliable]:"<

cout<>Avaliable[0]>>Avaliable[1]>>Avaliable[2]; cout<<"经修改后的系统可用资源为"<

for (int k=0;k

cout<

safe();

}

void addprocess(){//添加作业

int flag=M;

M=M+1;

cout<<"请输入该作业的最打需求量[Max]"<

cout<

cin>>Max[flag][i];

Need[flag][i]=Max[flag][i]-Allocation[flag][i];

}

showdata();

safe();

}

int main()//主函数

{

int i,j,number,choice,m,n,flag;

char ming;

cout<<"*****************资源管理系统的设计与实现*****************"<

cin>>n;

N=n;

for(i=0;i

{

cout<<"资源"<

cin>>ming;

name[i]=ming;

cout<<"资源的数量:";

cin>>number;

Avaliable[i]=number;

}

cout<

cout<<"请输入作业的数量:";

cin>>m;

M=m;

cout<<"请输入各进程的最大需求量("<

for(i=0;i

for(j=0;j

cin>>Max[i][j];

do{

flag=0;

cout<<"请输入各进程已经申请的资源量("<

for(i=0;i

for(j=0;j

cin>>Allocation[i][j];

if(Allocation[i][j]>Max[i][j])

flag=1;

Need[i][j]=Max[i][j]-Allocation[i][j];

}

if(flag)

cout<<"申请的资源大于最大需求量,请重新输入!\n";

}

while(flag);

showdata();//显示各种资源

safe();//用银行家算法判定系统是否安全

while(choice)

{

cout<<"**************银行家算法演示***************"<

cout<<" 2:删除资源 "<

cout<<" 3:修改资源 "<

cout<<" 4:分配资源 "<

cout<<" 5:增加作业 "<

cout<<" 0:离开 "<

cout<<"*******************************************"<

cin>>choice;

switch(choice)

{

case 1: addresources();break;

case 2: delresources();break;

case 3: changeresources();break;

case 4: share();break;

case 5: addprocess();break;

case 0: choice=0;break;

default: cout<<"请正确选择功能号(0-5)!"<

}

}

return 1;

}

五、实验结论

1、实验结果

多资源银行家算法测试的结果如图所示:图1

图2

图1所示的是:系统中有3个可用的资源a b c,数量都是10,系统中有3个作业,他们最大需求量分别是1 2 3、1 2 3、1 2 3,而他们已经申请的资源是1 1 1、1 1 1、1 1 1,由于系统可用的资源a b c 都是10个,通过银行家算法可以使得任何一个作业完成释放自己得到的资源,从而使得整个系统正常运行,系统是安全。

图2所示的是:系统中有3个可用的资源a b c,数量都为0,系统中有3个作业,他们的最大需求量分别是1 1 1、1 1 1、1 1 1,而他们已经申请的资源是0 0 0、0 0 0、0 0 0,由于系统中可用资源都为0,通过银行家算法任何作业都无法完成释放自己的资源。从而使得整个系统不能正常运行,系统是不安全。

单资源银行家算法结果如下所示:

图3

图4

图3所示的是:系统中有一个可用的资源a,他的资源数量是10,系统中有2个作业,他们的最大需要量分别是8、9,他们已经申请的资源分别是2、3,而系统可用的资源为10,通过银行家算法可以使任何一个作业完成释放自己的资源,进而使得整个系统正常运行,系统是安全。

图4所示的是:系统中有一个可用的资源a,他的资源数量是10,系统中有2个作业,他们的最大需求量分别是12、12,他们已经申请的资源分别是1、1,而系统可用的资源为10,通过银行家算法不能使得任何一个作业都无法完成释放自己的资源,进而使得整个系统不能正常运行,系统是不安全的。

2、分析讨论

六、指导教师评语及成绩

操作系统实验报告利用银行家算法避免死锁

计算机操作系统实验报告 题目利用银行家算法避免死锁 一、实验目的: 1、加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 2、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、实验内容: 用银行家算法实现资源分配: 设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}的系统,例如,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。 三、问题分析与设计: 1、算法思路: 先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤: (1)如果Requesti<or =Need,则转向步骤(2);否则,认为出错,因

为它所需要的资源数已超过它所宣布的最大值。 (2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程: ①Finish[i]=false ②Need

操作系统精髓与设计原理-第6章 并发性_死锁和饥饿

第六章习题翻译 第一部分复习题 6.1给出可重用资源和可消费资源的例子。 答:可重用资源:处理器,I/O通道,主存和辅存,设备以及诸如文件,数据库和信号量之类的数据结构。 可消费资源:中断,信号,消息和I/O缓冲区中的信息。 6.2可能发生死锁所必须的三个条件是什么? 答:互斥,占有且等待,非抢占。 6.3产生死锁的第4个条件是什么? 答:循环等待。 6.4如何防止占有且等待的条件? 答:可以要求进程一次性地请求所有需要的资源,并且阻塞这个资源直到所有请求都同时满足。 6.5给出防止无抢占条件的两种方法。 答:第一种,如果占有某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它最初占用的资源,如果有必要,可再次请求这些资源和另外的资源。 第二种,如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。 6.6如何防止循环等待条件? 答:可以通过定义资源类型的线性顺序来预防。如果一个进程已经分配到了R类型的资源,那么它接下来请求的资源只能是那些排在R类型之后的资源类型。6.7死锁避免,检测和预防之间的区别是什么? 答:死锁预防是通过间接地限制三种死锁必要条件的至少一个或是直接地限制循环等待的发生来避免死锁的出现。死锁避免允许可能出现的必要条件发生,但是采取措施确保不会出现死锁的情况。而死锁检测允许资源的自由分配,采取周期性的措施来发现并处理可能存在的死锁情况。 第二部分习题 6.1写出图6.1(a)中死锁的四个条件。 解:互斥:同一时刻只有一辆车可以占有一个十字路口象限。占有且等待:没有车可以倒退;在十字路口的每辆车都要等待直到它前面的象限是空的。非抢占: 没有汽车被允许挤开其他车辆。循环等待: 每辆汽车都在等待一个此时已经被其他车占领的十字路口象限。 6.2按照6.1节中对图6.2中路径的描述,给出对图6.3中6种路径的简单描述。 解:1.Q 获得 B 和A, 然后释放 B 和 A. 当 P 重新开始执行的时候, 它将会能够获得两个资源。 2. Q 获得 B和A, P 执行而且阻塞在对 A的请求上. Q释放 B 和A。当 P 重新开始执行的时候,它将会能够获得两个资源。 3. Q 获得 B ,然后 P 获得和释放 A. Q 获得A然后释放 B 和 A. 当 P 重新开始行的时候,它将会能够获得 B。 4. P 获得A然后 Q 获得 B. P 释放 A. Q 获得A然后释放

《操作系统原理》5资源管理(死锁)习题

第五章死锁练习题 (一)单项选择题 1.系统出现死锁的根本原因是( )。 A.作业调度不当B.系统中进程太多C.资源的独占性D.资源管理和进程推进顺序都不得当 2.死锁的防止是根据( )采取措施实现的。 A.配置足够的系统资源B.使进程的推进顺序合理 C.破坏产生死锁的四个必要条件之一D.防止系统进入不安全状态 3.采用按序分配资源的策略可以防止死锁.这是利用了使( )条件不成立。 A.互斥使用资源B循环等待资源C.不可抢夺资源D.占有并等待资源 4.可抢夺的资源分配策略可预防死锁,但它只适用于( )。 A.打印机B.磁带机C.绘图仪D.主存空间和处理器 5.进程调度算法中的( )属于抢夺式的分配处理器的策略。 A.时间片轮转算法B.非抢占式优先数算法C.先来先服务算法D.分级调度算法 6.用银行家算法避免死锁时,检测到( )时才分配资源。 A.进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B.进程己占用的资源数与本次申请资源数之和超过对资源的最大需求量 C.进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足尚需的最大资源量 D进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足本次申请量,但不能满足尚需的最大资源量 7.实际的操作系统要兼顾资源的使用效率和安全可靠,对资源的分配策略,往往采用( )策略。 A死锁的防止B.死锁的避免C.死锁的检测D.死锁的防止、避免和检测的混合 (二)填空题 1.若系统中存在一种进程,它们中的每一个进程都占有了某种资源而又都在等待其中另一个进程所占用的资源。这种等待永远不能结束,则说明出现了______。 2.如果操作系统对______或没有顾及进程______可能出现的情况,则就可能形成死锁。 3.系统出现死锁的四个必要条件是:互斥使用资源,______,不可抢夺资源和______。 4.如果进程申请一个某类资源时,可以把该类资源中的任意一个空闲资源分配给进程,则说该类资源中的所有资源是______。 5.如果资源分配图中无环路,则系统中______发生。 6.为了防止死锁的发生,只要采用分配策略使四个必要条件中的______。 7.使占有并等待资源的条件不成立而防止死锁常用两种方法:______和______. 8静态分配资源也称______,要求每—个进程在______就申请它需要的全部资源。 9.释放已占资源的分配策略是仅当进程______时才允许它去申请资源。 10.抢夺式分配资源约定,如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足必须等待时、系统可以______该进程已占有的资源。 11.目前抢夺式的分配策略只适用于______和______。 12.对资源采用______的策略可以使循环等待资源的条件不成立。 13.如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于______。14.只要能保持系统处于安全状态就可______的发生。 15.______是一种古典的安全状态测试方法。 16.要实现______,只要当进程提出资源申请时,系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。

操作系统实验报告死锁的避免

操作系统实验(二)死锁的避免 1. 实验内容 使用C++实现模拟随机算法和银行家算法 2. 实验目的 (1)了解死锁的产生原因(随机算法) (2)理解死锁的解决办法(银行家算 法) 3?实验题目 使用随机算法和银行家算法设计程序

操作系统实验(二)死锁的避免4?程序流程图

银行家算法流程图 安全性算法流程图

5?程序代码和运行结果 #i nclude #i nclude typedef struct { int A; int B; int C; }RES; #defi ne false 0 #defi ne true 1

〃系统中所有进程数量 #defi ne PNUMBER 3 //最大需求矩阵 RES Max[PNUMBER]; //已分配资源数矩阵 RES Allocatio n[ PNUMBER]; //需求矩阵 RES Need[PNUMBER]; 〃可用资源向量 RES Available={0,0,0}; //安全序列 int safe[PNUMBER]; void setCo nfig() { int i=0,j=0; prin tf("================开始手动配置资源==================\n"); 〃可分配资源 printf("输入可分配资源\n"); sca nf("%d%d%d",&Available.A,&Available.B,&Available.C); //最大需求矩阵MAX printf("输入最大需求矩阵%dx%d\n",PNUMBER,PNUMBER ); for (i=0;i

一种基于Petri网的自动测试系统死锁预防策略

一种基于Petri 网的自动测试系统死锁预防策略1 马敏,陈光礻禹 电子科技大学自动化工程学院,四川成都(610054) 摘 要:针对自动测试系统中多任务并行测试复杂,容易出现死锁现象的问题,提出一种基于Petri 网的死锁预防策略。首先为自动测试系统建立一个Petri 网模型,然后将Petri 网的状态方程作为约束条件,求出模型的发射序列即系统中无死锁的任务调度路径。Petri 网的发射序列求解一直是NP 问题,针对这种情况,引入遗传算法对可行解空间进行搜索。 关键词:自动测试系统,并行测试,死锁,Petri 网,遗传算法 中图分类号:TP202 1 引 言 随着自动测试系统的发展,多任务并行测试技术越来越受到广泛的应用。自动测试系统在同一时间完成多项测试任务,需要对被测任务和测试资源进行合理的调度,否则很容易发生死锁现象[1]。一旦发生死锁现象,系统就无法正常工作,因此死锁一直都是系统设计者在组建系统之前,必须考虑避免的现象。 Petri 网是Petri 博士于1962年提出的一种系统描述和分析的形式化建模工具。它作为一种数学方法,在离散事件系统建模、分析、性能评价和控制设计中得到广泛的应用,而且它能模拟系统的并发和冲突行为,反映系统的动态行为,因此经常被用来处理系统死锁问题[2],也适用于并行自动测试系统。同样Petri 网技术也已经应用到测试领域,文献[3]就是运用Petri 网来进行测试仪器特性描述。基于这种情况,本文提出一种基于Petri 网的自动测试系统死锁预防策略,并结合遗传算法搜索可行解。 2 基于Petri 网的自动测试系统死锁描述 2.1 Petri 网基本原理 Petri 网(Timed Transition Petri Net )定义为以下5元组: 0{}PN P T I O M =,,,,此处:1{,...,}n P p p =是库所的有限集合,为库所的个数; 是变迁的有限集合,为变迁的个数,并要求0n >1{,...,}m T t t =0m >P T =ΦI ;:I P T N ×→是输 入函数,为非负整数集;{0,1,...}N =:O T P N ×→是输出函数;0M 是Petri 网的初始状态。 2.2系统的Petri 网模型 首先为支持多任务并行测试的自动测试系统建立一个Petri 网模型,描述系统的结构与性能。 建立自动测试系统Petri 网模型的步骤如下: 1) 根据库所和变迁的定义以及测试实施的过程,确定自动测试系统的库所集和变迁集。 2) 确定库所和变迁之间的关系,得到自动测试系统初始Petri 模型。 3) 根据Petri 网的基本规则和实际系统的状况,确定Petri 模型的初始状态,即初始状态下的托肯数 (token),得到最终的Petri 网模型。 自动测试系统Petri 网模型中的库所可以分为三类,分别是操作库所,资源库所和闲置 1 本课题得到教育部博士点基金(20030614006)的资助。

死锁与饥饿

死锁与饥饿 第五章死锁与饥饿 学习指导: 死锁是操作系统的棘手问题,因为不存在处理 死锁的完美方法。从理论上来说,如果给定进程有关资源的命令序列,可以给出避免死锁的充分必要算法,尽管其开销很大(NP完全),但实际以序列形式给出的资源需求对于稍微复杂一点的程序都是不现实的。 本章介绍的预防、避免、检测与恢复策略,在大多数实际系统中并未采用,一方面因为开销,另一方面因为使用的方便性。 然而本章内容仍是重要的,尤其是死锁避免与 检测。包括安全状态与安全序列的定义和检查算

法、避免死锁的资源分配算法。读者应当认真区分死锁避免算法与死锁检测算法之间的本质差别,尽管这两个算法在结构上很相似,差别只在Need与Work的比较和Request与Work的比较。 饥饿与饿死反映了资源分配策略的不公平性, 应当从进程状态方面理解饥饿与死锁之间的差 习题解答: 1.下面关于死锁问题的叙述哪些是正确的,哪 些是错误的,说明原因。 (1)参与死锁的所有进程都占有资 源; (2)参与死锁的所有进程中至少有两 个进程占有资源; (3)死锁只发生在无关进程之间; (4)死锁可发生在任意进程之间。 答:说法(1)是错误的,应该是参与死锁的所 有进程都等待资源。如下图所示,参与进程 pl、p2、p3、p4,尽管p3、p4不占有资源,但 也卷入死锁。

说法(2)正确。参与死锁的进程至少有两个,设为p1,p2,pl占有资源r1而等待资源 r2 , p2占有资源r2而等待资源r1。说法(3) 错误。死锁也可能发生在相关进程之间,如 pl和p2也可能是相关进程。 说法(4)正确,死锁既可能发生在相关进程之间,也可能发生在无关进程之间。即死锁 可发生在任意进程之间。 2.试证明当每个资源类中仅有一个资源实 例时,资源分配图中的环路是死锁的充要条 件。 证明:已知必要条件成立,即发生死锁必存 在环路,下面只需证明充分条件,即在每类资源仅有一个实例的前提下,环路意味着死锁。 假定环路上共有k个进程(k 2),设这k个进

操作系统课程设计----模拟银行家算法避免死锁

模拟通过银行家算法避免死锁 一、银行家算法产生的背景及目的 1:在多道程序系统中,虽然借助于多个进程的并发执行来改善系统的利用率,提高系统的吞吐量,但可能发生一种危险—死锁。死锁就是多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,如无外力作用,他们将无法再向前进行,如再把信号量作为同步工具时,多个Wait和Signal 操作顺序不当,会产生进程死锁。 然而产生死锁的必要条件有互斥条件,请求和保持条件,不剥夺条件和环路等待条件。在预防死锁的几种方法中,都施加了较强的限制条件,在避免死锁的方法中,所施加的条件较弱,有可能获得令人满意的系统性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统都处于安全状态,便可避免死锁。2:实验目的:让学生独立的使用编程语言编写和调试一个系统分配资源的简单模拟程序,了解死锁产生的原因及条件。采用银行家算法及时避免死锁的产生,进一步理解课堂上老师讲的相关知识点。银行家算法是从当前状态出发,逐个按安全序列检查各客户中谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。 二:银行家算法中的数据结构 1:可利用资源向量Available。这是一个含有m个元素的数组,其中的每个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态的改变。如果Available[j]=k,z 则表示系统中现有Rj类资源K 个。 2:最大需求矩阵Max。这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=k,表示第i个进程需要第Rj 类资源的最大数目k个. 3: 分配矩阵Allocation,也是n*m的矩阵,若Allocation[i,j]=k,表示第i 个进程已分配Rj类资源的数目为k个。 4:需求矩阵Need。也是一个n*m的矩阵,Need[i,j]=k,表示第i个进程还需Rj类资源k个。 三、银行家算法及安全性算法 1:银行家算法 设Request[i]是进程Pi的请求向量,若Request[i][j]=k;表示进程需要j类资源k个。当Pi发出资源请求时,系统按下属步骤进行检查; (1)如果Request[i][j]<=Need[i][j];便转向步骤(2),否则认为出错,因为它 所需要的资源数已超过他所宣布的最大值。 (2)如果Request[i][j]<=Available[i][j],便转向步骤(3),否则认为尚无足 够资源,进程需等待。

分析linux系统中死锁处理策略

分析linux系统中死锁处理策略 摘要:介绍了死锁的概念、预防、必要条件及linux处理死锁的策略,并对银行家算法进行分析。 关键字:死锁,linux,银行家算法 1.死锁的概念 死锁(Deadlock)是若干进程因系统资源有限且操作不当而造成的带有全局危害性的现象。我们考虑下面这个例子:设系统中只有一台打印机和一台读卡机,它们被进程A和进程B共用。这两台物理设备的特性决定了对它们的使用方式必须是顺序的,即一个进程用完了,另一个进程才能用。进程A和B各自对资源的申请使用情况如下: A:申请读卡机 B:申请打印机 申请打印机申请读卡机 使用读卡机使用打印机 使用打印机使用读卡机 释放读卡机释放打印机 释放打印机释放读卡机 由于进程并行工作,就可能出现这样的执行序列: A:申请读卡机 B:申请打印机 A:申请打印机 B:申请读卡机 所谓死锁就是指在一个进程集合中的每个进程,都在等待仅由该集合中的另一进程才能引发的事件,而无限期地僵持下去的局面。 2.死锁的四个必要条件 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。 循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。

3.死锁的预防 1. 破坏互斥的条件 非共享的资源必定具有互斥的条件。例如,一台打印机不能同时被多个进程所共享。 2. 破坏占有且等待的条件 为了使系统中从来不会出现占有且等待的情况,我们要保证无论在什么时候,一个进程都可申请到它没有占有的任何其他资源。 两种策略也有如下缺点: (1)在许多情况下,一个进程在执行之前不可能知道它所需要的全部资源。 (2)资源利用率低。 (3)降低了进程的并发性。 (4)可能出现有的进程总得不到运行的状况(“饥饿”)。 3. 破坏非抢占的条件 产生死锁的第三个必要条件是对已分配资源的非抢占式分配。为破坏这个条件,可采用下述隐式抢占方式:如果一个进程占有某些资源,它还要申请另外的资源,而后者又被别的进程所占有,不能立即分给它,该进程就一定处于等待状态。 4. 破坏循环等待的条件 为了使循环等待的条件从不出现,一种方法是实行资源有序分配策略,即把全部资源事先按类编号,然后依序分配,使得进程在申请、占用资源时不会构成环路,从而不会产生死锁。 4.处理死锁的策略 1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。 2.检测死锁并且恢复。 3.仔细地对资源进行动态分配,以避免死锁。 4.通过破除死锁四个必要条件之一,来防止死锁产生。 检测死锁的代价很大。所有Linux对死锁不作任何处理,这是因为基于成本的考虑选择鸵鸟算法。 5.银行家算法 众所周知,避免死锁的著名算法叫做“银行家算法(Banker’s

操作系统(死锁)试题

第五章死锁 一.选择题 1.为多道程序提供的可共享资源不足时,可能出现死锁。但是,不适当的 C 也可能产生死锁。 (A)进程优先权(B)资源的线性分配 (C)进程推进顺序(D)分配队列优先权 2.采用资源剥夺法可以解除死锁,还可以采用 B 方法解除死锁。 (A)执行并行操作(B)撤销进程 (C)拒绝分配新资源(D)修改信号量 3.产生死锁的四个必要条件是:互斥、 B 循环等待和不剥夺。 (A)请求与阻塞(B)请求与保持 (C)请求与释放(D)释放与阻塞 4.在分时操作系统中,进程调度经常采用算法。 (A)先来先服务(B)最高优先权 (C)时间片轮转(D)随机 5.资源的按序分配策略可以破坏条件。 (A)互斥使用资源(B)占有且等待资源 (C)非抢夺资源(D)循环等待资源 6.在 C 情况下,系统出现死锁。 (A)计算机系统发生了重大故障 (B)有多个封锁的进程同时存在 (C)若干进程因竞争而无休止地相互等待他方释放已占有的资源 (D)资源数远远小于进程数或进程同时申请的资源数量远远超过资源总数 7。银行家算法在解决死锁问题中是用于 B 的。 (A)预防死锁(B)避免死锁 (C)检测死锁(D)解除死锁 8.支持多道程序设计的操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中不是引起操作系统选择新进程的直接原因。 (A)运行进程的时间片用完 (B)运行进程出错 (C)运行进程要等待某一事件发生 (D)有新进程进入就绪队列 9. 在下列解决死锁的方法中,属于死锁预防策略的是 B 。 (A)银行家算法 (B)有序资源分配法 (C)死锁检测法 (D)资源分配图化简法 二、综合题 1.若系统运行中出现如表所示的资源分配情况,改系统是否安全?如果进程P2此时提出资源申请(1,2,2,2),系统能否将资源分配给它?为什么?

操作系统死锁练习及答案

死锁练习题 (一)单项选择题 l系统出现死锁的根本原因是( )。 A.作业调度不当 B.系统中进程太多 C.资源的独占性 D.资源管理和进程推进顺序都不得当 2.死锁的防止是根据( )采取措施实现的。 A.配置足够的系统资源 B.使进程的推进顺序合理 C.破坏产生死锁的四个必要条件之一 D.防止系统进入不安全状态 3.采用按序分配资源的策略可以防止死锁.这是利用了使( )条件不成立。 A.互斥使用资源 B循环等待资源 c.不可抢夺资源 D.占有并等待资源 4.可抢夺的资源分配策略可预防死锁,但它只适用于( )。A.打印机 B.磁带机 c.绘图仪 D.主存空间和处理器 5.进程调度算法中的( )属于抢夺式的分配处理器的策略。A.时间片轮转算法 B.非抢占式优先数算法 c.先来先服务算法 D.分级调度算法 6.用银行家算法避免死锁时,检测到( )时才分配资源。 A.进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B.进程己占用的资源数与本次申请资源数之和超过对资源的最大需求量 c.进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足尚需的最大资源量 D进程已占用的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源能满足本次申请量,但不能满足尚需的最大资源量 7.实际的操作系统要兼顾资源的使用效率和安全可靠,对资源的分配策略,往往采用 ( )策略。 A死锁的防止 B.死锁的避免 c.死锁的检测 D.死锁的防止、避免和检测的混合(一)单项选择题 1.D 2.C 3.B 4.D 5.A 6 C 7 D (二)填空题 l若系统中存在一种进程,它们中的每一个进程都占有了某种资源而又都在等待其中另一个进程所占用的资源。这种等待永远不能结束,则说明出现了______。 2.如果操作系统对 ______或没有顾及进程______可能出现的情况,则就可能形成死锁。3.系统出现死锁的四个必要条件是:互斥使用资源,______,不可抢夺资源和______。 4.如果进程申请一个某类资源时,可以把该类资源中的任意一个空闲资源分配给进程,则说该类资源中的所有资源是______。 5.如果资源分配图中无环路,则系统中______发生。 6.为了防止死锁的发生,只要采用分配策略使四个必要条件中的______。 7.使占有并等待资源的条件不成立而防止死锁常用两种方法:______和______. 8静态分配资源也称______,要求每—个进程在______就申请它需要的全部资源。 9.释放已占资源的分配策略是仅当进程______时才允许它去申请资源。 10抢夺式分配资源约定,如果一个进程已经占有了某些资源又要申请新资源,而新资源不能满足必须等待时、系统可以______该进程已占有的资源。 11.目前抢夺式的分配策略只适用于______和______。 12.对资源采用______的策略可以使循环等待资源的条件不成立。 13.如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则称系统处于______。 14.只要能保持系统处于安全状态就可______的发生。 15.______是一种古典的安全状态测试方法。 16.要实现______,只要当进程提出资源申请时,系统动态测试资源分配情况,仅当能确保系统安全时才把资源分配给进程。 17.可以证明,M个同类资源被n个进程共享时,只要不等式______成立,则系统一定不会发生死锁,其中x为每个进程申请该类资源的最大量。 18.______对资源的分配不加限制,只要有剩余的资源,就可把资源分配给申请者。 19.死锁检测方法要解决两个问题,一是______是否出现了死锁,二是当有死锁发生时怎样去______。 20.对每个资源类中只有一个资源的死锁检测程序根据______和______两张表中记录的资源情况,把进程等待资源的关系在矩阵中表示出

操作系统实验报告-死锁的避免

操作系统实验报告-死锁的避免

操作系统实验(二)死锁的避免 1.实验内容 使用C++实现模拟随机算法和银行家算法 2.实验目的 (1)了解死锁的产生原因(随机算法) (2)理解死锁的解决办法(银行家算法) 3.实验题目 使用随机算法和银行家算法设计程序 4.程序流程图 主要过程流程图

银行家算法流程图

安全性算法流程图

5.程序代码和运行结果#include #include typedef struct { int A; int B; int C; }RES; #define false 0

#define true 1 //系统中所有进程数量 #define PNUMBER 3 //最大需求矩阵 RES Max[PNUMBER]; //已分配资源数矩阵 RES Allocation[PNUMBER]; //需求矩阵 RES Need[PNUMBER]; //可用资源向量 RES Available={0,0,0}; //安全序列 int safe[PNUMBER]; void setConfig() { int i=0,j=0; printf("================开始手动配置资源==================\n"); //可分配资源 printf("输入可分配资源\n"); scanf("%d%d%d",&Available.A,&Available.B,&Available.C); //最大需求矩阵MAX printf("输入最大需求矩阵%dx%d\n",PNUMBER,PNUMBER ); for (i=0;i

银行家死锁避免算法模拟

银行家死锁避免算法模拟 一.课程设计目的 通过本次实验掌握银行家死锁避免算法的基本思想。当进程提出资源申请时,能够用该算法判断是否拒绝进程请求。 二.课程设计摘要 银行家算法: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。 四.课程设计原理分析 在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,若无外力作用,它们都将无法再向前推进。为保证系统中诸进程的正常运行,应事先采取必要的措施,来预防死锁。最有代表性的避免死锁的方法,是Dijkstra的银行家算法。 死锁: 死锁的产生,必须同时满足四个条件,第一个为互斥条件,即一个资源每次只能由一个进程占用;第二个为请求和保持条件,指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进

程阻塞,但又对自己已获得的其他资源保持不放;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。 银行家算法原理: 银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。通过这个算法可以用来解决生活中的实际问题,如银行贷款等。 银行家算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行家资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁. 算法思想: 将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。 用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。

操作系统第五章复习资料

第五章设备管理 1、试说明设备控制器的组成。P163 答:设备控制器的组成由设置控制器与处理机的接口;设备控制器与设备的接口;I/O 逻辑。 2、为了实现CPU与设备控制器间的通信,设备控制器应具备哪些功能?P162-P163 答:基本功能:接收和识别命令;数据交换;标识和报告设备的状态;地址识别;数据缓冲;差错控制。 3、什么是字节多路通道?什么是数组选择通道和数组多路通道?P164-P165 答:1、字节多路通道:这是一种按字节交叉方式工作的通道。它通常都含有许多非分配型子通道,其数量可从几十到数百个,每个子通道连接一台I/O 设备,并控制该设备的I/O 操作。这些子通道按时间片轮转方式共享主通道。只要字节多路通道扫描每个子通道的速率足够快,而连接到子通道上的设备的速率不是太高时,便不致丢失信息。2、数组选择通道:字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。3、数组多路通道:数组选择通道虽有很高的传输速率,但它却每次只允许一个设备数据。数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道。它含有多个非分配型子通道,因而这种通道既具有很多高的数据传输速率,又能获得令人满意的通道利用率。 4、如何解决因通道不足而产生的瓶颈问题?P166 答:解决“瓶颈”问题的最有效的方法,便是增加设备到主机间的通路而不增加通道,就是把一个设备连接到多个控制器上,而一个控制器又连接到多个通道上。多通路方式不仅解决了“瓶颈”问题。而且提高了系统的可靠性,因为个别通道或控制器的故障不会使设备和存储器之间没有通路。 5、试对VESA及PCI两种总线进行比较。P167 答:1、VESA 该总线的设计思想是以低价位迅速点领市场。VESA 总线的带宽为32 位,最高传输速率为132Mb/s。VESA 总线仍存在较严重的缺点,它所能连接的设备数仅为2—4 台,在控制器中无缓冲,故难于适应处理器速度的不断提高,也不能支持后来出现的Pentium 微机。2、PC 随着Pentium 系列芯片的推出,PCI 在CPU 和外设间插入一复杂的管理层,用于协调数据传输和提供一致的接口。在管理层中配有数据缓冲,通过该缓冲可将线路的驱动能力放大,使PCI 最多能支持10 种外设,并使高时钟频率的CPU 能很好地运行,最大传输速率可达132Mb/s。PCI 即可连接ISA、EISA 等传统型总线,又可支持Pentium 的64 位系统,是基于奔腾等新一代微处理器而发展的总线。 6、试说明推动I/O控制发展的主要因素是什么?P167 答:在I/O 控制方式的整个发展过程中,始终贯穿着这样一条宗旨,即尽量减少主机对I/O 控制的干预,把主机从繁杂的I/O 控制事务中解脱出来,以便更多地去完成数据处理任务。 7、有哪几种I/O控制方式?各适用于何种场合?P167-P170 答:1、程序I/O 方式:2、中断驱动I/O 控制方式:3、直接存储器访问(DMA)4、I/O 通道控制方式: 8、试说明DMA的工程流程。P170图要画 答:当CPU 要从磁盘读入一数据块时,便向磁盘控制器发送一条读命令。该命令被送到其中的命令寄存器(CR)中。同时,还须发送本次要将数据读入的内存起

操作系统实验报告利用银行家算法避免死锁完整版

操作系统实验报告利用 银行家算法避免死锁 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

计算机操作系统实验报告题目利用银行家算法避免死锁 一、实验目的: 1、加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 2、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、实验内容: 用银行家算法实现资源分配: 设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}的系统,例如,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。 三、问题分析与设计: 1、算法思路: 先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后

的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤: (1)如果Requesti<or =Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程:

管理组织机调度与死锁知识题及答案解析新

第三章处理机调度与死锁 一.选择题 1.下列算法中,操作系统用于作业调度的算法是。 A.先来先服务算法B.先进先出算法 C.最先适应算法D.时间片轮转算法 2.在批处理系统中,周转时间是指。 A.作业运行时间B.作业等待时间和运行时间之和 C.作业的相对等待时间D.作业被调度进入内存到运行完毕的时间3.在作业调度中,排队等待时间最长的作业被优先调度,这是指调度算法。 A.先来先服务B.短作业优先 C.响应比高优先D.优先级 4.下列算法中,用于进程调度的算法是。 A.最先适应B.最高响应比优先 C.均衡资源调度D.优先数调度 5.两个进程争夺同一个资源。 A.一定死锁B.不一定死锁 C.只要互斥就不会死锁D.以上说法都不对 6.下列各项中,不是进程调度时机的是。 A.现运行的进程正常结束或异常结束B.现运行的进程从运行态进入就绪态 C.现运行的进程从运行态进入等待态D.有一进程从等待态进入就绪态 7.进程调度算法有多种,不是进程调度算法。 A.先来先服务调度算法B.最短查找时间优先调度算法 C.静态优先数调度算法D.时间片轮转调度算法

8.作业调度程序从状态的队列中选取适当的作业投入运行。 A.就绪B.提交C.等待D.后备 9.在实时操作系统中,经常采用调度算法来分配处理器。 A.先来先服务 B.时间片轮转 C.最高优先级 D.可抢占的优先级10.采用时间片轮转调度算法主要是为了。 A.多个终端都能得到系统的及时响应 B.先来先服务 C.优先权高的进程及时得到调度 D.需要CPU时间最短的进程先做 11.下面关于优先权大小的论述中,不正确的论述是。 A.计算型作业的优先权,应低于I/O型作业的优先权 B.系统进程的优先权应高于用户进程的优先权 C.资源要求多的作业,其优先权应高于资源要求少的作业 D.在动态优先权时,随着进程运行时间的增加,其优先权降低 12.产生死锁的原因是有关。 A.与多个进程竞争CPU B.与多个进程释放资源 C.仅由于并发进程的执行速度不当 D.除资源分配策略不当外,也与并发进程执行速度不当 13.有关产生死锁的叙述中,正确的是。 A.V操作可能引起死锁B.P操作不会引起死锁 C.PV操作使用得当不会引起死锁D.以上说法均不正确 14.有关死锁的论述中,是正确的。

操作系统之调度算法和死锁中的银行家算法习题答案

1.有三个批处理作业,第一个作业10:00 到达,需要执行2 小时;第二个作业在10:10 到达,需要执行1 小时;第三个作业在10:25 到达,需要执行25 分钟。分别采用先来先服务,短作业优先和最高响应比优先三种调度算法,各自的平均周转时间是多少? 解: 先来先服务: (结束时间=上一个作业的结束时间+执行时间 周转时间=结束时间-到达时间=等待时间+执行时间) 短作业优先: 1)初始只有作业1,所以先执行作业1,结束时间是12:00,此时有作业2和3; 2)作业3需要时间短,所以先执行; 最高响应比优先: 高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。 1)10:00只有作业1到达,所以先执行作业1; 2)12:00时有作业2和3, 作业2:等待时间=12:00-10:10=110m;响应比=1+110/60=2.8; 作业3:等待时间=12:00-10:25=95m,响应比=1+95/25=4.8; 所以先执行作业3 2.在一单道批处理系统中,一组作业的提交时刻和运行时间如下表所示。试计算一下三种作业调度算法的平均周转时间T 和平均带权周转时间W。 (1)先来先服务;(2)短作业优先(3)高响应比优先

解: 先来先服务: 短作业优先: 作业顺序: 1)8:00只有作业1,所以执行作业1; 2)9:00有作业2和3,作业3短,所以先执行3; 3)9:12有作业2和4,作业4短,所以先执行4; 高响应比优先: 作业顺序: 1)8:00只有作业1,所以执行作业1; 2)9:00有作业2和3 作业2等待时间=9:00-8:30=30m,响应比=1+30/30=2; 作业3等待时间=9:00-9:00=0m,响应比=1+0/12=1; 所以执行作业2; 3)9:30有作业3和4 作业3等待时间=9:30-9:00=30m,响应比=1+30/12=3.5; 作业4等待时间=9:30-9:06=24m,响应比=1+24/6=5;

相关文档
最新文档