有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录的大小。

admin2019-08-01  39

问题 有三个进程PA、PB和PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录的大小。请用P、V操作来保证文件的正确打印。

选项

答案(1)进程PA、PB、PC之间的关系为:PA与PB共用一个单缓冲区,PB又与PC共用一个单缓冲区,其合作方式如下图所示。当缓冲区1为空时,进程PA可将一个记录读入其中;若缓冲区1中有数据且缓冲区2为空,则进程PB可将记录从缓冲区1复制到缓冲区2中;若缓冲区2中有数据,则进程PC可以打印记录。 其他条件下,相应进程必须等待。事实上,这是一个生产者一消费者问题。 [*] 为遵循这一同步规则。应设置4个信号量empty1、empty2、fulll、full2,信号量empty1和empty2分别表示缓冲区1及缓冲区2是否为空,其初值为1;信号量full1和full2分别表示缓区1及缓冲区2是否有记录可供处理,其初值为0。 (2)相应的进程描述如下: semaphore empty1=1: //缓冲区1是否为空 semaphore full1=0: //缓冲区1是否有记录可供处理 semaphore empty2=l: //缓冲区2是否为空 semaphore full2=0: //缓冲区2是否有记录可供处理 cobegin{ process PA(){ while(TRuE){ 从磁盘读入一条记录; P(emptyl); 将记录存入缓冲区1; V(full1); } } process PB(){ while(TRUE){ P(full1); 从缓冲区1中取出一条记录; V(empty1); P(empty2); 将取出的记录存入缓冲区2; V(full2); } } process PC(){ while(TRUE){ P(full2); 从缓冲区2中取出一条记录; V(empty2); 将取出的记录打印出来; } } }coend

解析
转载请注明原文地址:https://kaotiyun.com/show/fACi777K
0

相关试题推荐
最新回复(0)