SPOOLing技术
在手工操作阶段,主机直接从I/O设备获取数据,但是由于设备速度很慢,主机速度很快。人机速度矛盾明显,主机需要浪费很多时间来等待设备。
-
什么是脱机技术,脱机技术可以解决什么问题?
所谓脱机技术,就是脱离主机的控制进行的输入输出操作。
-
缓解慢速设备与主机间的速度矛盾。批处理阶段引入了脱机技术(用磁带完成),在设备和主机之间引入了外围控制机和磁带。在外围控制机的控制下,慢速设备的数据会预先被写入到更快速的磁带上,之后主机就可以从快速的磁带上读取数据,从而缓解了慢速输入输出设备和主机之间的速度矛盾。
-
提高CPU利用率。即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。
-
-
假脱机技术
-
SPOOLing技术的核心思想
将数据生成和数据处理之间的依赖关系解耦(脱机),使得它们可以独立进行。这种解耦(脱机)使得系统能够更灵活地处理任务,提高了效率和响应能力,同时减少了对资源的竞争
-
实现原理
假脱机技术又称为SPOOLing技术,SPOOLing技术只是借鉴了脱机技术的异步思想,千万不要将两者混在一起去思考。SPOOLing组成可以参考下图:
-
输入进程和输出进程
输入进程和输出进程来模拟脱机技术的外围控制机。
-
输入缓冲区和输出缓冲区
输入缓冲区:是输入进程用来暂存输入数据的缓冲区。有的同学可能会有疑问,输入进程直接将数据放在输入井不就行了,多一个输入缓冲区不是多此一举吗?其实并不是这样的,因为如果输入设备频繁的输入处理起来很耗时但只是占用几个字节的数据或指令,那输出进程每次在输入后都要去进行磁盘I/O的话,这样也会增加很多开销的。但如果有了输入缓冲区的话,就会减少I/O次数,从而减少时间开销。
输出缓冲区:输出进程将数据从输出井取出后会暂存到此缓冲区。输出缓冲区的作用同样也是为了减少磁盘的I/O。
-
输入井和输出井
输入井:用于存放输入数据的空间。
输出井:用于存放输入数据的空间。
-
-
应用场景
-
当输入设备频繁的输入处理起来复杂但不需要及时响应的数据或指令时,输入进程可以将这些数据或指令先放在输入井中。比如现在输入设备是商品扫码枪,当出库员扫码后会进行扣减库存,生成出库单据等数据信息,而生成这些数据往往是比较耗时的。但是如果采用SPOOLing技术的话,扫码枪只需要确定将商品码通过输入进程存储到数据井后就可以继续扫描了。至于扣减库存、生成出库单据等动作,CPU只需要逐个从输入井中获取商品信息来完成,同时这样也防止了对CPU资源的竞争。
-
像一些分布式的场景,比如输入设备输入处理复杂、量级非常大但不需要及时响应的数据时,根据SPOOLing技术可以设计微服务解决方案:搭建输入服务对接输入设备,搭建存储服务器A用来存储输入数据,搭建计算服务来处理和计算数据,搭建存储服务器B用来存储输出数据,搭建输出服务将数据从存储服务器B输出到设备。
-
-
-
共享打印机的原理分析。
这是个经典案例,所以抽出来记录一下。打印机大家都接触过,这个设备肯定是一个独享式的设备,因为一旦共享,不同用户间的打印内容可能就会掺杂在一起。但是我们可以使用SPOOLing技术将打印机变成一个在用户看来是共享的设备。
目前市面上的很多打印机都是有嵌入打印系统的。如果没有嵌入打印系统的话,就需要单独的一台PC或服务器来运行打印系统,然后线缆连接到打印机上了,其实和嵌入打印系统是一样的。在这里只考虑有嵌入打印系统的打印机。
在企业中,我们只需要将PC连接到打印机上,然后打开文档点击打印,PC会将打印任务提交到打印机系统。打印机系统会处理以下三件事情:
-
在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将打印任务要打印的数据送入其中。
-
为打印任务申请一张空白的打印请求表,并将打印请求填入表中(其实就是用来说明打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。
-
当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务。
-