主观题:h397.有三个进程PA、PB和PC协作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行......
有三个进程PA、PB和PC协作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的记录复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。缓冲区的大小和一个记录大小一样。试用P、V操作来保证文件的正确打印。
答案:解:BEGIN
semaphore mutex1,mutex2,avail1,avail2,full1,full2;
mutex1 := 1;mutex2 := 1; {实际上mutex1,mutex2可以省去}
avail1 := 1;avail2 := 1;
full1 := 0;full2 := 0;
PARBEGIN
PA:BEGIN
L1:read from disk;
P(avail1);
P(mutex1);
put to buffer 1;
V(full1);
V(mutex1);
goto L1;
END(5分)
PB:BEGIN
L2:P(full1);
P(mutex1);
get from buffer 1;
V(avail1);
V(mutex1);
(2分)
P(avail2);
P(mutex2);
put to buffer 2;
V(full2);
V(mutex2);
goto L2 ;
END
PC:BEGIN
L3:P(full2);
P(mutex2);
get from buffer 2;
V(avail2);
V(mutex2);
print RECORD
goto L3 ;
END
PAREND
END(3分)
答案:解:BEGIN
semaphore mutex1,mutex2,avail1,avail2,full1,full2;
mutex1 := 1;mutex2 := 1; {实际上mutex1,mutex2可以省去}
avail1 := 1;avail2 := 1;
full1 := 0;full2 := 0;
PARBEGIN
PA:BEGIN
L1:read from disk;
P(avail1);
P(mutex1);
put to buffer 1;
V(full1);
V(mutex1);
goto L1;
END(5分)
PB:BEGIN
L2:P(full1);
P(mutex1);
get from buffer 1;
V(avail1);
V(mutex1);
(2分)
P(avail2);
P(mutex2);
put to buffer 2;
V(full2);
V(mutex2);
goto L2 ;
END
PC:BEGIN
L3:P(full2);
P(mutex2);
get from buffer 2;
V(avail2);
V(mutex2);
print RECORD
goto L3 ;
END
PAREND
END(3分)