为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入、输出技术。该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。
事实上,当系统中引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘上传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入、输出功能。
此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing,或称为假脱机操作。
通过SPOOLing技术可将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享一台物理I/O设备。
SPOOLing技术是对脱机输入、输出系统的模拟。相应地,SPOOLing系统必须建立在具有多道程序功能的操作系统上,而且还应有高速随机外存(通常是磁盘)的支持。
 
SPOOLing系统主要有以下三部分:
  • 输入井和输出井。
这是在磁盘上开辟的两个大存储空间。用高速的磁盘设备来模拟慢速的字符设备,缩短进程在内存中的驻留时间。
井是用作缓冲的存储区域:输入井是模拟脱机输入时的慢速设备,用于暂存I/O设备输入的数据;输出井是模拟脱机输出时的慢速设备,用于暂存用户程序的输出数据。
井管理程序:控制作业和井之间的数据交换(实际上是I/O重定向)
输入输出井中的数据一般以文件的形式组织管理,这些文件称之为井文件。
井文件空间被划分为等长的物理块,每块用于存放一条或多条逻辑记录。可采用两种方式存放作业的数据信息:
(1)链接方式:输入/输出信息被组织成输入/输出队列链接文件,文件的第一块位置登记在输入表/输出表中。数据可以不连续存放,文件空间利用率高。
(2)计算方式:直接计算出文件在磁盘中的位置
  • 输入缓冲区和输出缓冲区。
为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
  • 输入进程SPi和输出进程SPo
这里利用两个进程来模拟脱机I/O时的外围控制机。
预输入程序的进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,不必再启动输入设备,直接从输入井读入内存;
缓输出程序的进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。
进程运行过程中只从输入井读入数据,只向输出井输出数据,使得全部I/O都基于磁盘,以加快进程周转,提高系统吞吐量。这样不仅设备利用率提高,作业的运行时间也会缩短,每个作业都感觉各自拥有所需的独占设备。
   
SPOOLing技术使用示例:
  • 使用一类物理设备来模拟另一种物理设备,如内存卡模拟磁盘、块设备模拟字符设备、输入输出重定向
  • 打印机SPOOLing守护进程
打印机是经常要用到的输出设备,属于独占设备。如果用户进程通过打开打印机的设备文件来申请和使用打印机,往往会造成该进程打开设备文件后长达数小时不用,但其他进程又无法使用打印机。
利用SPOOLing技术,可将之改造为一台可供多个用户共享的设备,从而提高设备的利用率,也方便了用户。共享打印机技术已被广泛地用于多用户系统和局域网中。当用户进程请求打印输出时,SPOOLing系统同意为它打印输出,但并不真正立即把打印机分配给该用户进程,而只为它做两件事:
1)由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中。即,打印文件前,用户进程先产生完整的待输出文件,并存放在SPOOL打印目录下。
2)输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上。如果还有进程要求打印输出,系统仍可接受该请求,也同样为该进程做上述两件事。
打印机守护进程是唯一有特权使用打印机设备的进程,如果打印机空闲,启动守护进程,打印待输出文件。此时输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据从输出井传送到内存缓冲区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列中是否还有等待打印的请求表。若有,又取出队列中的第一张表,并根据其中的要求进行打印,如此下去,直至请求打印队列为空,输出进程才将自己阻塞起来。仅当下次再有打印请求时,输出进程才被唤醒。
  • 网络通信SPOOLing守护进程
在网上传输文件常使用SPOOLing守护进程,发送文件之前现将其放在特定的网络SPOOLing目录下,后由网络通信守护进程将其取出并发送出去。
这种文件传送方式的用途之一是因特网电子邮件系统,用户使用类似send的程序接收所要发送的信件并将其送入固定的电子邮件SPOOL目录下等待以后发送,整个电子邮件系统在操作系统之外作为一种应用程序运行。
 

 
在多道批处理系统中,我们把对一个作业的加工处理过程抽象成作业管理的过程,
作业说明语言:一种作业控制语言,用户通过它描述对一个作业具体的加工处理方式。这种加工处理方式被抽象为作业说明书。
作业说明书:刻画具体作业的控制方式。作业说明书和代码数据一起提交给操作系统,构成作业。
系统拥有一张作业表用来登记进入系统的所有作业的JCB,包括:作业名、作业状态、预输入表位置、缓输出表位置。
预输入表、缓输出表用来登记作业各输入输出文件的情况,包括设备类、文件名、信息长度、存放位置
作业在其生命周期中处于四个状态,可通过作业表的状态项指示:输入状态(预输入)、收容状态(空闲)、执行状态(可以从输入井读数据或向输出井写数据)、完成状态(缓输出)
当一个作业建立之后,首先进入输入状态,SPOOLing系统的预输入程序将控制作业预输入相关信息进入输入井。
预输入完成后作业进入收容状态,进入后备状态的作业具备了构成进程进行运行的条件。此时要通过作业调度程序进行选择,从完成了预输入的收容状态作业中,选择作业进入执行状态运行,构成进程(前提是资源充足)。作业调度算法包括优先数、短作业、响应比、设备搭配等。
执行时通过井管理程序,直接与输入井输出井交互,完成进程的执行。
作业进程结束时,数据有可能还没有完全输入到慢速的输出设备上,缓输出程序可以控制完成状态的作业实现输出从而完成整个作业。

