华东交通大学操作系统.docx
《华东交通大学操作系统.docx》由会员分享,可在线阅读,更多相关《华东交通大学操作系统.docx(25页珍藏版)》请在冰豆网上搜索。
华东交通大学操作系统
1.这是一个从键盘输入到打印机输出的数据处理流图,其中键盘输入进程通过缓冲区buf1把输入数据传送给计算进程,计算进程把处理结果通过缓冲buf2传送给打印进程。
buf1和buf2为临界资源,试写出键盘输入进程,计算进程及打印进程间的同步算法。
(10分)
输入进程→buf1→计算进程→buf2→打印进程
解答:
从键盘输入到打印机输出的数据传送过程,可以看作是由键盘输入进程到计算进程,以及由计算进程到打印输出进程这两个数据传送进程所组成。
其中,对键盘输入进程而言,计算进程是消费者进程;而对打印输出进程而言,计算进程又是生产者进程。
据此可将它们之间的同步问题描述如下:
var:
mutex1,mutex2,empty1,empty2,full1,full2:
=1,1,1,1,0,0;
IP:
begin
repeat
P(empty);
P(mutex1);
inputacharcterfromkeyboard;
Addtobuffer;
V(mutex1);
V(full);
untilfalse
end
CP:
begin
repeat
P(full);
P(mutex1);
Takeacharactorformbuffer1;
Addtoch1;
V(mutex1);
V(empty1);
P(empty2);
P(mutex2);
Takeacharactorformch1;
Addtobuffer2;
V(mutex2);
V(full2);
untilfalse
end
OP:
begin
repeat
p(full2);
P(mutex2);
Takeacharactorfrombuffer2;
Addtoprintercontroler;
startprinter;
V(mutex2);
V(empty2);
untilfalse
end
2.设在一个页面大小为1K的系统中,正在处理器上执行的一个进程的页表如图所示:
页号状态位访问位修改位物理块号
01104
11117
2000-
31002
4000-
51010
起始页号和块号均为0。
1.详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。
2.下列虚地址(十进制)对应与什么物理地址:
5449,2221。
解:
(10分)
5449的物理地址为:
329
2221的物理地址为:
2221
3.设系统有三种类型的资源,数量为(4,2,2),系统中有进程A,B,C按如下顺序请求资源:
进程A申请(3,2,1)
进程B申请(1,0,1)
进程A申请(0,1,0)
进程C申请(2,0,0)
请你给出一和防止死锁的资源剥夺分配策略,完成上述请求序列,并列出资源分配过程,指明哪些进程需要等待,哪些资源被剥夺。
(10分)
解:
(10分)
①分配策略为:
当进程Pi申请ri类资源时,检查ri中有无可分配的资源:
有则分配给Pi;否则将Pi占有的资源全部释放而进入等待状态。
(Pi等待原占有的所有资源和新申请的资源)
②资源分配过程:
剩余资源
进程A:
(3,2,1) (1,0,1)
进程B:
(1,0,1) (0,0,0)
进程A:
(0,1,0)(不满足) (3,2,1)
A的所有资源被剥夺,A处于等待
进程C:
(2,0,0) (1,2,1)
C,B完成之后,A可完成。
4.设公共汽车上,司机和售票员的活动分别是:
司机:
启动车辆售票员:
上乘客
正常行车关车门
到站停车售票
开车门
`下乘客
在汽车不断地到站,停车,行使过程中,这两个活动有什么同步关系?
并用wait和signal原语操作实现它们的同步。
解:
BEGINintegerstop,run;
Stop:
=0;
Run:
=0;
COBEGIN
Driver:
BEGIN
L1:
wait(run);
启动车辆;
正常行车;
到站停车;
signal(stop);
GotoL1;
END
Conductor:
BEGIN
L2:
上乘客;
关车门;
signal(run);
售票;
wait(stop);
开车门;
下乘客;
GotoL2;
END
COEND
END
5、某虚拟存储器的用户编程空间共321KB,内存为16KB。
假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
页号
物理块号
1
5
2
10
3
4
4
7
则逻辑地址0A5C(H)所对应的物理地址是什么?
答:
逻辑地址0A5CH)所对应的二进制表示形式是:
0000101001011100,由于1K=210,下划线部分前的编码为000010,表示该逻辑地址对应的页号为3查页表,得到物理块号是4(十进制),即物理块地址为:
0001001000000000,拼接块内地址0000000001011100,得0001001001011100,即125C(H)。
6、某段表内容如下:
段号
段首地址
段长度
0
120K
40K
1
760K
30K
2
480K
20K
3
370K
20K
一逻辑地址为(2,154)的实际物理地址为多少?
答:
逻辑地址(2154)表示段号为2,即段首地址为480K,154为单元号,则实际物理地址为480K+154。
7、设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量为17,B资源的数量为5,C资源的数量为20。
在T0时刻系统状态如表1和表2所示。
(共10分)
系统采用银行家算法实施死锁避免策略。
①T0时刻是否为安全状态?
若是,请给出安全序列。
②在T0时刻若进程P2请求资源(0,3,4),是否能实施资源分配?
为什么?
③在②的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?
为什么?
④在③的基础上,若进程P1请求资源(0,2,0),是否能实施资源分配?
为什么?
表1 T0时刻系统状态
最大资源需求量
已分配资源数量
A
B
C
A
B
C
P1
5
5
9
2
1
2
P2
5
3
6
4
0
2
P3
4
0
11
4
0
5
P4
4
2
5
2
0
4
P5
4
2
4
3
1
4
表2 T0时刻系统状态
A
B
C
剩余资源数
2
3
3
8.系统中有五个进程P1、P2、P3、P4、P5,有三种类型的资源:
R1、R2、和R3。
在T0时刻系统状态如表所示。
若采用银行家算法实施死锁避免策略,回答下列问题:
(共9分,每小题3分)
1.T0时刻是否为安全状态?
为什么?
2.若这时P4请求资源(1,2,0),是否能实施资源分配?
为什么?
3.在上面的基础上,若进程P3请求资源(0,1,0),是否能实施资源分配?
为什么?
T0时刻系统状态
已分配资源数量
最大资源需求量
R1
R2
R3
R1
R2
R3
P1
0
0
1
0
0
1
P2
2
0
0
2
7
5
P3
0
0
3
6
6
5
P4
1
1
5
4
3
5
P5
0
3
3
0
6
5
R1
R2
R3
剩余资源数
3
3
0
解:
(共9分,每小题3分)
1.T0时刻是安全的,安全序列为:
P1,P4,P5,P2,P3
2.P4请求资源(1,2,0),根据银行家算法,预分配后系统是安全的,安全序列为:
P1,P4,P5,P2,P3
3.P3请求资源(1,1,0),根据银行家算法,预分配后系统不安全,所以不能实施资源分配。
9.一个进程的大小占5个页面,每页的大小为1K,系统为它分配了3个物理块。
当前进程的页表如图所示:
(共8分)
块号存在位P访问位R修改位M
0x1C
1
1
0
0x3F
1
1
1
-
0
0
0
0x5D
1
0
0
-
0
0
0
1.有那些页面不在内存?
(2分)
2.请分别计算进程中虚地址为0x3B7、0x12A5、0x1432单元的物理地址(用十六进制表示),并说明理由。
(6分)
解:
(共8分)
不在内存的是第2和4页(按页号),或第3和5页(按序号)。
(2分)
0x3B7的物理地址=0x73B7(2分)
0x12A5的物理地址=0x176A5,缺页,换出第三页。
(2分)
0x1432地址越界,出错。
(2分)
10.系统运行有三个进程:
输入进程、计算进程和打印进程,它们协同完成工作。
输入进程和计算进程之间共用缓冲区buffer1,计算进程和打印进程之间共用缓冲区buffer2。
输入进程接收外部数据放入buffer1中;计算进程从buffer1中取出数据进行计算,然后将结果放入buffer2;打印进程从buffer2取出数据打印输出。
用算法描述这三个进程的工作情况,并用wait和signal原语实现其同步操作。
(共8分)
解:
(共8分)
解答:
输入进程、计算进程和打印进程之间的同步问题描述如下:
var:
mutex1,mutex2,empty1,empty2,full1,full2:
=1,1,1,1,0,0;
InP:
begin
repeat
wait(empty1);
wait(mutex1);
inputadatafromkeyboard;
Addtobuffer1;
signal(mutex1);
signal(full1);
untilfalse
end
CalP:
begin
repeat
wait(full1);
wait(mutex1);
Takeadataformbuffer1;
Addtoch1;
signal(mutex1);
signal(empty1);
calculatech1;
wait(empty2);
wait(mutex2);
Takeadataformch1;
Addtobuffer2;
signal(mutex2);
signal(full2);
untilfalse
end
OutP:
begin
repeat
wait(full2);
wait(mutex2);
Takeadatafrombuffer2;
Addtoprintercontroler;
signal(mutex2);
signal(empty2);
startprinter;
untilfalse
end
(评分标准:
信号量设置2分,输入进程、计算进程、打印进程各2分)
11.在一个请求分页系统中,有一个长度为5页的进程,假如系统为它分配3个物理块,并且此进程的页面走向为2,3,2,1,5,2,4,5,3,2,5,2。
试用FIFO和LRU两种算法分别计算出程序访问过程中所发生的缺页次数。
(10分)
解:
FIFO:
232152453252
第1页222555333
第2页33322255
第3页1114442
缺页中断次数=6
LUR:
232152453252
第1页22225553
第2页3352335
第3页114422
缺页中断次数=5
12.进程A1,A2,…,An通过K个缓冲区向进程B1,B2,…,Bm不断地发送消息。
发送和接收工作遵循如下规则:
1.每个发送进程一次发送一个消息,写入缓冲区,缓冲区大小与消息长度一致;
2.对每个消息,B1,B2,…,Bm都需接收一次,读入各自的数据区内;
3.K个缓冲区都满时,发送进程等待,没有可读的消息时,接收进程等待。
试用wait和signal原语操作组织正确的发送和接收操作。
(10分)
解:
BEGIN
IntegerMutex,Avail[n],Full[m];
IntegerI;
Mutex:
=1;
FORi:
=1TOmDO
BEGIN
Avail[I]:
=k;
Full[I]:
=0;
END
PROCEDURESend(K)
IntegerI;
BEGIN
13.一个进程的大小为5个页面,为它分配了四个物理块。
当前每个块的情况如下表所示(都为十进制数,且从0开始计数。
)。
当虚页4发生缺页时,使用下列的页面置换算法,哪一个物理块将被换出?
并解释原因.(10分)
页号块号加载时间访问时间访问位R修改位M
206016101
1113016000
022616210
332016311
1.IFO算法
2.LRU算法
3.CLOCK算法
4.当页面的访问串为:
“4,0,0,0,2,4,2,1,0,3,2”的OPT算法
解:
1.换出第3号虚页,因为它加载的时间最早;
2.换出第1号虚页,因为它最近最久没被访问;
3.换出第1号虚页,因为它最近既没被访问,又没被修改;
4.换出第3号虚页,因为它离访问点最远。
14.用整型信号量描述在哲学家进餐问题中,至多允许4个哲学家同时进餐的算法。
(10分)
解:
publicclassdiningphilosophers{
semaphore[]fork=newsemaphore[5]
(1);
semaphoreroom=newsemaphore(4);
inti;
voidphilosopher(inti){
while(true)
think();
wait(room);
wait(fork[i]);
wait(fork[(i+1)%5]);
eat();
signal(fork[(i+1)%5]);
signal(fork[i]);
signal(room);}
voidmain(){
parbegin(philosopher(0),philosopher
(1),philosopher
(2),
philosopher(3),philosopher(4));}}
15.考虑一个有150个存储器单元的系统,如下分配给三个进程:
进程最大占有
————————————————————
17045
26040
36015
使用银行家算法,以确定下面的任何一个请求是否安全:
a.第4个进程到达,最多需要60个存储单元,最初需要25个单元;
b.第4个进程到达,最多需要60个存储单元,最初需要35个单元;
如果安全给出安全序列;若不安全给出结果分配简表。
(10分)
解:
进程最大占有尚需可用
————————————————————————
170452525
2604020
3601545
4602535
安全序列为:
1、2、3、4
所以系统是安全的,可以进行分配。
b.
进程最大占有尚需可用
————————————————————————
170452515
2604020
3601545
4603525
当前可用的资源不够任何一个进程运行完毕,所以不安全。
16.Jruassic公园有一个恐龙博物馆和一个公园.有m个旅客和n辆车,每辆车只能容纳一个旅客。
旅客在博物馆逛了一会儿,然后排队乘坐旅行车。
当一辆车可用时,它载入一个旅客,然后绕公园行驶任意长的时间。
如果n辆车都已被旅客乘坐游玩,则想坐车的旅客需要等待;如果一辆车已经就绪,但没有旅客等待,那么这辆车等待。
使用信号量同步m个旅客和n辆车的进程。
(10分)
解:
visitors=m;cars=n;mutex=1;
Pvi()Pci()
{repeat{repeat
wait(cars);wait(visitors);
wait(mutex);wait(mutex);
geton;start;
travell;run;
getoff;stop;
signal(cars);signal(visitors);
wait(mutex);wait(mutex);
untilfalse;untilfalse;
}}
17.读者与写者问题(reader--writerproblems)(10分)
在计算机体系中,对一个共享文件进行操作的进程可分为两类:
读操作和写操作,它们分别被称为读者和写者。
访问该文件时读者和写者,写者和写者间必须实现互斥。
只有在没有读者访问文件时,写者才允许修改文件。
或者写者在修改文件时不允许读者去读,否则会造成读出的文件内容不正确。
试写出算法描述读者和写者的问题。
解:
为了实现读者与写者的同步和互斥,我们设置一个信号量S,用于读者与写者之间或写者与读者之间的互斥,初值为“1”。
用一个变量rc表示当前正在读的读者个数,当进程可以去读或读结束后都要改变rc的值,因此rc又成为若干读进程的共享变量,它们必须互斥地修改rc。
故必须定义另一个用于互斥的信号量Sr,初值也是“1”。
读者--写者问题可描述如下:
S,Sr:
semaphore;intrc=0;S=Sr=1;
processReaderI(i=1,2,...,m)processWriterj(j=1,2,...,k)
beginbegin
P(Sr);rc=rc+1;P(S);
if(rc==1)P(S);WritefileF;
V(Sr);V(S);
readfileF;end
P(Sr);rc=tc-1;
if(rc==0)V(S);
V(Sr);
end
18、若干个等待访问磁盘者依次要访问的磁道为20,44,40,4,80,12,76,假设每移动一个磁道需要3毫秒时间,移动臂当前位于40号柱面,请按下列算法分别写出访问序列并计算为完成上述各次访问总共花费的寻道时间。
(1)先来先服务算法;
(2)最短寻道时间优先算法。
(3)扫描算法(当前磁头移动的方向为磁道递增)(10分)
解:
(1)磁道访问顺序为:
20,44,40,4,80,12,76
寻道时间=(20+24+4+36+76+68+64)*3=292*3=876
(2)磁道访问顺序为:
40,44,20,12,4,76,80
寻道时间=(0+4+24+8+8+72+4)*3=120*3=360
(3)磁道访问顺序为:
40,44,76,80,20,12,4
寻道时间=(0+4+32+4+60+8+8)*3=116*3=348
19、生产者和消费者问题(10分)
有一组生产者P1,P2,……,PM和一组消费者C1,C2,……,CK,他们通过由n个环形缓冲区构成的缓冲池进行通信,生产者把产品放入缓冲区,消费者从缓冲区取产品来消费。
请用wait和signal原语实现他们的同步操作。
解:
生产者和消费者问题
begin
Varmutex,empty,full:
semaphore:
=1,n,0;
buffer:
array[0,…,n-1]ofitem;
in,out:
integer:
=0,0;
parbegin
producer:
begin
repeat
producenextproduct;
wait(empty);
wait(mutex);
buffer(in):
=nextp;
in:
=(in+1)modn;
signal(full);
signal(mutex);
untilfalse;
end
consumer:
begin
repeat
wait(full);
wait(mutex);
nextc:
=buffer(out);
out:
=(out+1)modn;
signal(empty);
signal(mutex);
consumetheiteminnextc;
untilfalse;
end
parendend
20、请用信号量描述哲学家进餐问题。
(15分)
解:
哲学家进餐问题(15分)
publicvoidphilosopher(inti){
while(true){
think();
wait(fork[i]);
wait(fork[(i+1)%5]);
eat();
signal(fork[(i+1)%5]);
signal(fork[i]);
}}
21.今有三个并发进程R,M,P,它们共享了一个可循环使用的缓冲区B,缓冲区B共有N个单元。
进程R负责从输入设备读信息,每读一个字符后,把它存放在缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符,则把它改成“,”;进程P负责把处理后的字符取出并打印输出。
当缓冲区单元中的字符被进程P取出后,则又可用来存放下一次读入的字符。
请用PV操作为同步机制写出它们能正确并发执行的程序。
(10分)
解:
(10分)
begin
Varmutex,input,calculate,output:
semaphore:
=1,n,0,0;
buffer:
array[0,…,n-1]ofitem;
in,mid,out:
integer:
=0,0,0;
proR(){do{