什么是脱机技术?
在学习假脱机技术前,我们首先要知道什么是脱机技术。
在很久以前,我们通过输入设备直接往主机输入数据。但是输入设备输入数据的速度远慢于CPU处理的速度,这就使得CPU资源被浪费。
于是人们又找了一个“中介”来处理CPU和I/O设备之间速度不匹配的矛盾。他们把输入输出的工作交给外围机来直接管理,外围机接收到数据后再存放到高速磁盘/磁带中,CPU从磁盘磁带中读取数据,这使得CPU效率明显提升。
因为这个输入和输出的过程是由外围机直接负责的,而不是主机。所以该输入/输出方式脱离了主机,就叫做脱机技术。
脱机输入
脱机输出
什么是假脱机技术
为什么假脱机比真脱机更好?
假脱机技术就是通过软件来模拟脱机输入和脱机输出的技术。它有什么优势呢?
在使用脱机技术的时候,用外围机直接接收用户输入的数据。既然它是实体的机器,那么它必然要受到使用环境、自身重量、数量和体积的限制。假如有很多很多输入设备,那么对应的就要有很多很多外围机,这显然是不合理的。
只要我们将实体机器虚拟化,就能摆脱上述问题的限制,将IO效率提升一个大台阶,所以假脱机技术应运而生。
注意:
在进行假脱机输入/输出的时候,输入输出设备物理上确实是直接连接主机的,但在逻辑上是脱离主机的,所以就叫做假脱机技术。
这一点必须要搞清楚,不然就会陷入迷茫。
接下来我们就正式开始学习假脱机技术:
SPOOLing的意思是同时外设联机操作(Simultaneous Peripheral Operation On-Line),又称为假脱机输入/输出操作。SPOOLing技术是用软件的方式实现了数据的预输入和缓输出。
我们用并发执行的进程模拟外围机,逻辑上如下图所示。
可能会有小伙伴会问:假如有n个进程做外围机,那么岂不是得买n块硬盘才能满足要求吗?
其实这些硬盘都是逻辑上独立的硬盘,在物理上就是一整块硬盘中的不同磁盘块。不过在脱机技术时代甚至更早的时候,确实是一个外围机对应一个磁盘,然而这已经成了历史,不重要了。
但是假脱机也是一个非常古老的技术了,相比现在的异步IO模式可以说是毫无优点了,这是后话。
SPOOLing系统的组成
- 系统在磁盘开辟两个空间,一个输入井,一个输出井。
- 输入井是模拟脱机输入时的磁盘,收容从输入设备输入的这些IO数据
- 输出井是模拟脱机输出时的磁盘,收容用户进程输出的数据
- 系统在内存中开辟了两个缓冲区,一个输入缓冲区、一个输出缓冲区。
- 输入缓冲区用于暂存由输入设备传递过来的数据,然后再传到输入井。
- 输出缓冲区用于暂存由输出设备传递过来的数据,然后再传到输出井。
- 输入进程和输出进程
- 输入进程模拟脱机输入时的外围控制机。
- 输出进程模拟脱机输出时的外围控制机。
SPOOLing技术的典型实例:共享打印机