SPOOLing 技术(假脱机技术)
5.1.1 提到设备有”虚拟设备”这一类,这一节就是造出虚拟设备的那项技术。
它要解决的问题很具体:打印机是独占设备,一个进程占着它,其余进程只能干等——而打印一份文件可能要几分钟,这几分钟里打印机的利用率是 100%,但整个系统的推进几乎停滞。
机制
从脱机技术到假脱机
SPOOLing 的名字来自”Simultaneous Peripheral Operations On-Line”,中文译为”假脱机技术”,要理解它必须先知道”脱机”是什么。
脱机技术是早期的做法:用一台专门的外围控制机,把数据从低速的输入设备(如纸带机)预先送到高速的磁带上;主机运行时直接从磁带读,不必迁就纸带机的速度。“脱机”指的是这个搬运过程脱离主机进行。
SPOOLing 则是用软件模拟这一整套流程——用磁盘代替磁带,用两个系统进程代替那台外围控制机。因为不再有真正的外围控制机,所以称为”假脱机”。
组成
① 输入井和输出井——在磁盘上开辟的两块存储空间。输入井模拟脱机输入时的磁带,收容 I/O 设备输入的数据;输出井模拟脱机输出时的磁带,收容用户程序的输出数据。
② 输入缓冲区和输出缓冲区——在内存中开辟的两个缓冲区,用于暂存数据,以缓和 CPU 与磁盘之间的速度差。
③ 输入进程和输出进程——用两个进程模拟脱机时的那台外围控制机。输入进程负责把数据从输入设备送到输入井,输出进程负责把输出井中的数据送到输出设备。
④ 井管理程序——用于控制作业与输入井、输出井之间的数据交换。

