银行家算法例题

合集下载

计算机操作系统之银行家算法

计算机操作系统之银行家算法

淮海工学院计算机工程学院实验报告书课程名:《计算机操作系统》题目:实验二银行家算法班级: ^ ^ 姓名: ^ ^实验二银行家算法实验目的和要求应用银行家算法验证进程安全性检查及分配资源编制模拟银行家算法的程序,并以以下例子验证程序的正确性。

实验环境1.PC微机。

2.Windows 操作系统。

3.C/C++/VB开发集成环境。

实验学时2学时,必做实验实验内容和步骤1)依照算法流程图编制可执行程序2)用以下两个例子验证程序的正确性。

3)按照上述两个例子,输出执行的结果。

算法流程图银行家算法:安全性算法:【例1】某系统有A、B、C、D这4类资源供5个进程共享,进程对资源的需求和分配情况如下表所示。

现在系统中A、B、C、D类资源分不还剩1、5、2、0个,请按银行家算法回答下列问题:(1) 现在系统是否处于安全状态?(2) 假如现在进程P2提出需要(0,4,2,0)个资源的请求,系统能否满足它的请求?【例2】用银行家算法考虑下列系统状态:进程分配矩阵最大需求矩阵资源总数矩阵A 3 0 1 1 4 1 1 16 3 4 2B 0 1 0 0 0 2 1 2C 1 1 1 0 4 2 1 0D 1 1 0 1 1 1 1 1E 0 0 0 0 2 1 1 0问系统是否安全?若进程B请求(0,0,1,0),可否立即分配?此后进程E也请求(0,0,1,0),可否分配给它?通过运行程序发觉,例1当中的系统处于不安全状态,进程P2提出的请求无法实现;例2当中的系统处于安全状态,进程B提出的请求能实现,此后进程E的请求也能实现。

