Spooling的原理

一、脱机技术

程序猿先用纸带机把自己的程序数据输入到磁带中,这个输入的过程是由一台专门的外围控制机实现的。之后CPU直接从快速的磁带中读取想要的这些输入数据。输出也类似。
请添加图片描述

二、假脱机系统的组成和原理

即用软件的方式来模拟脱机技术。要实现Splooling技术必须要有多道程序技术的支持,系统会建立“输入进程”和“输出进程”
请添加图片描述

  • 输入井和输出井:是在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据;输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。输入井/输出井中的数据一般以文件的形式组织管理(称为井文件)。一个文件进存放某一个进程的输入(或输出)数据,所有进程的数据输入(或输出)文件可链接成为一个输入(或输出)队列
  • 输入缓冲区和输出缓冲区:其实这个和spooling技术无关,解决另一个问题的。具体说来,是在内存中开辟的两个缓冲区,用于缓和CPU和磁盘之间速度不匹配的矛盾。输入缓冲区用于暂存由输入设备传送来的数据,之后再将其传送到输入井;输出缓冲区用于暂存从输出井传送来的数据,之后再讲其传送到输出设备。
    • 把这部分去掉其实更有助于理解spooling:即spooling技术就是“输入设备”-“输入井”-“进程”;“进程”-“输出井”-“输出设备”。即通过在磁盘中开辟输入井和输出井来暂存不能立刻进行输入/输出的数据。如使用打印机的进程会先将数据暂存到磁盘,假装已经在使用打印机了,然后就进行后续工作。而处于磁盘输出井的数据等到可以使用打印机了,就会先通过输出缓冲区从磁盘读到内存,然后再从内存的输出缓冲区送给输出设备(输入缓冲区就是先从输入设备读到内存缓冲区,然后再暂存到磁盘的输入井,然后等到真正能用了就从磁盘读到内存(也是需要输入缓冲区),然后送给进程
  • 输入进程和输出进程:输入进程(即预输入进程)用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备传送到输入缓冲区,再存放到输入井。当CPU需要输入数据时,直接从输入井读入内存;输出进程(即缓输出进程),用于模拟脱机输出时的外围控制机,把用户要求输出的数据从内存传送并暂存到输出井,等到输出设备空闲时,再将输出井中的数据井输出缓冲区输出至输出设备(这个过程和上面一样,可联系来看,上面是我在正确理解下写的)
  • 井管理程序:用于控制作业与磁盘井之间信息的交换。当作业执行过程中向某台设备发出启动输入或输出操作请求时,由OS调用井管理程序,由该程序控制从输入井读取信息或将信息输出至输出井。即井管理程序是位于下面的整体过程中后半段的,只是内存中的进程和磁盘井之间的交互管理程序
  • 由下图,整体过程是“设备”-“缓冲区”-“磁盘井”-“缓冲区”-“程序”,将缓冲区这个非本节知识点去掉之后,就是“设备”-“磁盘井”-“程序”
    请添加图片描述

三、假脱机系统的特点

  1. 提高了I/O速度:这里对数据所执行的I/O操作,已从对低速I/O设备执行的I/O操作演变为对磁盘缓冲区中的数据进行的存取操作,如同脱机输入/脱机输出一样,提高了I/O速度,缓和了CPU与低速I/O设备之间速度不匹配的矛盾
  2. 将独占设备改造为共享设备:在假脱机打印机系统中,实际上并没有为任何进程分配设备,而只是在磁盘缓冲区中为进程分配了一个空闲磁盘块和建立了一张I/O请求表。这样,便把独占设备改造成了共享设备
  3. 实现了虚拟设备功能:宏观上,虽然多个进程在同时使用一台独占设备,但对于每个进程而言,它们都会认为自己独占了一个设备。当然,该设备只是逻辑上的设备。假脱机打印机系统实现了将独占设备变换为若干台对应的逻辑设备的功能

举个例子:假脱机打印机系统

请添加图片描述

  1. 假脱机打印机系统主要包含一下三部分:
    • 磁盘缓冲区:是在磁盘上开辟的一个存储空间,用于暂存用户程序的输出数据
    • 打印缓冲区:用于缓和CPU和磁盘之间速度不匹配的问题,设置在内存中,用于暂存从磁盘缓冲区发送来的数据,以后会再传送给打印设备进行打印
    • 假脱机管理进程和假脱机打印进程:由假脱机管理进程为每个要求打印的用户数据建立一个假脱机文件,并把它放入假脱机文件队列中,由假脱机打印进程依次对队列中的文件进行打印
  2. 过程:
    每当用户进程发出打印输出请求时,假脱机打印机系统并不会立即把打印机分配给该用户进程,而是会由假脱机管理进程完成两项任务:1)在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存;2)为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到假脱机文件队列上。

    在这两项工作完成后,虽然还没有进行任何实际的打印输出,但对于用户进程而言,其打印请求已经得到了满足,打印输出任务已经完成。

    真正的打印输出时假脱机打印进程负责的。打印机空闲时,该进程首先从假脱机文件队列的队首摘取一张请求打印表,然后根据表中的内容将要打印的数据由磁盘缓冲区传送到内存缓冲区,再交付打印机进行打印。一个打印任务完成后,假脱机打印进程将会再次查看假脱机文件队列,若队列非空,则重复上述工作,直至队列为空。此后,假脱机打印进程会将自己阻塞起来,仅当再次有打印请求时,其才会被重新唤醒运行。

采用Spooling技术的计算机系统,其实并不需要外围控制机,因为它实际上是建立输入进程来模拟脱机输入时的外围控制机,建立输出进程来模拟脱机输出时的外围控制机的。并不是物理上的外围控制机,而是用软件模拟实现的

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值