打印一份文件时实际发生了什么
用户进程请求打印时,SPOOLing 系统并不真的把打印机分给它,而是做两件事:
① 在输出井中为它申请一块空闲的磁盘区,把要打印的数据送进去。
② 在输出队列中挂上一张请求打印表。
做完这两件事,用户进程就可以继续运行了——从它的角度看,“打印”这个操作瞬间就完成了。
真正的打印由输出进程在后台慢慢完成:它每次从输出队列取出一张请求表,把对应的数据从输出井送到打印机,打完一个再取下一个。
这就是 SPOOLing 的全部戏法:用磁盘上的一块空间,冒充了那台打印机。
三个特点
① 提高了 I/O 速度。 对用户进程而言,把数据写到磁盘上的输出井,远快于直接驱动打印机。
② 将独占设备改造为共享设备。 打印机物理上仍然一次只能打一份,但每个进程都能立刻”用上”它——因为它们实际拿到的是各自的一块输出井。
③ 实现了虚拟设备功能。 多个进程同时感觉自己独占了一台打印机,而系统里其实只有一台。
边界
用户进程实际分配到的是什么
疑问点:SPOOLing 系统中用户进程实际分配到的对象
- 在 SPOOLing 系统中,用户进程实际分配到的是( )。 A. 用户所要求的外设 B. 外存区,即虚拟设备 C. 设备的一部分存储区 D. 设备的一部分空间
答案 B。
这是理解 SPOOLing 的关键一问:用户进程从头到尾没有碰过那台打印机,它拿到的是输出井中的一块磁盘空间——即外存区,也就是逻辑上的虚拟设备。
C 和 D 说的是”设备的存储区/空间”,方向就错了:输出井在磁盘上,不在打印机上。A 更是直接错:真正的打印机由输出进程在后台使用,用户进程从未直接持有。
SPOOLing 并没有消灭独占设备
疑问点:关于 SPOOLing 的不正确叙述
- 下面关于 SPOOLing 的叙述中,不正确的是( )。 A. SPOOLing 系统中不需要独占设备 B. SPOOLing 系统加快了作业执行的速度 C. SPOOLing 系统使独占设备变成共享设备 D. SPOOLing 系统提高了独占设备的利用率
答案 A。
SPOOLing 做的是”逻辑上把独占设备改造成可共享的虚拟设备”,而不是”不再需要独占设备”。 那台物理打印机依然存在,也依然一次只能打印一个任务——SPOOLing 只是把”排队等打印机”这件事,从用户进程阻塞等待,变成了数据在输出井里排队。
B、C、D 都是它的正确效果:作业提交输出后即可继续推进(B);独占设备逻辑上变成共享(C);打印机不再有”等用户进程慢慢生成数据”的空闲期,利用率提高(D)。
提高单机资源利用率的关键技术不是 SPOOLing
疑问点:提高单机资源利用率的关键技术
- 提高单机资源利用率的关键技术是( )。 A. SPOOLing 技术 B. 虚拟技术 C. 交换技术 D. 多道程序设计技术
答案 D。 这道题的陷阱在于**“资源”的范围**。
SPOOLing 提高的是某一类设备(独占设备)的利用率,是局部的;虚拟技术、交换技术同样只针对某一种资源。
题干问的是”单机资源利用率”,指的是整机的 CPU、内存、I/O 设备全体。 让这三者同时忙起来的根本手段,是**多道程序设计**——一个进程等 I/O 时,CPU 转去执行另一个进程,三类资源才能重叠工作。
更值得注意的是因果方向:SPOOLing、虚拟技术、交换技术全都建立在多道程序设计之上。没有多道程序,SPOOLing 那两个后台进程根本无处运行。选一项”其余三项都依赖它”的技术,正是这道题想考的层次感。
SPOOLing 的软件组成
疑问点:SPOOLing 系统的组成
- SPOOLing 系统由( )组成。 A. 预输入程序、井管理程序和缓输出程序 B. 预输入程序、井管理程序和井管理输出程序 C. 输入程序、井管理程序和输出程序 D. 预输入程序、井管理程序和输出程序
答案 A。
三个名字各自对应一个阶段:“预输入”指的是在作业真正运行之前就把数据预先读进输入井(“预”字正是脱机思想的体现);“井管理”负责作业与输入井、输出井之间的数据交换;“缓输出”指的是输出数据先在输出井里缓着,之后再慢慢送到设备。
B、C、D 的干扰都在于漏掉了”预”或”缓”这两个字,而这两个字恰恰是 SPOOLing 区别于普通输入输出的地方。
现代系统里的 SPOOLing
疑问点:SPOOLing 在现代操作系统中的对应技术
现代操作系统中使用的是什么技术,日常使用中几乎察觉不到。
察觉不到,恰恰是因为它一直在工作。
现代操作系统中的打印队列就是 SPOOLing 的直接延续——Windows 里那个负责打印的系统服务,名字直接就叫 Print Spooler。点击打印后对话框立刻消失、程序马上可以继续用,而打印机还要再响半分钟,这中间的落差正是输出井造成的。
排队、暂停、取消、调整打印顺序这些功能之所以存在,也是因为数据在输出井里而不在打印机里——数据还没送出去,当然可以撤回。
这个例子同时说明了 SPOOLing 的本质:它把一次”同步的、独占的”操作,变成了”异步的、排队的”操作。 凡是”提交后立刻返回、后台慢慢做”的设计,都是同一个思路。
对照速查
| SPOOLing 的四个组成 | 位置 | 模拟的是 |
|---|---|---|
| 输入井 / 输出井 | 磁盘 | 脱机时的磁带 |
| 输入缓冲区 / 输出缓冲区 | 内存 | 缓和速度差 |
| 输入进程 / 输出进程 | 系统进程 | 脱机时的外围控制机 |
| 井管理程序 | 系统程序 | 控制作业与井之间的数据交换 |
| 软件组成(选择题口径) | |
|---|---|
| 预输入程序(“预”= 运行前先读进输入井) | |
| 井管理程序 | |
| 缓输出程序(“缓”= 先在输出井缓着) |
| 三个特点 | |
|---|---|
| ① | 提高了 I/O 速度(写磁盘远快于驱动设备) |
| ② | 将独占设备改造为共享设备 |
| ③ | 实现了虚拟设备功能 |
| 常考判断 | 结论 |
|---|---|
| 用户进程实际分到什么 | 外存区(虚拟设备),不是真设备 |
| SPOOLing 系统还需要独占设备吗 | 需要,物理设备依然存在 |
| 提高单机资源利用率的关键技术 | 多道程序设计,不是 SPOOLing |
| SPOOLing 是硬件还是软件 | 软件 |
考点
- “假脱机”的”假”指用软件模拟脱机:磁盘代磁带、进程代外围控制机
- 四个组成,注意井在磁盘上、缓冲区在内存中
- 软件组成是预输入程序、井管理程序、缓输出程序(“预”与”缓”是题眼)
- 用户进程实际分配到的是外存区(虚拟设备)
- SPOOLing 不消灭独占设备,只是逻辑上把它改造成共享设备
- 提高单机资源利用率的关键技术是多道程序设计——其余三项都依赖它
- SPOOLing 是软件技术(对照:通道是硬件)
链接
- 🏠 返回总览:操作系统第 5 章:输入/输出管理总览
- ⬅️ 上一节:5.2.3 设备分配与回收
- ➡️ 下一节:5.2.5 设备驱动程序接口
- 🔗 三类设备的划分,见 5.1.1 I/O 设备
- 📖 名词库:第 5 章名词库