源代码#include<iostream>#define N 20#define M 20using namespace std;int f(int a[N][M],int b[N][M],int m,int k) {int j;for(j=0;j<m;j++)if(a[k-1][j]>b[k-1][j])return 0;return 1;}int g(int a[N][M],int b[],int m,int k) {int j;for(j=0;j<m;j++)if(a[k][j]>b[j])return 0;return 1;}int h(int a[],int n){for(int i=0;i<n;i++)if(!a[i])return 0;return 1;}int p(int a[],int b[N][M],int m,int k){int j;for(j=0;j<m;j++)if(a[j]>b[k-1][j])return 0;return 1;}int q(int a[],int b[],int m){int j;for(j=0;j<m;j++)if(a[j]>b[j])return 0;return 1;}int safe(int Finish[N],int Work[M],int Need[N][M],int Allocation[N][M],int n,int m){ int i,j,k;int t[N];for(i=0;i<n;i++)t[i]=1;cout<<"安全性检查!"<<endl;for(i=0;i<n;)// 首先找到一个满足条件的进程 {if((Finish[i]==0)&&g(Need,Work,m,i)){k=i;t[i]=0;cout<<"p("<<k+1<<"):"<<endl;cout<<"Work["<<m<<"]:";for(j=0;j<m;j++){cout<<Work[j]<<" ";Work[j]=Work[j]+Allocation[i][j]; Finish[i]=1;}cout<<endl;cout<<"Need["<<m<<"]:";for(j=0;j<m;j++)cout<<Need[i][j]<<" ";cout<<endl;cout<<"Allocation["<<m<<"]:";for(j=0;j<m;j++)cout<<Allocation[i][j]<<" ";cout<<endl;cout<<"(Work+Allocation)["<<m<<"]:"; for(j=0;j<m;j++)cout<<Work[j]<<" ";cout<<endl;cout<<"Finish["<<k+1<<"]:";cout<<Finish[i]<<" ";cout<<endl;break;}else{i++;}}if(g(Need,Work,m,k))//依次找到满足条件的后面几个进程 {for(i=0;i<n;i++){if(t[i]){if(g(Need,Work,m,i)){cout<<"p("<<i+1<<"):"<<endl;cout<<"Work["<<m<<"]:";for(j=0;j<m;j++){cout<<Work[j]<<" ";Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;cout<<endl;cout<<"Need["<<m<<"]:";for(j=0;j<m;j++)cout<<Need[i][j]<<" ";cout<<endl;cout<<"Allocation["<<m<<"]:";for(j=0;j<m;j++)cout<<Allocation[i][j]<<" ";cout<<endl;cout<<"(Work+Allocation)["<<m<<"]:"; for(j=0;j<m;j++)cout<<Work[j]<<" ";cout<<endl;cout<<"Finish["<<i+1<<"]:";cout<<Finish[i]<<" ";cout<<endl;t[i]=0;}}}else {return 0;}if(h(Finish,n))return 1;//系统处于安全状态else return 0;//系统处于不安全状态}void r(int Finish[N],int Work[M],int Available[M],int Need[N][M],int Allocation[N][M],int Max[N][M],int n,int m) {int Request[M];char b;int i,j,k;cout<<"\n要申请资源,请按'y'或'Y',否则按'n'或'N'"<<endl;//是立即进行安全性检查,依旧进行资源申请cin>>b;if(b!='y'&&b!='Y')if(safe(Finish,Work,Need,Allocation,n,m)){cout<<"现在刻系统安全!\n";}else{cout<<"现在刻系统不安全!\n";}}else{{cout<<"\n请输入申请资源的进程编号(1,2,…,"<<n<<"):"<<endl;cin>>k;while(k>n){cout<<"您输入了错误的进程号,请核查后重新输入:"<<endl;cin>>k;}cout<<"\n请输入进程p("<<k<<")申请各类资源的数量:"<<endl;for (j=0; j<m; j++)cin>>Request[j];if(p(Request,Need,m,k)){if(q(Request,Available,m)){for(j=0;j<m;j++){Available[j]=Available[j]-Request[j];Allocation[k-1][j]=Allocation[k-1][j]+Request[j]; Need[k-1][j]=Need[k-1][j]-Request[j];Work[j]=Available[j];}cout<<"试分配!"<<endl;cout<<"各种资源可利用的数量Available["<<m<<"]: "<<endl;for (j=0; j<m; j++){cout<<Available[j]<<" ";}cout<<endl;cout<<"\n已分配资源Allocation["<<m<<"]: "<<endl;for (i=0; i<n; i++){for (j=0; j<m; j++){cout<<Allocation[i][j]<<" ";}cout<<endl;}cout<<"\n最大需求矩阵Max["<<n<<"]["<<m<<"]: "<<endl; for (i=0; i<n; i++){for (j=0; j<m; j++){cout<<Max[i][j]<<" ";}cout<<endl;}cout<<"\n需求矩阵Need["<<n<<"]["<<m<<"]: "<<endl; for (i=0; i<n; i++){for (j=0; j<m; j++){cout<<Need[i][j]<<" ";}cout<<endl;}if (safe(Finish,Work,Need,Allocation,n,m)){//推断当前状态的安全性cout<<"系统处于安全状态!";cout<<"\n申请资源成功!!!"<<endl;}else{cout<<"\n当前状态不安全!!!!!!";//恢复数据for (j=0; j<m; j++){Available[j]=Available[j]+Request[j];Allocation[k-1][j]=Allocation[k-1][j]-Request[j];Need[k-1][j]=Need[k-1][j]+Request[j];Work[j]=Available[j];}for(i=0; i<n; i++)Finish[i]=0;cout<<"\n恢复数据:"<<endl;//显示输入各数组的值cout<<"各种资源可利用的数量Available["<<m<<"]: "<<endl;for (j=0; j<m; j++){cout<<Available[j]<<" ";}cout<<endl;cout<<"\n已分配资源Allocation["<<m<<"]: "<<endl;for (i=0; i<n; i++){for (j=0; j<m; j++){cout<<Allocation[i][j]<<" ";}cout<<endl;}cout<<"\n最大需求矩阵Max["<<n<<"]["<<m<<"]: "<<endl; for (i=0; i<n; i++){for (j=0; j<m; j++){cout<<Max[i][j]<<" ";}cout<<endl;}cout<<"\n需求矩阵Need["<<n<<"]["<<m<<"]: "<<endl; for (i=0; i<n; i++){for (j=0; j<m; j++){cout<<Need[i][j]<<" ";}cout<<endl;}cout<<"系统中尚无足够的资源满足进程p["<<k<<"]的申请,p["<<k<<"]必须等待!"<<endl;}}else cout<<"系统中尚无足够的资源满足进程p["<<k<<"]的申请,p["<<k<<"]必须等待!"<<endl;}else cout<<"出错,进程所需要的资源数目已超过它所宣布的最大值!"<<endl;}}}void main(){cout<<"---------------------------------------------------------"<<endl;cout<<"------------------模拟银行家算法------------------"<<endl;cout<<"---------------------------------------------------------"<<endl;cout<<"--------------------江之风海之韵-------------------"<<endl;cout<<"------------------------QuQu-------------------------"<<endl;cout<<"---------------------------------------------------------"<<endl;int Available[M];int Max[N][M];int Allocation[N][M];int Need[N][M];int Work[M];int Finish[N];int i,j,n,m;//定义全局变量cout<<"输入进程的数量: ";//从此开始输入有关数据cin>>n;cout<<"输入资源种类数: ";cin>>m;cout<<"输入各种资源可利用的数量Available["<<m<<"]: "<<endl;for (j=0; j<m; j++){cin>>Available[j];Work[j]=Available[j];//初始化Work[j]}cout<<"\n输入各进程对各类资源的最大需求数Max["<<n<<"]["<<m<<"]: "<<endl;cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl;for (i=0; i<n; i++){for (j=0; j<m; j++)cin>>Max[i][j];}cout<<"\n请输入各进程当前已分配的资源数量Allocation["<<n<<"]["<<m<<"]: "<<endl;cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl; for (i=0; i<n; i++){for (j=0; j<m; j++){cin>>Allocation[i][j];Need[i][j] = Max[i][j]-Allocation[i][j];}}r(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;i<n;i++)Finish[i]=0;r(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;i<n;i++)Finish[i]=0;r(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;i<n;i++)Finish[i]=0;r(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;i<n;i++)}实验结果实验体会银行家算法在计算机操作系统中是一个特不重要的算法,这次我编制模拟银行家算法的程序,来验证了程序的正确性。

