若某机房有两台打印机。其中一台尽量满足系统打印要求,只有当系统不需要时才可以被一般用户共享。另一台打印机直接作为网络共享打印机,供一般用户使用。
试用记录型信号量机制实现对送两台打印机使用过程的管理,要求写出需要设计的数据结构和算法。 |
参考答案:
解析:采用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;