若某机房有两台打印机。其中一台尽量满足系统打印要求,只有当系统不需要时才可以被一般用户共享。另一台打印机直接作为网络共享打印机,供一般用户使用。
试用记录型信号量机制实现对送两台打印机使用过程的管理,要求写出需要设计的数据结构和算法。
参考答案:采用SPOOLing系统后,两台打印机可供若干个系统或用户进程同时使用。根据题意,可设立C个并发进程完成两台打印机的使用,它们分别是输出井管理进程、系统打印进程和网络打印进程。为此,输出井中设立了两个缓冲区队列,一个用于存放系统打印作业,一个用于存放网络打印作业,两个队列分别需要互斥使用。同时系统打印进程还要和网络打印进程通信,以决定一般用户可否使用系统使用的打印机。具体程序实现如下:
begin
var sA,sB:semaphore;
var sysˉpcount,net_pcount:integer;
sA=A; //系统打印队列互斥信号量
sB=A; //网络打印队列互斥信号量
sys_pcount=0; //系统打印作业计数器
net_pcount=A; //网络打印机作业计数器
cobegin
buffer=manageQ //打印缓冲区管理进程
begin
接收一个打印作业:
if(系统打印作业)
P(sA);
放入系统打印队列;
sys_pcount:=sys_pcount+A;
V(sA);
else
P(sB)
放入网络打印队列;
net_pcouny:=net_pcount+A;
V(sB);
end;
system_print()
begin
P(sA);
if(sys_pcount>0)
取出系统打印队列一个打印作业打印;
sys_pcount:=sys_pcount-A;
else
P(sB);
取出网络打印队列一个打印作业打印:
net_pcount:=net_pcount-A;
V(SB);
V(SA);
endA。
user_Print()
begin
P(sB);
if(net_pcount<>0)
取出网络打印队列一个打印作业打印;
net_pcoun:=net_pcount-A;
V(SB)
end;
coend;
end;