银行家算法习题1

银行家算法习题1

银行家算法流程安全性算法流程图银行家算法例题 1.假定系统中有4个进程1P ,2P ,3P ,4P , 3种类型的资源1R ,2R ,3R ,数量分别为9,3,6, 0T 时刻的资源分配情况如表2-1所示。

表2-1 T 0时刻的资源分配情况试问:(1) T 0时刻是否安全?(2) T 0时刻以后,若进程P 2发出资源请求Request 2(1,0,1), 系统能否将资源分配给它? (3) 在进程P 2申请资源后,若P1发出资源请求Request 1(1,0,1), 系统能否将资源分配给它?(4) 在进程P 1申请资源后,若P3发出资源请求Request 3(0,0,1), 系统能否将资源分配给它?2. 在银行家算法中,出现以下资源分配情况(见表2-2)系统剩余资源数量=(3,3,2)(1) 该状态是否安全(给出详细的检查过程) (2) 如果进程依次有如下资源请求:P1:资源请求request (1,0,2) P2:资源请求request (3,3,0) P3:资源请求request (0,1,0)则系统该如何进行资源分配才能避免死锁?3.设系统中有3种类型的资源(A、B、C)和5个进程P1、P2、P3、P4、P5,A资源的数量为17,B资源的数量为5,C资源的数量为20。

在T0时刻,系统状态见表2-3。

系统采用银行家算法实现死锁避免。

(1)T0时刻是否为安全状态?若是,请给出安全序列(2)在T0时刻,若进程P2请求资源(0,3,4),是否能实施资源分配?为什么?(3)在(2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?(4)在(3)的基础上,若进程P1请求资源(0,2,0),是否能实施资源分配?4.某系统有R1、R2、R3共三种资源,在T0时刻P1、P2、P3、P4这四个进程对资源的占用和需求情况见表2-24,此时系统的可用资源矢量为(2,1,2)。

试问:1)将系统中各种资源总数和此刻各进程对各资源的需求数目用矢量或矩阵表示出来。

银行家算法典型例题

银行家算法典型例题

银行家算法典型例题银行家算法是一种死锁避免策略,适用于系统中有多个进程和多种资源的情况。

在该算法中,每个进程需要预先声明其最大资源需求和当前已经分配的资源数量,同时系统也需要知道每种资源的总数量和已经分配的数量。

