打印机是经常使用的输出设备,属于独占设备,利用假脱机技术可以将它改造成为一台可供多个用户共享的打印机设备,从而提高设备的利用率。
假脱机打印系统组成部分
- 磁盘缓冲区。它是在磁盘上开辟的一个存储空间,用于暂存用户程序的输出数据。
- 打印缓冲区。用于缓和CPU和磁盘之间的速度不匹配问题,设置在内存中,用于暂存从磁盘缓冲区送来的数据,以后再传送给打印机设备打印。
- 假脱机管理进程和假脱机打印进程。
过程
每当用户进程发出打印输出请求时,假脱机打印系统并不是立即把打印机分配给该用户进程,而是由假脱机管理进程完成两项工作:(1)在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存。(2)为用户进程申请一张空白的用户请求打印表,并将用户的打印要求你填入其中,再将该表挂入假脱机文件队列上。在这两项工作完成后,虽然还没有进行任何实际的打印输出,但对于用户进程而言,其打印请求已经得到满足,打印输出任务已经完成。
真正的打印输出时由假脱机打印进程负责,当打印机空闲时,该进程首先从假脱机文件队列的首队列摘取一张请求打印表,然后根据表中的要求将要打印的数据由输出井传送到内存缓冲区,再交付给打印机进行打印。一个打印任务完成后,假脱机打印进程将再次查看假脱机文件队列,若队列费控,重复上述操作,直至队列为空。假脱机打印进程将自己阻塞起来,仅当再次有打印请求时,才重新唤醒。
假脱机系统向用户提供的共享打印机的概念是:对每个用户而言,系统并非即时执行其程序输出数据的真实打印操作,而只是即时将数据输出到缓冲区,这时的数据并未真实被打印,只是让用户感觉到系统已经为它打印。真正的打印操作,是在打印机空闲且该打印任务在等待队列中已排到队首时进行的。而且,打印操作本身也是利用CPU的一个时间片,没有使用专门的外围机,以上过程对用户屏蔽,不可见。