四、计算题
1. 这是一个从键盘输入到打印机输出的数据处理流图,其中键盘输入进程通过缓冲区 buf1 把输入数据传送给计算
进程,计算进程把处理结果通过缓冲 buf2 传送给打印进程。buf1 和 buf2 为临界资源,试写出键盘输入进程,计
算进程及打印进程间的同步算法。(10 分)
输入进程 → buf1 → 计算进程 → buf2 → 打印进程
解答:从键盘输入到打印机输出的数据传送过程,可以看作是由键盘输入进程到计算进程,以及由计算进程到打印
输出进程这两个数据传送进程所组成。其中,对键盘输入进程而言,计算进程是消费者进程;而对打印输出进程而
言,计算进程又是生产者进程。据此可将它们之间的同步问题描述如下:
var:mutex1,mutex2,empty1,empty2,full1,full2:=1,1,1,1,0,0;
IP:begin
repeat
P(empty);
P(mutex1);
input a charcter from keyboard;
Add to buffer;
V(mutex1);
V(full);
until false
end
CP:begin
repeat
P(full);
P(mutex1);
Take a charactor form buffer1;
Add to ch1;
V(mutex1);
V(empty1);
P(empty2);
P(mutex2);
Take a charactor form ch1;
Add to buffer2;
V(mutex2);
V(full2);
until false
end
OP:begin
repeat
p(full2);
P(mutex2);
Take a charactor from buffer2;
Add to printer controler;
start printer;
V(mutex2);
V(empty2);
until false
end