作业答案Word文档格式.docx
《作业答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《作业答案Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![作业答案Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/2/507303ae-cec6-418a-965c-7b9bb171387a/507303ae-cec6-418a-965c-7b9bb171387a1.gif)
P(frame);
V(empty);
P(wheel);
分析上述解法易见,当工人1推进速度较快时,箱中空位置可能完全被车架占满或只留有一个存放车轮的位置,而当此时工人3同时取2个车轮时将无法得到,而工人2又无法将新加工的车轮放入箱中;
当工人2推进速度较快时,箱中空位置可能完全被车轮占满,而当此时工人3取车架时将无法得到,而工人1又无法将新加工的车架放入箱中。
上述两种情况都意味着死锁。
为防止死锁的发生,箱中车架的数量不可超过N-2,车轮的数量不可超过N-1,这些限制可以用两个信号灯来表达。
semaphores1=N-2;
semaphores2=N-1;
如此,可以给出不含死锁的完整解法如下:
P(s1);
P(s2);
V(s1);
V(s2);
详细描述还应考虑对箱子单元的描述以及访问互斥问题。
建议车架放在箱子的一端,车轮放在箱子的另一端,车架与车轮都采用后进先出的管理方式。
●用管程实现三个工人的合作
TypeBox=monitor;
enumitem={frame,wheel,null}
Varbox:
array[0….N]ofitem;
count1,count2:
integer;
full,frameempty,wheelempty:
condition;
in,out:
Defineputin-frame,putin-wheel,
takeout-frame,takeout-wheel
Produceputin-frame(x:
frame)
begin
if(count1+count2)≥Nthenwait(full);
ifcount1>
N-2thenwait(full);
count1:
=count1+1;
fori=1toN
ifbox[i]=nullthenbreak;
in:
=i;
box[in]:
=x;
signal(frameempty);
end
Produceputin-wheel(y:
wheel)
ifcount2>
N-1thenwait(full);
count2:
=count2+1;
=y;
signal(wheelempty);
Producetakeout-frame(x:
frame)
begin
ifcount1<
1thenwait(bodyempty);
=count1-1;
fori=1toN
ifbox[i]=framethenbreak
out:
=i;
x:
=box[out];
signal(full);
Producetakeout-wheel(y:
wheel)
ifcount2<
1thenwait(wheelempty);
=count2-1;
ifbox[i]=wheelthenbreak
y:
Produceworkerone
varx:
frame;
repeat
produce(x);
Box.putin-frame(x);
untilfalse;
end
Produceworkertwo
vary:
wheel;
produce(y);
Box.putin-wheel(y);
end
Produceworkerthree
varx:
y:
begin
repeat
Box.takeout-frame(x);
Box.takeout-wheel(y);
Box.takeout-wheel(y);
makebike;
untilfalse;
end
Cobegin
workerone;
workertwo;
workerthree;
Coend
26.用P、v操作解决读者和写者之间的同步问题,且写者优先。
这里仍需设置readcount记录读者数,rmutex是读者互斥访问readcount的信号量,rwmutex是读者与写者互斥访问文件的信号量。
另外再设writecount记录写者数,wmutex是写者互斥访问writecount的信号量。
为了使写者优先,需要再设置两个信号量z和r,z控制所有读者按照FCFS策略排队。
x使一个读者和一个写者竞争访问文件。
只要在x上等待的写者能继续执行,其他写者便可以直接竞争写者之间文件的互斥访问权,从而实现写者优先。
35.桌上有一个盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放橘子,儿子专等吃盘里的苹果,女儿专等吃盘里的橘子苹果。
只要盘子空,爸爸妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出他们四人之间的同步关系,并用PV操作实现四人正确活动的程序。
Structsemaphores=1,so=0,sa=0;
//s表示盘空,so表示橘子,sa表示苹果。
父亲的活动:
Do{
摘一个苹果;
p(s);
放入盘子中;
v(sa);
}while
(1)
母亲的活动:
摘一个橘子;
v(so);
儿子的活动:
Do{
p(sa);
儿子取出苹果;
v(s);
吃掉;
}while
(1)
p(so);
女儿取出橘子;
第五章
9.在银行家算法中,若出现如下资源分配情况:
AllocationNeedAvailable
ABCDABCDABCD
P0:
003200121623
P1:
10001750
P2:
13542356
P3:
03320652
P4:
00140656
试问:
(1)当前状态是否安全?
(2)如果进程P2提出安全请求Request[2]=(1,2,2,2),系统能否将资源分配给它?
说明原因.
(1)当前状态是安全状态。
运行安全性检查算法如下:
1)Work=Available;
Finish=false;
2)寻找满足如下条件的i:
Finish[i]==false并且Need[i]≤Work[i];
如果不存在,则转步骤4);
3)Work=Work+Allocation[i];
Finish[i]=true;
转步骤2)
4)如果对于所有i,Finish[i]=true,则系统处于安全状态,否则处于不安全状态。
令Work=Available=(1,6,2,3)
运行安全性检测算法,Finish[0]=false并且Need[0]=(0012)<
Work,则Work=Work+Allocation[0]=(1,6,2,3)+(0,0,3,2)=(1,6,5,5);
Finish[0]=true;
Finish[3]=false并且Need[3]=(0,6,5,2)<
Work,则Work=Work+Allocation[3]=(1,6,5,5)+(0,3,3,2)=(1,9,8,7);
Finish[3]=true;
Finish[4]=false并且Need[4=(0,6,5,6)<
Work,则Work=Work+Allocation[4]=(1,9,8,7)+(0,0,1,4)=(1,9,9,11);
Finish[4]=true;
Finish[1]=false并且Need[1]=(1,7,5,0)<
Work,则Work=Work+Allocation[4]=(1,9,9,1)+(1,0,0,0)=(2,9,9,11);
Finish[1]=true;
Finish[2]=false并且Need[2]=(2,3,5,6)<
Work,则Work=Work+Allocation[4]=(2,9,9,11)+(1,3,5,4)=(3,12,14,15);
Finish[2]=true;
可以找到一个安全进程序列<
p0,p3,p4,p1,p2>
,它使Finish[i]=true,对于所有0≤i≤4,因而可以断言系统当前处于安全状态.
(2)运行银行家算法,由于Request[2]=(1,2,2,2)£Need[2]=(2,3,5,6),因而请求合法。
进一步,Request[2]=(1,2,2,2)£Available=(1,6,2,3),故该请求是可以满足的。
假设将资源分配给p2,则系统状态变为:
003200120401
25761134
运行安全性检测算法,Work=Available=(0,4,0,1),Finish[i]=false,此时所有Need[i]£Work[i]均不成立,结果Finish[i]均为false,不存在安全进程序列,系统处于不安全状态。
系统将取消资源分配并恢复原来状态,进程p2等待。
1.某系统采用死锁检测手段发现死锁,设系统中资源类集合为{A,B,C},资源类A中共有8个实例,资源类B中共有6个实例,资源类C中共有5个实例.又设系统中进程集合为{p1,p2,p3,p4,p5,p6},某时刻系统状态如下:
AllocationRequestAvailable
ABCABCABC
p1:
100000221
p2:
321000
p3:
012202
p4:
000000
p5:
210031
p6:
001000
2.在上述状态下系统依次接受如下请求:
Request[1]=(1,0,0);
Request[2]=(2,1,0);
Request[4]=(0,0,2)。
给出系统状态变化情况,并说明没有死锁。
在由
(1)所确定的状态下系统接收如下请求:
Request[1]=(0,3,1),说明此时已发生死锁,并找出参与死锁的进程。
(1)①如果系统只是接受请求,但是没有分配资源给进程,那么系统状态变为:
100100221
321210
000002
在该状态下运行死锁检测算法,可以找到一个进程序列<
p4,p1,p2,p3,p5,p6>
,它使Finish[i]=true,对于所有1≤i≤6,因而可以断言系统当前没有进入死锁状态。
②如果系统接受请求后,将一个A分配给进程p1,则系统状态变为:
200000121
(2)设在
(1)的①状态下系统接收如下请求:
Request[1]=(0,3,1),则系统状态变为:
100131221
p4,p2,p3,p5,p6,p1>
,它使Finish[i]=true,对于所有1≤i≤6,因而可以断言系统当前没有进入死锁状态.
设在
(1)的②状态下系统接收如下请求:
AllocationRequestAvailable
200031121
在该状态下运行死锁检测算法,找不到一个进程序列使Finish[i]=true,对于所有1≤i≤6,因为存在i∈{1,2,3,5},使Finish[i]=false,因而可以断言系统已经进入死锁状态,进程p1,p2,p3,p5卷入死锁.
第六章
17,分配的页框数为3时:
FIFO:
4
3
2
1
5
√
共缺页9次
LRU:
共缺页10次
OPT:
共缺页7次
分配的页框数为4时:
共缺页8次
OPT:
共缺页6次
18.
(1)根据页式管理的工作原理,应先考虑页面大小,以便将页号和页内位移分解出来。
页面大小为4KB,即212,则得到页内位移占虚地址的低12位,页号占剩余高位。
可得三个虚地址的页号P如下(十六进制的一位数字转换成4位二进制,因此,十六进制的低三位正好为页内位移,最高位为页号):
137H:
P=0,访问快表10ns,因初始为空,访问页表100ns得到页框号,合成物理地址后访问主存100ns,共计10ns+100ns+100ns=210ns。
565H:
P=0,访问快表,因第一次访问已将该页号放入快表,因此花费10ns便可合成物理地址,访问主存100ns,共计10ns+100ns=110ns。
10ns,落空,访问页表100ns落空,进行缺页中断处理108ns,合成物理地址后访问主存100ns,共计10ns+100ns+108ns+100ns≈108ns。
15A5H:
P=1,访问快表10ns,落空,访问页表100ns落空,进行缺页中断处理108ns,合成物理地址后访问主存100ns,共计10ns+100ns+108ns+100ns≈108ns。
(2)当访问虚地址1565H时,产生缺页中断,合法驻留集为2,必须从页表中淘汰一个页面,根据题目的置换算法,应淘汰0号页面,因此1565H的对应页框号为101H。
由此可得1565H的物理地址为101565H。
25
段号
段内位移
物理地址
430
680
15
2365
500
越界
400
1750
112
26.
逻辑地址
页号
页内地址
页框号
1012
5*1024+1012=6132
2248
200
8
8*1024+200=8392
3010
962
8*1024+962=9154
4020
948
1*1024+948=4020
5018
922
6
6*1024+922=7066