1有关pv操作类的题目1、假定系统有三个并发进程read,move和print共享缓冲器B1和B2。进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。进程print将B2中的记录取出打印输出。缓冲器B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。请用PV操作,写出它们的并发程序。解:beginemptyB1,fullB1,emptyB2,fullB2:semaphoreB1,B2:recordemptyB1:=1,fullB1:=0,emptyB2:=1,fullB2:=0cobeginprocessreadX:record;beginR:接收来自输入设备上一个记录X:=接收的一个记录;P(emptyB1);B1:=X;V(fullB1);gotoR;end;ProcessmoveY:record;beginM:P(fullB1);Y:=B1;V(emptyB1)2加工YP(emptyB2);B2:=Y;V(fullB2);gotoM;end;ProcessprintZ:record;beginP:P(fullB2);Z:=B2;V(emptyB2)打印ZgotoP;end;coend;end;2、用PV操作解决读者写者问题的正确程序如下:beginS,Sr:Semaphore;rc:integer;S:=1;Sr:=1;rc:=0;cobeginPROCESSReaderi(i=1,2…)3begin(P(S5))P(Sr)rc:=rc+1;ifrc=1thenP(S);V(Sr);readfile;P(Sr);rc:=rc-1ifrc=0thenV(S);V(Sr);(V(S5))end;PROCESSWriterj(j=1,2…)beginP(S);Writefile;V(S)end;coend;end;请回答:(1)信号量Sr的作用;(2)程序中什么语句用于读写互斥,写写互斥;(3)若规定仅允许5个进程同时读怎样修改程序?解:(1)Sr用于读者计数变量rc的互斥信号量;4(2)ifrc=1thenP(S)中的P(S)用于读写互斥;写者进程中的P(S)用于写写互斥,读写互斥。(3)程序中增加一个信号量S5,初值为5,P(S5)语句加在读者进程P(Sr)之前,V(S5)语句加在读者进程第2个V(Sr)之后。3、某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,则厅外的购票者可立即进入,否则需在外面等待。若把一个购票者看作一个进程,请回答下列问题:(1)用PV操作管理这些并发进程时,应怎样定义信号量,写出信号量的初值以及信号量各种取值的含义。(2)根据所定义的信号量,把应执行的PV操作填入下述方框中,以保证进程能够正确地并发执行。COBEGINPROCESSPi(i=1,2,……)Begin[P(s)]进入售票厅;购票;退出;[V(s)]end;COEND(3)若欲购票者最多为n个人,写出信号量可能的变化范围(最大值和最小值)。解:(1)定义一信号量S,初始值为20。5意义:S0S的值表示可继续进入售票厅的人数S=0表示售票厅中已有20名顾客(购票者)S0|S|的值为等待进入售票厅的人数(2)上框为P(S)下框为V(S)(3)S的最大值为20S的最小值为20-n4、有三个并发进程A,B和C,共享一个缓冲器F。F中每次只能存放一个数。进程A每次产生一个随机数R,将其存入F中。若存放到F中的数是5的倍数,则由进程B将其取出并打印,否则由进程C将被5除后的余数打印出来。为防止数的丢失和重复取同一个数,现用PV操作进行管理以达到上述要求。Begins1:=1,s2:=0,s3:=0:semaphore;F,R,x,y:integer;ProcessAbeginL1:产生随机数R;P(s1);将R放入F中;ifRmod5=0thenV(s2);elseV(s3);6gotoL1;end;ProcessBbeginL2:P(s2);x:=R;V(s1);printx;gotoL2;end;ProcessCbeginL3:P(s3);y:=Rmod5;V(s1);printy;gotoL3;end;5、有一家4口在吃水果,共用一个水果盘,并且该盘一次只能放一个水果,妈妈只往里边放苹果,爸爸只往里边放橘子,而女儿只吃苹果,儿子只吃橘子,试用P、V操作实现这一过程。7Beginmutex:=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);吃苹果;}8end;Son()repeat{P(orange);取走橘子;V(mutex);吃橘子;}end;6、有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问:(1)为描述读者的动作,应编写几个程序(设置几个进程)?(2)试用PV操作描述读者进程之间的同步关系。解:读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;一是读者阅读完毕,离开阅览室。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。算法的信号量有三个:seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。读者进入阅览室的动作描述getin:9while(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,它们共向只能存放一个数据的10缓冲区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、n0),试用P、V操作写出Pi,Pc,Po的算法。解:设4个信号量e1:=m,f1:=0,e2:=n,f2:=0;PibeginL1:从键盘上读取一个数据;P(e1);把数据放入缓冲区1中;V(f1);GotoL1;endPc11beginL2:P(f1);X:=从缓冲区1中读一个数据;V(e1);P(f1);Y:=从缓冲区1中读一个数据;V(e1);Z:=x+y;P(e2);将z放入缓冲区2中;V(f2);GotoL2;end;PobeginL3:P(f2)W:=从缓冲区2中一个数据;V(e2);打印W;GotoL3;end;129、设有三个并发进程R,M,P,它们共享一个缓冲区B。进程R负责向B中输入数据;进程R每输入一个数据,进程M负责对其加工;进程M加工完成后,进程P负责打印输出。缓冲器B中每次只能存放一个数据,数据一旦被打印,进程R又可以存放下一个数据,试用P、V操作来实现这三个进程之间的关系。解:设3个信号量e:=1,f1:=0,f2:=0;PRbeginL1:生产了一个数据;P(e);将数据放入缓冲区中;V(f1);GotoL1;endPMbeginL2:P(f2);加工缓冲区中的数据;V(f2);GotoL2;end;13PPbeginL3:P(f2);打印缓冲区B中的数据;V(e)end;10、在测量控制系统中,数据采样任务和数据计算任务是互相制约的,设某个系统中有一个缓冲单元存储采样数据,并利用信号量S的P、V操作实现这种制约,下面是完成该任务的框图,其中S1时空缓冲单元的个数,S2是已用缓存单元的个数,利用S3防止两个任务同时访问缓冲区,S1的初值时N(N0),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类进程的算法。要求:由于系统中的两类生产进程和两类消费进程都异常活跃,而唯一的公共缓冲区可能会成为瓶颈,因此算法应该避免类似下述情况发14生,即:当某个生产者A将生产的数据放入缓冲区后,由于所有的消费者B都忙于消费先前得到的数据而无法立即将数据从缓冲区中取走,从而导致缓冲区长期被占用,使得一个空闲消费则Q无法收到生产者P已经生产的数据。12、某寺庙,有小、老和尚若干,有一水缸,有小和尚提水入缸供老和尚用。水缸可容10桶水,水取自同一个水井中,水井径窄,每次只能容一个水桶取水,水桶数量不限,每次入缸取水只为一桶水,且不可同时进行,试给出有关入井取水和入缸取水的算法描述。3、设公共汽车上,司机和售票员的活动分别是:司机:启动车辆售票员:上乘客正常启动关车门到站停车售票开车门下乘客在汽车不断到站、停车、行驶过程中,这两个活动有什么同步关系?并用wait和sigal原语操作实现它们的同步。