操作系统进程部分的习题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程部分的习题

1. 在公共汽车上,司机进程和售票员进程各司其职。司机在正常行车中售票员售票,两者之间没有制约关系,可以任意并发。但是在其他环节,司机和售票员进程之间存在着如下同步关系:

1)司机停车后等待售票员关门后才能启动车辆。

2)售票员售完票后,等待司机到站停车,停车后才能打开车门。

var door,stop:semaphore:=0,0

begin

parbegin

司机进程:

begin

while(true){

wait(door); //等待售票员发送关门信息

启动车辆;

正常行车;

到站停车;

signal(stop);//给售票员发送到站信息

}

end;

售票员进程:

begin

while(true){

关车门;

signal(door); //给司机发送关门信息

售票;

wait(stop);//等待司机发送到站信息

开车门;

上下乘客;

}

end

parend

end.

2.某寺庙,有小和尚,老和尚若干。有一水缸,由小和尚提水入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次中能容下一个桶取水。水桶总数为3个。每人一次取缸水仅为1桶,且不可同时进行。试用记录型信号量给出有关取水、入水的算法描述。

根据题意,定义信号量及其初值如下:

(1)水桶为临界资源需互斥使用,定义信号量bucket,因有3个桶,故初值为3;(2)水井一次只能允许下一个桶取水,定义互斥信号量well,初值为1;

(3)水缸一次只能允许一个人取水,定义互斥信号量jar,初始值为1;

(4)empty和full用于小和尚和老和尚之间的同步制约关系。因为缸能存10桶水,所以empty初始值为10;开始时缸中没有水,full的初始值为0。

semaphore bucket=3,jar=1,full=0,empty=10,well=1; young_monk(){ /*小和尚入水算法*/

while(1){

wait(empty);

wait (bucket);

wait (well);

从水井中打水;

signal(well);

wait (jar);

倒入水缸;

signal (jar);

signal (bucket);

signal (full);

}

}

old_monk(){ /*老和尚取水算法*/

while(1){

wait(full);

wait (bucket);

wait (jar);

从缸中取水;

signal (jar);

signal (bucket);

signal (empty);

从桶中倒入饮用;

}

}

3.设有3个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲区组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者),共享另一个由m个缓冲区组成的缓冲池。用信号量机制协调它们的同步问题。

Semaphore full1 = 0, full2 = 0, empty1 = n, empty2 = m, mutex1 = 1, mutex2 = 1;

int in1 = 0, out1 = 0, in2 = 0, out2 = 0;

Buffer buffer1[n], buffer2[m];

A( ){

while(true){

to produce an item;

wait(empty1);

wait(mutex1);

把产品放入buffer1[in1];

in1 = (in1+1) mod n;

signal(mutex1);

signal(full1);

}

}

B( ){

while(true){

wait(full1);

wait(mutex1);

从buffer1[out1]获得产品;

out1 = (out1+1) mod n;

signal(mutex1);

signal(empty1);

………

wait(empty2);

wait(mutex2);

把产品放入buffer2[in2];

in2 = (in2+1) mod m;

signal(mutex2)

signal(full2);

}

}

C( ){

while(true){

wait(full2);

wait(mutex2);

从buffer2[out2]获得产品;

out2 = (out2+1) mod m;

signal(mutex2);

signal(empty2);

}

}

4.理发店里有一位理发师,一把理发椅和n把供等候理发顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉。当一个顾客到来时,他必须先叫醒理发师。如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,他们就坐下来等;如果没有空椅子,他就离开。用信号量机制来描述他们的行为。

Semaphore max=n+1, next=1, ready=0, finished=0;

barber( ){

while(true){

wait(ready);

给一个顾客理发;

signal(finished);

signal(next);

ustomer( ){

while(true){

wait(max);

相关文档
最新文档