【正确答案】
【答案解析】采用SPOOLing系统后,两台打印机可供若干个系统或用户进程同时使用。根据题意,可设立3个并发进程完成两台打印机的使用,它们分别是输出井管理进程、系统打印进程和网络打印进程。为此,输出井中设立了两个缓冲区队列,一个用于存放系统打印作业,一个用于存放网络打印作业,两个队列分别需要互斥使用。同时系统打印进程还要和网络打印进程通信,以决定一般用户可否使用系统使用的打印机。具体程序实现如下:
begin
var s1,s2:semaphore;
var sysˉpcount,net_pcount:integer;
s1=1; //系统打印队列互斥信号量
s2=1; //网络打印队列互斥信号量
sys_pcount=0; //系统打印作业计数器
net_pcount=1; //网络打印机作业计数器
cobegin
buffer=manageQ //打印缓冲区管理进程
begin
接收一个打印作业:
if(系统打印作业)
P(s1);
放入系统打印队列;
sys_pcount:=sys_pcount+1;
V(s1);
else
P(s2)
放入网络打印队列;
net_pcouny:=net_pcount+1;
V(s2);
end;
system_print()
begin
P(s1);
if(sys_pcount>0)
取出系统打印队列一个打印作业打印;
sys_pcount:=sys_pcount-1;
else
P(s2);
取出网络打印队列一个打印作业打印:
net_pcount:=net_pcount-1;
V(S2);
V(S1);
end1。
user_Print()
begin
P(s2);
if(net_pcount<>0)
取出网络打印队列一个打印作业打印;
net_pcoun:=net_pcount-1;
V(S2)
end;
coend;
end;