关于spooling的一些理解

spooling做了什么

1.将独占设备(打印机)虚拟化,变成一个逻辑上的共享设备。

怎么理解?虚拟化,通俗来讲,就是让单个资源仿似变成了多个资源。

以打印机为例,没有虚拟化之前,只能有一个进程申请到打印机资源。

有了虚拟化,多个进程可以同申请到打印机的使用权。也就是说把打印机从独占设备变成了共享设备。

 

2.将低速设备(字符设备)变成了高速设备。

对于字符设备,我们通常会采用忙等或者中断的方式来进行交互。这样效率比较低。

spooling使用硬盘作为中转,不再直接读写低速设备,从而提高了IO效率。

 

虚拟化

我们使用打印机来举例。有两种方式来使用。

1.同步的方式:就是进程需要等待打印任务执行完毕。

由于打印机这类设备是低速的独占设备,因此该进程会长时间占用打印机,从而导致其他需要打印机的进程处于忙等或者阻塞的状态。

2.异步的方式:进程不再需要等待打印任务执行完毕。进程将打印任务提交给一个专门的打印机管理进程,然后通过回调函数获取打印结果。

使用异步的方式,增加了并发度,同时也减少了阻塞唤醒或者忙等的开销。

 

脱机技术指的是任务可以脱离本机(cpu)执行。cpu会将任务交给一个专用的外围设备来处理。一旦任务提交以后,就不需要cpu进行干预。

假脱机没有专门的外围设备,它使用单独的系统进程模拟外围设备,因此称为假脱机。用户进程将任务提交给专门的系统进程(如打印机进程)来处理。

 

通过一个具体的例子,来看看虚拟化是如何实现的:

操作系统为打印机提供一个专门的进程,称为打印机守护进程,不妨称为d进程。只有d进程拥有使用打印机的权利。

操作系统维护一个打印机消息队列。想要使用打印机的进程,提交一个打印机请求,放入到该消息队列中进行排队。

进程提交了请求以后,就可以继续往下面执行其他逻辑了,可以使用回调函数得知打印执行结果。

d进程负责处理消息队列中的打印任务。当消息队列为空时,则陷入阻塞状态,直到出现新的打印任务。

 

我们可以看到,消息的处理速度是比较慢的,同时一次只能处理一条消息,所以我们没有必要将整个消息队列都放入内存中。

因此,我们将不用的数据,暂时放入硬盘中。内存中只保留一条消息。

 

posted @ 2021-05-19 23:49  tchj  阅读(546)  评论(0编辑  收藏  举报