通过比较每个进程的资源需求和系统当前可用资源数量,可以判断系统是否处于安全状态,以及是否能够分配资源给某个进程。

在本例中,系统中有3种资源A、B、C,分别有10、5、7个。

同时有5个进程P0至P4,它们的最大资源需求和已分配资源情况如下表所示。

在T0时刻,系统状态如表所示。

根据银行家算法,我们可以回答以下问题:1) 在T0时刻,系统处于安全状态,安全序列为P1、P3、P4、P2、P0.2) 若进程P1在T0时刻发出资源请求Request(1,0,2),则可以实施资源分配。

因为该请求的资源需求小于进程P1的最大需求,且系统当前可用资源数量足够满足该请求。

3) 在P1请求资源之后,若进程P4发出资源请求Request(3,3,0),则无法实施资源分配。

因为该请求的资源需求大于进程P4的最大需求,且系统当前可用资源数量不足以满足该请求。

因此,P4需要等待其他进程释放资源后再尝试请求。

4) 在P1请求资源之后,若进程P0发出资源请求Request(0,2,0),则可以实施资源分配。

因为该请求的资源需求小于进程P0的最大需求,且系统当前可用资源数量足够满足该请求。

Process n Need AvailableP0 0 3 20 0 1 21 6 2 2P1 1 0 01 7 5 0P2 1 2 2 3 5 6P3 3 3 20 6 5 2P4 0 1 40 6 5 6n: (1) Is the system in a safe state。

(2) If process P2 requests (1,2,2,2)。

can the system allocate the resources to it?Answer: (1) Using the safety algorithm。

银行家算法例题详解

银行家算法例题详解

银行家算法例题详解银行家算法是一种资源分配算法,用于避免死锁并确保系统中的所有进程能够顺利完成任务。

它最初由银行家提出,并应用于操作系统中。

在银行家算法中,系统有一定数量的资源,包括进程所需的资源以及可供分配的资源。

每个进程都会向系统请求资源,系统会检查该请求是否能够满足,并采取相应的措施。

下面以一个例题来详细解释银行家算法的工作原理:假设有3个进程P1,P2和P3,以及4种资源A,B,C和D。

它们的资源需求和可用资源如下表所示:进程 Max需求已分配需求可用P1 7,5,3,2 0,1,0,0 7,4,3,1 3,3,2,2P2 3,2,2,1 2,0,0,0 1,2,2,1P3 9,0,2,2 3,0,2,2 6,0,0,0首先,我们需要计算每个进程的需求和已分配资源之间的差异。

这可以通过需求矩阵和分配矩阵的减法来实现。

例如,对于P1进程,需求矩阵减去分配矩阵得到需求矩阵:需求矩阵P1 = Max矩阵P1 - 分配矩阵P1 = 7,5,3,2 - 0,1,0,0 = 7,4,3,2接下来,我们需要检查是否存在一个安全序列,即一个进程执行顺序,使得每个进程能够顺利完成任务。

安全序列的判断基于两个条件:1. 对于每个进程i,需求矩阵的第i行的每个元素都小于等于可用资源的对应元素。

2. 如果进程i的需求矩阵的第i行的每个元素都小于等于可用资源的对应元素,那么将进程i的已分配资源加到可用资源中,再继续判断下一个进程。

根据上述条件,我们可以开始判断是否存在安全序列:1. 首先,我们看到P1的需求矩阵的第一行的每个元素都小于等于可用资源的对应元素。

因此,我们将P1的已分配资源加到可用资源中,可用资源现在变为6,5,3,2。

2. 接下来,我们看到P2的需求矩阵的第二行的每个元素都小于等于可用资源的对应元素。

因此,我们将P2的已分配资源加到可用资源中,可用资源现在变为7,5,3,2。

3. 最后,我们看到P3的需求矩阵的第三行的每个元素都小于等于可用资源的对应元素。

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

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

操作系统之调度算法和死锁中的银行家算法习题参考答案集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-1.有三个批处理作业,第一个作业10:00到达,需要执行2小时;第二个作业在10:10到达,需要执行1小时;第三个作业在10:25到达,需要执行25分钟。

