有关pv操作类的题目

更新时间:2024-03-07 06:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

有关pv操作类的题目

1、假定系统有三个并发进程read, move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。 请用PV操作,写出它们的并发程序。

解:begin

emptyB1 , fullB1, emptyB2, fullB2 : semaphore B1,B2 : record

emptyB1 := 1,fullB1:=0,emptyB2:=1,fullB2:=0 cobegin process read X : record;

begin R: 接收来自输入设备上一个记录 X:=接收的一个记录; P(emptyB1); B1:=X; V(fullB1); goto R; end;

Process move Y:record; begin

M:P(fullB1); Y:=B1; V(emptyB1)

1

加工 Y P(emptyB2); B2:=Y; V(fullB2); goto M; end; Process print Z:record; begin P:P(fullB2); Z:=B2; V(emptyB2) 打印Z goto P; end; coend; end;

2、用PV操作解决读者写者问题的正确程序如下:begin S, Sr: Semaphore; rc: integer; S:=1; Sr:=1; rc:=0;

cobegin PROCESS Reader i ( i=1,2…)

2

begin ( P(S5)) P(Sr) rc:=rc+1; if rc=1 then P(S); V(Sr); read file; P(Sr); rc:=rc-1 if rc=0 thenV(S); V(Sr); ( V(S5) ) end ;

PROCESS Writer j (j=1,2…) begin P(S); Write file; V(S) end; coend ; end;

请回答:(1)信号量 Sr的作用;(2)程序中什么语句用于读写互斥,写写互斥;(3)若规定仅允许5个进程同时读怎样修改程序? 解:(1)Sr用于读者计数变量rc的互斥信号量;

3

(2)if rc=1 then P(S)中的P(S)用于读写互斥;写者进程中的P(S)用于写写互斥,读写互斥。

(3)程序中增加一个信号量S5,初值为5,P(S5)语句加在读者进程P(Sr)之前,V(S5)语句加在读者进程第2个V(Sr)之后。 3、某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题:

