终于搞懂了狗日的SPOOLing技术

SPOOLing和虚拟化

什么是虚拟化

虚拟化就是无中生有,就是暗度陈仓(狗头保命)。仔细观察整个计算机系统的设计,到处都体现着虚拟化的技术。当然虚拟化就是操作系统设计的要求之一。我们很好理解 CPU 的虚拟化技术,也就是通过进程调度实现多道程序的功能。在“无知的我”看来计算机不止一块CPU呀,因为我可以在打 LOL 的时候和队友 YY语音聊天;也可以在钉钉上网课的同时在 B站看电影!好像我开了几个进程就有几块CPU一样但是实际上我的电脑还真就仅有一块 CPU。是不是感觉被自己的电脑欺骗了~~~当然,除了 CPU 的进程调度外还有一大堆的虚拟化技术,例如虚拟内存技术在逻辑上扩充了内存的空间,虚拟文件系统技术等等。

说了这么些,我就是想表明别看 SPOOLing 看上去那么高大上(我都看不懂这个英文啥个意思),无非也就是个空手套白狼的家伙,无非就是虚拟化技术的一种罢了。

SPOOLing技术

SPOOLing 技术是用于将 IO 设备进行虚拟化的技术,这个技术可不像 CPU 的虚拟化能欺骗我们人类,它是专门用于欺骗进程的。就拿打印机举栗吧,我就买了一台打印机,但此时我打开了 word 和 pdf,想要打印 word 和 pdf 中的内容;此时计算机中有2个进程,word 进程和 pdf 进程,这两个进程都认为自己拥有一个打印机,那么是否此时我作为计算机的主人就拥有2台打印机了呢?当然不是啊,我又不是睁眼瞎,我就看到了一台打印机啊~~~这就是通过虚拟化技术欺骗了2个无知的进程。

具体的实现

道理我都懂,那么怎么实现欺骗进程的目的呢(也就是怎么实现SPOOLing技术呢)?

  1. SPOOLing 技术首先需要提供统一的调用接口,每一个进程都可以调用该接口,这样在进程看了自己是拥有该设备的。
  2. 需要将磁盘设备和内存作为缓冲区,磁盘设备上的缓冲区称作,而内存上的缓存区被称作缓冲区
  3. 需要一个专门的输入输出进程来实现对 I/O 设备的读写数据。

以向 I/O 设备写数据为例子,做出概念图,如下所示:

首先某一个进程(例如 word)调用了统一的接口,然后进入内核。内核例程负责将 word 想要打印的内容做成一个打印申请表,将这个申请表放入打印输出队列中(这个队列在输出井中)。然后由输出进程从打印队列中取打印申请表,根据表格内容将用户数据从磁盘中取出放入内存输出缓冲区,然后再输出到 I/O 设备中。输出进程会不断的查看打印输出队列,直到队列为空,则输出进程被阻塞。

这篇随笔是我自己阅读了网上关于SPOOLing技术的相关文章后,消化理解的一些浅显的概念。如果有错误的地方请不吝指出,也欢迎大家一起探讨!

原文地址:https://www.cnblogs.com/Codroc/p/12841295.html