[操作系统]经典进程同步问题题库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则从该缓冲区中取出数据并进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。
Var Sempty,Sfull:semaphore:=1,0
Begin
Parbegin
Collection:begin
repeat
采集一个数据;
wait(Sempty);
数据放入缓冲区;
signal(Sfull);
untill false;
end;
Compute:begin
repeat
wait(Sfull);
从缓冲区取出数据;
signal(Sempty);
计算;
`until false;
end;
Parend
End
2、有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用wait和signal原语描述读者进程的同步问题。
var mutex,readcount:semaphore:=1,100; Begin
Parbegin
Process Reader:begin
repeat
wait(readcount);
wait(mutex);
<填入座号和姓名完成登记>;
signal(mutex);
<阅读>
wait(mutex)
<删除登记表中的相关表项,完成注销>
signal(mutex);
signal(readcount);
until false;
end;
parend;
End;
1)、桌上有一空盘,只允许放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子;女儿专吃盘中的苹果,儿子专吃盘中的桔子;试用wait 和signal原语实现爸爸、妈妈、女儿、儿子之间的同步问题。
var Sempty,Sapple,Sorange,:semaphore:=1,0,0; begin
parbegin
Father:begin
repeat
wait(Sempty);
signal(Sapple);
until false;
end;
Mother:begin
repeat
wait(Sempty);
signal(Sorange);
until false;
end;
Son:begin
repeat
wait(Sorange);
signal(Sempty);
until false;
end;
Daughter:begin
repeat
wait(Sapple);
signal(Sempty);
until false;
end;
parend;
end;
1、在4×100米接力赛中,4个运动员之间存在如下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑完全程。请试用信号量机制对其上过程进行分析。
var s1,s2,s3:semaphpre:=0,0,0;
begin
parbegin
Athlete1:begin
Run100m;
signal(s1);
end;
Athlete2:begin
wait(s1);
Run100m;
signal(s2);
end;
Athlete3:begin
wait(s2);
Run100m;
signal(s3);
end;
Athlete4:begin
wait(s3);
Run100m;
end;
parend;
end
2、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。
var s1,s2:semaphore:=0,0;
begin
parbegin
Process Driver
begin
repeat
signal(s2);
wait(s1);
until false;
end;
Process BookingClerk;
begin
repeat
wait(s2);
signal(s1);
until false
end;
parend;
end;
1、假设有3个并发进程P,Q,R,其中P负责从输入设备上读入信息,并传送给Q,Q将信息加工后传送给R,R负责打印输出。进程P,Q共享一个有m个缓冲区组成的缓冲池;进程Q,R 共享一个有n个缓冲区组成的缓冲池(假设缓冲池足够大,进程间每次传输信息的单位均小于等于缓冲区长度),请写出满足上述条件的并发程序。(12分)
var
mutex1,mutex2,Sip,Siq,Soq,Sor:semaphore:=1,1,m, 0,n,0;
begin
parbegin
Process P
begin
repeat
<读入信息>
wait(Sip);
wait(mutex1);
<数据放入缓冲区>
signal(mutex1);
signal(Siq);
until false
end;
Process Q
begin
repeat
wait(Siq);
wait(mutex1);
<从缓冲区中取出数据>
signal(mutex1);
signal(Sip);
<数据处理〉
wait(Soq);
wait(mutex2);
<处理后的数据放入缓冲区>
signal(mutex2);
signal(Sor);
until false
end;
Process R
repeat
wait(Sor);
wait(mutex2);
<把数据送入打印机完成打印>;
signal(mutex2);
signal(Soq);
until false
end
parend
end
2、有一只铁笼子,每次只能放入一只动物,猎手向笼子里放入老虎,农民向笼子里放入猪;动物园等待取笼子里的老虎,饭店等待取笼子里的猪。现请用wait和signal操作写出能同步执行的程序。
var Sempty,Stiger,Spig,:semaphore:=1,0,0; begin
parbegin
Hunter:begin
repeat
wait(Sempty);
signal(Stiger);
until false;
end;
Farmer:begin
repeat
wait(Sempty);
signal(Spig);
until false;
end;
Zoo:begin
repeat
wait(Stiger);
signal(Sempty);
until false;
end;
Hotel:begin
repeat
wait(Spig);
signal(Sempty);until false;
end;
parend;
end;