(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。

(2)根据所定义的信号量,把应执行的PV操作填入下述方框中,以保证进程能够正确地并发执行。

COBEGIN PROCESS Pi(i=1,2,……) Begin [P(s)] 进入售票厅; 购票; 退出; [V(s) ] end; COEND

(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。

解:(1)定义一信号量S,初始值为20。

4

意义:S>0 S的值表示可继续进入售票厅的人数 S=0 表示售票厅中已有20名顾客(购票者) S<0 |S|的值为等待进入售票厅的人数 (2) 上框为P(S) 下框为V(S) (3) S的最大值为20 S的最小值为20-n

4、有三个并发进程A,B和C,共享一个缓冲器F。F中每次只能存放一个数。进程A每次产生一个随机数R,将其存入F中。若存放到F中的数是5的倍数,则由进程B将其取出并打印,否则由进程C将被5除后的余数打印出来。为防止数的丢失和重复取同一个数,现用PV操作进行管理以达到上述要求。 Begin s1:=1,s2:=0,s3:=0 : semaphore; F,R,x,y: integer; Process A begin

L1: 产生随机数R; P(s1);

将R放入F中; if R mod 5 = 0 then V(s2); else V( s3);

5

goto L1; end; Process B begin L2: P(s2); x:=R; V(s1); print x; goto L2; end; Process C begin L3: P(s3); y:=R mod 5; V(s1); print y; goto L3; end;

5、有一家4口在吃水果,共用一个水果盘,并且该盘一次只能放一个水果,妈妈只往里边放苹果,爸爸只往里边放橘子,而女儿只吃苹果,儿子只吃橘子,试用P、V操作实现这一过程。

6

Begin mutex:=1,orange:=0,apple:=0 :semaphore; Mather( ) repeat { P(mutex); 放入苹果; V(apple); } end; Father ( ) repeat { P(mutex); 放入橘子; V(orange); } end;

Daughter ( ) repeat { P(apple); 取走苹果; V(mutex); 吃苹果; }

7

end; Son( ) repeat { P( orange); 取走橘子; V(mutex); 吃橘子; } end;

6、有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问:

(1)为描述读者的动作,应编写几个程序(设置几个进程) ? (2)试用PV操作描述读者进程之间的同步关系。

解:读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;一是读者阅读完毕,离开阅览室。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。

算法的信号量有三个:seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。 读者进入阅览室的动作描述 getin:

8

while(TRUE){

P (seats); P(mutex) 填写登记表; 进入阅览室读书;

V(mutex) V(readers) }

读者离开阅览室的动作描述 getout: while(TRUE) {

P(readers) P(mutex) 消掉登记;

离开阅览室; V(mutex) V(seats) }

7、现有4个进程:R1,R2,W1,和W2,

它们共向只能存放一个数据的

9

缓冲区B,进程R1每次把从磁盘上读的一个数据放入B中,供进程W1打印输出,进程R2每次把从磁盘上读的一个数据放入B中,供进程W2打印输出,试用P、V操作协调4个进程的并发执行。 同第5题。

8、设有3个并发执行的进程:输入进程Pi, 计算进程Pc, 输出进程Po.其中进程Pi不断地从键盘上读入整数,放入缓冲区Buf1中,Pc按输入顺序从Buf1中取数据,每次取出两个整数并计算其和,将结果缓冲区Buf2中,。Po负责将Buf2中的数据按顺序输出,若Buf1和Buf2中可以存放的数据分别是m,n ( m、n>0),试用P、V操作写出Pi,Pc,Po 的算法。

解:设4个信号量e1:=m, f1:=0, e2:=n, f2:=0; Pi begin

L1: 从键盘上读取一个数据; P(e1);

把数据放入缓冲区1中; V(f1); Goto L1; end Pc

10

begin L2: P(f1);

X:=从缓冲区1中读一个数据; V(e1); P(f1);

Y:= 从缓冲区1中读一个数据; V(e1) ; Z:=x+y; P(e2);

将z放入缓冲区2中; V(f2); Goto L2; end; Po begin L3: P(f2)

W:=从缓冲区2中一个数据; V(e2); 打印W; Goto L3; end;

11

9、设有三个并发进程R,M,P, 它们共享一个缓冲区B。进程R负责向B中输入数据;进程R每输入一个数据,进程M 负责对其加工;进程M加工完成后,进程P负责打印输出。缓冲器B中每次只能存放一个数据,数据一旦被打印,进程R又可以存放下一个数据,试用P、V操作来实现这三个进程之间的关系。 解:设3个信号量e:=1,f1:=0,f2:=0; PR begin

L1: 生产了一个数据; P(e);

将数据放入缓冲区中; V(f1); Goto L1; end PM begin L2:P(f2);

加工缓冲区中的数据; V(f2); Goto L2; end;

12

PP begin L3: P(f2);

打印缓冲区B中的数据; V(e) end;

10、在测量控制系统中,数据采样任务和数据计算任务是互相制约的,设某个系统中有一个缓冲单元存储采样数据,并利用信号量S的P、V操作实现这种制约,下面是完成该任务的框图,其中S1时空缓冲单元的个数,S2是已用缓存单元的个数,利用S3防止两个任务同时访问缓冲区,S1的初值时N(N>0), S2得出知识0,S3的初值是1,在下列框图中填上适当的P、V 操作以实现该算法。

11、设系统中有两类生产进程和两类消费进程:

生产进程生产的数据为AB行,只能供应消费者B使用; 生产进程P生产的数据为PQ型,只能供消费者Q使用,并且B不能使用PQ型的数据,Q不能使用AB型数据。若这4个进程共同使用一个公共的缓冲区来传送数据,并且该缓冲区仅能容纳一个AB型或PQ型数据。若系统中有多个A类和多个P类生产进程,以及多个B类和多个Q类消费进程,试用P、V操作描述这4类进程的算法。

要求:由于系统中的两类生产进程和两类消费进程都异常活跃,而唯一的公共缓冲区可能会成为瓶颈,因此算法应该避免类似下述情况发

13

生,即:当某个生产者A将生产的数据放入缓冲区后,由于所有的消费者B都忙于消费先前得到的数据而无法立即将数据从缓冲区中取走,从而导致缓冲区长期被占用,使得一个空闲消费则Q无法收到生产者P已经生产的数据。

12、某寺庙,有小、老和尚若干,有一水缸,有小和尚提水入缸供老和尚用。水缸可容10桶水,水取自同一个水井中,水井径窄,每次只能容一个水桶取水,水桶数量不限,每次入缸取水只为一桶水,且不可同时进行,试给出有关入井取水和入缸取水的算法描述。 3、设公共汽车上,司机和售票员的活动分别是: 司机: 启动车辆 售票员: 上乘客 正常启动 关车门 到站停车 售票 开车门 下乘客

在汽车不断到站、停车、行驶过程中,这两个活动有什么同步关系?并用wait和sigal原语操作实现它们的同步。

14

本文来源:https://www.bwwdw.com/article/8zpa.html

Top