操作系统 作业五

在这里插入图片描述
在这里插入图片描述
算法分析:
算法过程:
Available[ ]矩阵数组表示某类资源的可用量
Claim[ i ][ j ]表示进程Pi最大需要Rj类资源的数量
Allocation[ i ][ j ]表示Pi已占有的Rj类资源数量Need[ i ][ j ]表示Pi尚需Rj类资源的数量
-------------------------------------------------------------------Need[ i ][ j ]=Claim[ i ][ j ]—Allocation[ i ][ j ]
-------------------------------------------------------------------Request[ i ]表示进程Pi进程的申请向量,如 Request[ i ][ j ]=m 表示Pi申请m个Rj类资源对于当前进程Pi X
(1) 检查if( Request[ i ][ j ]<=Need[ i ][ j ] ) goto (2)else error(“进程 i 对资源的申请量大于其说明的最大值 ”);
(2) 检查 if ( Request[ i ][ j ]<=Available[ j ] ) goto (3)else wait() ; /注意是等待!即在对后续进程的需求资源判断中,若出现不符合的则安全检查结束,当前进程进入等待/
(3) 系统试探地把资源分给Pi 并修改各项属性值 (具体是否成立,则根据安全检查的结果)
Available[ j ] =Available[ j ] — Request[ i ][ j ]
Allocation[ i ][ j ]=Allocation[ i ][ j ] +Request[ i ][ j ]
Need[ i ][ j ]=Need[ i ][ j ]— Request[ i ][ j ]
(4) 安全检查,若检查结果为安全,则(3)中执行有效,否则分配作废,使该Pi进程进入等待检查算法描述:
向量Free[ j ]表示系统可分配给各进程的Rj类资源数目,初始与当前Available等值向量Finish[ i ]表示进程Pi在此次检查中是否被满足,初始均为false 当有足有资源可分配给进程时,Finish[ i ]=true, Pi完成并释放资源(Free[ j ]+=Allocation[ i ][ j ])

从进程队列中找一个能满足下述条件的进程Pi
①、Finish[ i ]false,表示资源未分配给Pi进程
②、Need[ i ][ j ]<Free[ j ],表示资源足够分配给Pi进程2) 当Pi获得资源后,认为Pi完成,释放资源
Free[ j ]+=Allocation[ i ][ j ];
Finish[ i ]=true;goto Step 1;
例:int trueSum=0, i=0 ;
boolean Flag=true;
while( trueSum<P.length-1 && Flagtrue ){i=i%P.length;if( Finish[ i ]false )
{if(Need[ i ][ j ]<Free[ j ])
{Free[ j ]+=Allocation[ i ][ j ];
Finish[i]=true;trueSum++;i++;}
else{Flag=false;}} }
if( Flagfalse)
检查不通过,拒绝当前进程X的资源申请
else
检查通过,允许为当前进程X分配资源即若可达到Finish[ 0,1,2,…n ] ==true 成立则表示系统处于安全状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值