题目
【简答题】有三个进程PA、PB和PC协作解决文件文件打印问题。PA将文件记录从磁盘读入内存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2中,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小与记录大小一样。请用信号量[1]来保证文件的正确打印
【简答题】有三个进程PA、PB和PC协作解决文件文件打印问题。PA将文件记录从磁盘读入内存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2中,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小与记录大小一样。请用信号量[1]来保证文件的正确打印
题目解答
答案
分析:本题是生产者消费者问题的一个变形,对缓冲区1来说,PA是生产者,PB是消费者;对缓冲区2来说,PB是生产者,PC是消费者。因缓冲区1和2都只能存放一个记录,所以不需要mutex这样的互斥信号量,只需保持同步即可。算法描述如下:
解析
步骤 1:定义信号量
定义信号量empty1、full1、empty2、full2,分别表示缓冲区1的空闲和满状态,以及缓冲区2的空闲和满状态。初始时,empty1和empty2的值为1,full1和full2的值为0。
步骤 2:PA进程操作
PA进程每次读取一个记录后,将记录放入缓冲区1,然后执行V(full1)操作,表示缓冲区1已满,同时执行P(empty1)操作,表示缓冲区1已空。
步骤 3:PB进程操作
PB进程每次从缓冲区1读取一个记录后,将记录放入缓冲区2,然后执行V(full2)操作,表示缓冲区2已满,同时执行P(full1)操作,表示缓冲区1已空。
步骤 4:PC进程操作
PC进程每次从缓冲区2读取一个记录后,将记录打印出来,然后执行V(empty2)操作,表示缓冲区2已空,同时执行P(full2)操作,表示缓冲区2已满。
定义信号量empty1、full1、empty2、full2,分别表示缓冲区1的空闲和满状态,以及缓冲区2的空闲和满状态。初始时,empty1和empty2的值为1,full1和full2的值为0。
步骤 2:PA进程操作
PA进程每次读取一个记录后,将记录放入缓冲区1,然后执行V(full1)操作,表示缓冲区1已满,同时执行P(empty1)操作,表示缓冲区1已空。
步骤 3:PB进程操作
PB进程每次从缓冲区1读取一个记录后,将记录放入缓冲区2,然后执行V(full2)操作,表示缓冲区2已满,同时执行P(full1)操作,表示缓冲区1已空。
步骤 4:PC进程操作
PC进程每次从缓冲区2读取一个记录后,将记录打印出来,然后执行V(empty2)操作,表示缓冲区2已空,同时执行P(full2)操作,表示缓冲区2已满。