分别采用先来先服务,短作业优先和最高响应比优先三种调度算法,各自的平均周转时间是多少?解:先来先服务:(结束时间=上一个作业的结束时间+执行时间周转时间=结束时间-到达时间=等待时间+执行时间)按到达先后,执行顺序:1->2->3短作业优先:1)初始只有作业1,所以先执行作业1,结束时间是12:00,此时有作业2和3;2)作业3需要时间短,所以先执行;3)最后执行作业2最高响应比优先:高响应比优先调度算法既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务和最短作业优先两种算法的特点。

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;所以先执行作业33)执行作业22.在一单道批处理系统中,一组作业的提交时刻和运行时间如下表所示。

试计算一下三种作业调度算法的平均周转时间T和平均带权周转时间W。

(1)先来先服务;(2)短作业优先(3)高响应比优先解:先来先服务:作业顺序:1,2,3,4短作业优先:作业顺序:1)8:00只有作业1,所以执行作业1;2)9:00有作业2和3,作业3短,所以先执行3;3)9:12有作业2和4,作业4短,所以先执行4;4)执行作业2高响应比优先:作业顺序: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;所以执行作业44)执行作业33.设系统中有3种类型的资源(A,B,C)和5个进程(P1,P2,P3,P4,P5),A资源的数量为17,B资源的数量为5,C资源的数量为20。

银行家算法例子+答案

银行家算法例子+答案

1、设系统中有3种类型的资源(A ,B ,C )和5个进程P1、P2、P3、P4、P5,A 资源的数量为17,B 资源的数量为5,C 资源的数量为20。

在T 0时刻系统状态见下表(T 0时刻系统状态表)所示。

系统采用银行家算法实施死锁避免策略。

(12分)T 0时刻系统状态表(1)T 0时刻是否为安全状态?若是,请给出安全序列。

