[操作系统]经典进程同步问题题库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档