SPOOLing 技术(假脱机技术)

5.1.1 提到设备有”虚拟设备”这一类,这一节就是造出虚拟设备的那项技术。

它要解决的问题很具体:打印机是独占设备,一个进程占着它,其余进程只能干等——而打印一份文件可能要几分钟,这几分钟里打印机的利用率是 100%,但整个系统的推进几乎停滞。

机制

从脱机技术到假脱机

SPOOLing 的名字来自”Simultaneous Peripheral Operations On-Line”,中文译为”假脱机技术”,要理解它必须先知道”脱机”是什么。

脱机技术是早期的做法:用一台专门的外围控制机,把数据从低速的输入设备(如纸带机)预先送到高速的磁带上;主机运行时直接从磁带读,不必迁就纸带机的速度。“脱机”指的是这个搬运过程脱离主机进行。

SPOOLing 则是用软件模拟这一整套流程——用磁盘代替磁带,用两个系统进程代替那台外围控制机。因为不再有真正的外围控制机,所以称为”假脱机”。

组成

① 输入井和输出井——在磁盘上开辟的两块存储空间。输入井模拟脱机输入时的磁带,收容 I/O 设备输入的数据;输出井模拟脱机输出时的磁带,收容用户程序的输出数据。

② 输入缓冲区和输出缓冲区——在内存中开辟的两个缓冲区,用于暂存数据,以缓和 CPU 与磁盘之间的速度差。

③ 输入进程和输出进程——用两个进程模拟脱机时的那台外围控制机。输入进程负责把数据从输入设备送到输入井,输出进程负责把输出井中的数据送到输出设备。

④ 井管理程序——用于控制作业与输入井、输出井之间的数据交换。

打印一份文件时实际发生了什么

用户进程请求打印时,SPOOLing 系统并不真的把打印机分给它,而是做两件事:

① 在输出井中为它申请一块空闲的磁盘区,把要打印的数据送进去。

② 在输出队列中挂上一张请求打印表。

做完这两件事,用户进程就可以继续运行了——从它的角度看,“打印”这个操作瞬间就完成了。

真正的打印由输出进程在后台慢慢完成:它每次从输出队列取出一张请求表,把对应的数据从输出井送到打印机,打完一个再取下一个。

这就是 SPOOLing 的全部戏法:用磁盘上的一块空间,冒充了那台打印机。

三个特点

① 提高了 I/O 速度。 对用户进程而言,把数据写到磁盘上的输出井,远快于直接驱动打印机。

② 将独占设备改造为共享设备。 打印机物理上仍然一次只能打一份,但每个进程都能立刻”用上”它——因为它们实际拿到的是各自的一块输出井。

③ 实现了虚拟设备功能。 多个进程同时感觉自己独占了一台打印机,而系统里其实只有一台。

边界

用户进程实际分配到的是什么

疑问点:SPOOLing 系统中用户进程实际分配到的对象

  1. 在 SPOOLing 系统中,用户进程实际分配到的是( )。 A. 用户所要求的外设 B. 外存区,即虚拟设备 C. 设备的一部分存储区 D. 设备的一部分空间

答案 B。

这是理解 SPOOLing 的关键一问:用户进程从头到尾没有碰过那台打印机,它拿到的是输出井中的一块磁盘空间——即外存区,也就是逻辑上的虚拟设备。

C 和 D 说的是”设备的存储区/空间”,方向就错了:输出井在磁盘上,不在打印机上。A 更是直接错:真正的打印机由输出进程在后台使用,用户进程从未直接持有。

SPOOLing 并没有消灭独占设备

疑问点:关于 SPOOLing 的不正确叙述

  1. 下面关于 SPOOLing 的叙述中,不正确的是( )。 A. SPOOLing 系统中不需要独占设备 B. SPOOLing 系统加快了作业执行的速度 C. SPOOLing 系统使独占设备变成共享设备 D. SPOOLing 系统提高了独占设备的利用率

答案 A。

SPOOLing 做的是”逻辑上把独占设备改造成可共享的虚拟设备”,而不是”不再需要独占设备”。 那台物理打印机依然存在,也依然一次只能打印一个任务——SPOOLing 只是把”排队等打印机”这件事,从用户进程阻塞等待,变成了数据在输出井里排队。

B、C、D 都是它的正确效果:作业提交输出后即可继续推进(B);独占设备逻辑上变成共享(C);打印机不再有”等用户进程慢慢生成数据”的空闲期,利用率提高(D)。

提高单机资源利用率的关键技术不是 SPOOLing

疑问点:提高单机资源利用率的关键技术

  1. 提高单机资源利用率的关键技术是( )。 A. SPOOLing 技术 B. 虚拟技术 C. 交换技术 D. 多道程序设计技术

答案 D。 这道题的陷阱在于**“资源”的范围**。

SPOOLing 提高的是某一类设备(独占设备)的利用率,是局部的;虚拟技术、交换技术同样只针对某一种资源。

题干问的是”单机资源利用率”,指的是整机的 CPU、内存、I/O 设备全体。 让这三者同时忙起来的根本手段,是**多道程序设计**——一个进程等 I/O 时,CPU 转去执行另一个进程,三类资源才能重叠工作。

更值得注意的是因果方向:SPOOLing、虚拟技术、交换技术全都建立在多道程序设计之上。没有多道程序,SPOOLing 那两个后台进程根本无处运行。选一项”其余三项都依赖它”的技术,正是这道题想考的层次感。

SPOOLing 的软件组成

疑问点:SPOOLing 系统的组成

  1. 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 是软件技术(对照:通道是硬件)

链接