(2)在T 0时刻若进程P2请求资源(0,3,4),是否能实施资源分配?为什么?(3)在(2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?为什么?(4)在(3)的基础上,若进程P1请求资源(0,2,0),是否能实施资源分配?为什么?答:当前的系统状态描述为:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=4245241104635955C ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=413402504204212A ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-011122600431743A C ()20517=R()332=V(1)在T0时刻,由于V (2,3,3)大于等于(C-A )中P5所在行的向量(1,1,0),因此V 能满足P5的运行,在P5运行后,系统的状态为:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=000402504204212A ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-000122600431743A C ()745'=V 同样的,在P5运行后,V ’(5,4,7)也大于等于C-A 中P4所在的行(2,2,1),则能满足P4的运行。

P4运行后,系统的状态为:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=000000504204212A ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-000000600431743A C ()1147'=V 按照上述同样的方法,P4运行后,P3,P2,P1也能按顺序运行。

(备注:考试时需要都写出来)。

因此,在T0时刻,存在安全序列:P5、P4、P3、P2、P1。

银行家算法解决死锁

银行家算法解决死锁

银行家算法解决死锁问题1、设系统中有3种类型的资源(A,B,C)和5个进程P1、P2、P3、P4、P5,A资源的数量为17,B资源的数量为5,C资源的数量为20。

在T0时刻系统状态见下表(T0时刻系统状态表)所示。

系统采用银行家算法实施死锁避免策略。

(12分)T0时刻系统状态表T0时刻系统状态表P2请求资源(0,3,4)(0,1,1)(1)T0时刻是否为安全状态?若是,请给出安全序列。

(2)在T0时刻若进程P2请求资源(0,3,4),是否能实施资源分配?为什么?(3)在(2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?为什么?(4)在(3)的基础上,若进程P1请求资源(0,2,0),是否能实施资源分配?为什么?答:当前的系统状态描述为:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=4245241104635955C //资源最大需求数量 max ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=413402504204212A //已分配资源数量 alloc⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-011122600431743A C //还需资源数量 Need()20517=R //资源总量 ()332=V //系统可用资源向量(1)T 0时刻是否为安全状态?若是,请给出安全序列。

在T0时刻,由于V (2,3,3)大于等于(C-A )中P5所在行的向量(1,1,0),因此V 能满足P5的运行,在P5运行后,系统的状态为:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=000402504204212A ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-000122600431743A C ()745'=V同样的,在P5运行后,V’(5,4,7)也大于等于C-A 中P4所在的行(2,2,1),则能满足P4的运行。

P4运行后,系统的状态为:⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=000000504204212A ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=-000000600431743A C ()1147'=V按照上述同样的方法,P4运行后,P3,P2,P1也能按顺序运行。

银行家算法

银行家算法

银行家算法(进程需求的资源数≤剩余的资源数才是安全序列)例题:系统中有4种类型的资源(A、B、C、D)和5个进程P1、P2、P3、P4和P5, A资源的数量为3, B资源的数量为12, C资源的数量为14, D资源的数量为14,在某时刻系统状态如下表所示,系统采用银行家算法实施死锁避免策略.资源分配表下列进程执行序列中,哪些不是安全序列( )A:P1 P4 P5 P2 P3 B:P1 P4 P2 P5 P3 C:P1 P4 P3 P2 P5 D:P1 P3 P4 P5 P2E:P1 P5 P4 P3 P2 解题步骤:①,我们要根据题干计算出剩余资源数量,(有的题目直接给出了剩余资源数量,我们就不需要计算了.), 剩余资源数量=资源的数量-已分配资源数量,根据题目计算得出, A资源的数量为3减去A已分配资源数量2等于1,B资源的数量为12减去B已分配资源数量6等于6C资源的数量为14减去C已分配资源数量12等于2D资源的数量为14减去D已分配资源数量12等于2求出剩余资源数量( A 1 B 6 C 2 D 2 )②,我们要计算出需求资源数量,(相应进程的ABCD互减, A减A ,B减B, C减C, D减D )③根据剩余资源数量来判断执行序列的安全,进程需求的资源数≤剩余的资源数才是安全序列(也就是说,剩余资源数量≥需求资源数量,才安全)采用银行家算法,每次执行完一个进程需要加上此进程的已分配资源数量,再执行下一个进程,以此类推.④我们来看选项A:P1 P4 P5 P2 P3, 我们之前求出剩余资源数量( A 1 B 6 C 2 D 2 )此刻, 剩余资源数量( A 1 B 6 C 2 D 2 )各个资源都大于,P1进程需求资源数量为(A 0、 B 0、 C 1、 D 2 )(1、6、2、2)>(0、0、1、2),安全,运行完P1进程后,剩余资源数量需要加上P1进程已分配资源数量,即: (1、6、2、2)+(0、0、3、2)=(1、6、5、4),接下来执行P4进程,此时已经运行完P1进程,所以此刻剩余资源数量为(1、6、5、4),(1、6、5、4)各项资源数量≥P4进程需求的资源数量(0、6、5、2),安全运行完P4进程后,剩余资源数量需要加上P4进程已分配资源数量,即:(1、6、5、4) +(0、3、3、2) =(1、9、8、6), 接下来执行P5进程,P5进程需求的资源数量为(0、6、5、6)此时已经运行完P4进程,所以此刻剩余资源数量为(1、9、8、6)(1、9、8、6) 各项资源数量≥P5进程需求的资源数量(0、6、5、6),安全运行完P5进程后,剩余资源数量需要加上P5进程已分配资源数量,即:(1、9、8、6) +(0、0、1、4)=(1、9、9、10), 接下来执行P2进程,P2进程需求的资源数量为(1、7、5、0)此时已经运行完P5进程,所以此刻剩余资源数量为(1、9、9、10),(1、9、9、10), 各项资源数量≥P2进程需求的资源数量(1、7、5、0),安全运行完P2进程后,剩余资源数量需要加上P2进程已分配资源数量,即:(1、9、9、10) +(1、0、0、0) =(2、9、9、10),接下来执行P3进程此时已经运行完P2进程,所以此刻剩余资源数量为(2、9、9、10)(2、9、9、10) 各项资源数量≥P3进程需求的资源数量(2、3、5、6),安全此时5个进程运行完毕所以选项A:P1 P4 P5 P2 P3,执行序列正确.,同理选项B:P1 P4 P2 P5 P3执行序列正确⑤们分析一下选项C为啥不正确,我们来看选项, C:P1 P4 P3 P2 P5 我们之前求出剩余资源数量( A 1 B 6 C 2 D 2 )此刻, 剩余资源数量( A 1 B 6 C 2 D 2 )各个资源都大于,P1进程需求资源数量为(A 0、 B 0、 C 1、 D 2 )(1、6、2、2)>(0、0、1、2),安全,运行完P1进程后,剩余资源数量需要加上P1进程已分配资源数量,即: (1、6、2、2)+(0、0、3、2)=(1、6、5、4),接下来执行P4进程,此时已经运行完P1进程,所以此刻剩余资源数量为(1、6、5、4),(1、6、5、4)各项资源数量≥P4进程需求的资源数量(0、6、5、2),安全运行完P4进程后,剩余资源数量需要加上P4进程已分配资源数量,即:(1、6、5、4) +(0、3、3、2) =(1、9、8、6), 接下来执行P3进程,此时已经运行完P4进程,所以此刻剩余资源数量为(1、9、8、6)(1、9、8、6) )各项资源数量不能≥P3进程需求的资源数量(2、3、5、6),不安全因为,资源A此刻只有1个可用,而进程P3需要2个A资源.运行会发生死锁,然后就不需要运行其它进程了所以选项C:P1 P4 P3 P2 P5错误.同理选项D:P1 P3 P4 P5 P2和E:P1 P5 P4 P3 P2错误.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

银行家算法例题
假定系统中有五个进程{P0,P1,P2,P3,P4} 和三类资源{A ,B,C},各种资源的数量分别为10、5、7,在T0 时刻的资源分配情况
(1)T0时刻的安全性
利用安全性算法对T0时刻的资源分配情况进行分析
(2)P1请求资源:P1发出请求向量Request1(1,0,2),系统按银行家算法进行检查 ①Request1(1,0,2)≤Need1(1,2,2) ②Request1(1,0,2)≤Available1(3,3,2)
③系统先假定可为P1分配资源,并修改Available ,Allocation1和Need1向量,由此形成
资源情况
进程
Max Allocation Need Available A B C A B C A B C A B C P0 7 5 3 0 1 0 7 4 3 3 3 2 P1 3 2 2 2 0 0 1 2 2 P2 9 0 2 3 0 2 6 0 0 P3 2 2 2 2 1 1 0 1 1 P4
4 3 3
0 0 2
4 3 1
资源情况 进程
Work A B C Need A B C Allocation A B C
Work+Allocatio n A B C Finish
P1 3 3 2 1 2 2 2 0 0 5 3 2 TRUE P3 5 3 2 0 1 1 2 1 1 7 4 3 TRUE P4 7 4 3 4 3 1 0 0 2 7 4 5
TRUE P2 7 4 5 6 0 0 3 0 2 10 4 7 TRUE P0
10 4 7
7 4 3
0 1 0
10 5 7
TRUE
的资源变化情况如下图所示。

④再利用安全性算法检查此时系统是否安全。

P1 申请资源时的安全性检查
(3)P4请求资源:P4发出请求向量Request4(3,3,0),系统按银行家算法进行检查: ①Request4(3,3,0)≤Need4(4,3,1); ②Request4(3,3, 0)≮Available (2,3,0),让P4等待。

资源情况
Max Allocation Need Available A B C A B C A B C A B C P0 7 5 3 0 1 0 7 4 3 2 3 0 P1 3 2 2 3 0 2 0 2 0 P2 9 0 2 3 0 2 1 2 2 P3 2 2 2 2 1 1 0 1 1 P4
4 3 3
0 0 2
4 3 1
资源情况 进程 Work A B C Need A B C Allocation A B C Work+ Allocation A B C Finish P1 2 3 0 0 2 0 3 0 2 5 3 2 TRUE P3 5 3 2 0 1 1 2 1 1 7 4 3 TRUE P4 7 4 3 4 3 1 0 0 2 7 4 5 TRUE P0 7 4 5 7 4 3 0 1 0 7 5 5 TRUE P2
10 5 5
6 0 0
3 0 2
10 5 7
TRUE
(4)P0请求资源:P0发出请求向量Requst0(0,2,0),系统按银行家算法进行检查: ①Request0(0, 2,0)≤Need0(7,4,3); ②Request0(0,2,0)≤Available (2,3,0);
③系统暂时先假定可为P0分配资源,并修改有关数据。

为P0分配资源后的有关资源数据
④进行安全性检查:可用资源Available (2,1,0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。

资源情况 进程
Allocation Need Available A B C A B C A B C P0 0 1 0 7 2 3 2 1 0 P1 3 0 2 0 2 0 P2 3 0 2 6 0 0 P3 2 1 1 0 1 1 P4
0 0 2
4 3 1。

相关文档
最新文档