操作系统-I/O(3)SPOOLing技术的更多相关文章

  1. 转 SPOOLING技术——操作系统

    传送门 SPOOLING技术——操作系统 SPOOLING技术(Simultaneous Peripheral Operating On Line) 同时联机外围操作技术,它是关于慢速字符设备如何与计 ...

  2. Spooling技术

    转自https://blog.csdn.net/weixin_42229896/article/details/80736517   假脱机的概念 SPOOLing技术:利用高速共享设备(通常是磁鼓或 ...

  3. 操作系统IO之零拷贝技术

    磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝.直接 I/O.异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统 ...

  4. UDP代码编写、操作系统发展史、多道技术、进程理论与代码层面创建、进程join方法与进程对象方法

    昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...

  5. 3、网络并发编程--udp代码、操作系统发展史、多道技术、进程理论

    昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...

  6. [转].NET程序在windows操作系统上独立运行的技术要点

    发现一个不错的网站,转载一篇文章方便查看 转自 http://www.linuxdot.net/bbsfile-3354   ===================================== ...

  7. ******十三 ******、软设笔记【操作系统】-磁盘管理、虚设备与SPOOLing系统

    五.磁盘管理 1.磁盘的访问时间 *寻道时间Ts:把磁臂从当前位置移到指定磁道上所经历的时间 *选择延迟时间Tr:指定扇区移动到磁头下面所经历的时间. *传输时间Tt:数据从磁盘读出或向磁盘写入数据所 ...

  8. 转载文章——从HelloWorld学习操作系统

    转载地址:https://my.oschina.net/hosee/blog/673628?p=%7b%7bcurrentPage+1%7d%7d 本文就将系统性的串联起那些知识点,方便复习和回顾.本 ...

  9. 找工作---操作系统常考知识点总结【PB】

    1.进程是并发过程中程序的执行过程 2.进程的特征:结构特征.动态性.并发性.独立性.异步性 3.临界区指在每个进程中访问临界资源的那段代码 4,现在操作系统中申请资源的基本单位是进程,在CPU得到执 ...

随机推荐

  1. 3. 懂了这些,方敢在简历上说会用Jackson写JSON

    你必须非常努力,才能看起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  2. Python核心编程(第3版)PDF高清晰完整中文版|网盘链接附提取码下载|

    一.书籍简介<Python核心编程(第3版)>是经典畅销图书<Python核心编程(第二版)>的全新升级版本.<Python核心编程(第3版)>总共分为3部分.第1 ...

  3. python入门神书!|python编程从入门到实践|内附网盘链接带提取码|

    点击此处进入网盘下载地址 提取码:o39n 全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 —— 游戏.数据可视化和 Web 应用程序,同时掌握让 ...

  4. matplotlib绘制子图

    fig,subs = plt.subplots(2,2) subs[0][0].plot(data_math_C1) subs[0][0].set_title('C_1 曲线') subs[0][1] ...

  5. python小题目汇总

    1.编程计算两个日期之间的天数与周数 Python时间处理---dateutil模块: dateutil模块主要有两个函数,parser和rrule. 其中parser是根据字符串解析成datetim ...

  6. PHP checkdate() 函数

    ------------恢复内容开始------------ 实例 检查一些日期是否是有效的格利高里日期: <?phpvar_dump(checkdate(12,31,-400));echo & ...

  7. PHP __construct() 函数

    实例 函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容:高佣联盟 www.cgewang.com <?php $note=<<<XML ...

  8. 4.17 斐波那契数列 K维斐波那契数列 矩阵乘法 构造

    一道矩阵乘法的神题 早上的时候我开挂了 想了2h想出来了. 关于这道题我推了很多矩阵 最终推出两个核心矩阵 发现这两个矩阵放在一起做快速幂就行了. 当k==1时 显然的矩阵乘法 多开一个位置维护前缀和 ...

  9. 使用idea 时出现classnotfound

    如果是web项目,而且确定包在.. 不用担心,点开Project structure 在artifacts 选择就好了..双击就可以  包就进lib下了

  10. vue中模块局部刷新

    父组件: 一. 父组件中引入子组件           data中定义变量 二. 定义provide函数 三.写reload方法 需要刷新的那个子组件: 一.引入                   ...