问一个关于操作系统的问题?

sole_eagle 2003-09-14 02:03:23
设系统中A类资源有10个实例,B类资源有5个实例,又设系统中有5个进程P1,P2,P3,P4,P5。在某一时刻状态如下:
最大资源需求量 已分配资源数量
-------------------------------------------------------------------------
A B A B
P1 7 5 0 1
P2 3 2 2 0
P3 9 0 3 0
P4 2 2 2 1
P5 4 3 0 0
现在系统资源为:A:3个,B:3个。
该状态是安全状态,现在进程P2发出新的资源申请A:1个,B:0个。分配后系统仍处于安全状态,其某一安全序列是( )。
A)P2P3P5P4P1 B)P2P4P5P1P3 C)P4P3P1P5P2 D)P5P1P3P4P2
我现在无法看懂这个题目的意思,确切地说是这个表的含义,有哪位高手能给我解释一下吗?另外告诉我答案是什么?
...全文
56 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
iampawpawcsdn 2003-09-16
  • 打赏
  • 举报
回复
多谢!看懂了。
x014 2003-09-15
  • 打赏
  • 举报
回复
//以下是我以前编的银行家算法的C程序,代码很烂。可随便看看。


#define M 3
#define N 5
#define True 1
#define False 0
#include<stdio.h>
int Available[M]={10,5,7},
Max[N][M]={7,5,3,3,2,2,9,0,2,2,2,2,4,3,3},
Allocation[N][M]={0,1,0,2,0,0,3,0,2,2,1,1,0,0,2},
Need[N][M]={7,4,3,1,2,2,6,0,0,0,1,1,4,3,1},
Work[M]={10,5,7};
int temp;
bool Finish[N],FininshAll;
int i,j;
bool needwork(int temp) //判断需求是否能得到满足
{
bool ne=True;int j;
for(j=0;j<M;j++)
if(Need[temp][j]>Work[j]+Allocation[temp][j])
ne=False;
return ne;
}
bool FinishAll()//判断所有进程是否都已执行结束
{
int i;
bool Fi=True;
for(i=0;i<N;i++)if(Finish[i]==False)Fi=False;
return Fi;
}
main()
{
//打印各默认值
printf("default available:");
for(i=0;i<M;i++)printf("%d ",Available[i]);
printf("\n");
printf("default max:\n");
for(j=0;j<N;j++)
for(i=0;i<M;i++)
printf("%d ",Max[j][i]);
printf("\n");
printf("default Allocation:\n");
for(j=0;j<N;j++)
for(i=0;i<M;i++)
printf("%d ",Allocation[j][i]);
printf("\n");
printf("default Need:\n");
for(j=0;j<N;j++)
for(i=0;i<M;i++)
printf("%d ",Need[j][i]);
printf("\n");
for(j=0;j<N;j++)
for(i=0;i<M;i++)
Work[i]=Work[i]-Allocation[j][i];
printf("default work:");
for(i=0;i<M;i++)printf("%d ",Work[i]);
printf("\n");
printf("Do you want to change it? input 'Y' to change it,and input other char to continue.\n");
char temp=getchar();//回收回车
if(temp=='Y')//如果输入'Y'则重输各值
{
printf("please input the available number:\n");
for(i=0;i<M;i++)
{
printf("input Available(%d):",i);
scanf("%d",&Available[i]);
Work[i]=Available[i];
}
printf("please input the Max number:\n");
for(j=0;j<N;j++)
for(i=0;i<M;i++)
{
printf("input P(%d,%d):",j,i);
scanf("%d",&Max[j][i]);
}
printf("please input the allocation number:\n");
for(j=0;j<N;j++)
for(i=0;i<M;i++)
{
printf("input allocation P(%d,%d):",j,i);
scanf("%d",&Allocation[j][i]);
}
for(j=0;j<N;j++)
for(i=0;i<M;i++)
Work[i]=Work[i]-Allocation[j][i];//置可用各资源
for(i=0;i<M;i++)printf("%d ",Work[i]);
}

for(i=0;i<N;i++)Finish[i]=False;//预置进程都没完成
i=0;int z=0;
//当进程没有全部完成,执行
while(FinishAll()==False && z<N*N)//'z'用来防止死循环
{
if(needwork(i)==True && Finish[i]==False)//此进程没有完成并且资源满足,执行进程并回收资源.
{
for(j=0;j<M;j++)
{
Work[j]=Work[j]+Allocation[i][j];
Finish[i]=True;
}

printf("P%d are finished!\n",i);
printf("now work:");
}
if(i>=N-1)i=-1;
i++;
z++;
printf("z=%d\n",z);
for(i=0;i<M;i++)printf("%d ",Work[i]);
printf("\n");
if(FinishAll()==False)printf("FinishAll()==False\n");
if(Finish[i]==False)printf("Finish[i]==False\n");
for(i=0;i<M;i++)printf("%d ",Work[i]);
}
}
x014 2003-09-15
  • 打赏
  • 举报
回复
如果还是不懂的话,可以去看看银行家算法。
yanyouwei 2003-09-15
  • 打赏
  • 举报
回复
不懂
sole_eagle 2003-09-15
  • 打赏
  • 举报
回复
小弟在此多谢大家了。
x014 2003-09-15
  • 打赏
  • 举报
回复
如有一进程,可用资源小于所需资源,就不安全了。
x014 2003-09-15
  • 打赏
  • 举报
回复
我选B。

进程 需A 需B 可用A 可用B 安全
P2 1 2 3 3 T 进程结束释放资源
P4 0 1 5 3 T 进程结束释放资源
P5 4 3 7 4 T 进程结束释放资源
P1 7 4 7 4 T 进程结束释放资源
P3 6 0 7 5 T 进程结束释放资源
10 5 T

同理可求其它。
chenanqiong 2003-09-15
  • 打赏
  • 举报
回复
B
因为P3需要A资源6个,只有P2和P4的A资源都释放后才能满足P3的需求,所以P3应该排在P2P4后
wangmin_yjitx 2003-09-15
  • 打赏
  • 举报
回复
银行家算法。
zbstone 2003-09-15
  • 打赏
  • 举报
回复
学过操作系统吗?
没有的话找一本操作系统的书快看吧
操作系统的知识还是比较重要的
yayo 2003-09-14
  • 打赏
  • 举报
回复
安全序列(P1,P2,……,Pn)是这样组成的:

若对于每一个进程P(1≦i≦n),它需要的附加资源可以被系统中当前可用资源加上所有进程Pi(j<i)当前占有资源之和所满足,则为一个安全序列(P1,P2,……,Pn),这时系统处于安全状态。
文飞扬 2003-09-14
  • 打赏
  • 举报
回复

A B A B
P1 7 5 0 1
P2 3 2 2 0
P3 9 0 3 0
P4 2 2 2 1
P5 4 3 0 0
P1一行表示P1进程需要A和B资源分别为7,5个,但仅仅已分配B资源一个
其他的行也一样的意思
安全状态是在资源分配完后,至少有一个进程可以得到全部所需资源,因而可以顺利完成
相反就是有可能每个进程都有点资源但都没有足够资源
形成环路等待而死锁
98440622 2003-09-14
  • 打赏
  • 举报
回复
看你打了这么多字,帮你up吧

2,948

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