为了缓和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. SpringBoot集成Dubbo+Zookeeper

    目录 Spring版本 dubbo_zookeeper负责定义接口 dubbo_provider 服务提供者 dubbo_consumer服务使用者 Spring版本 不知道为啥,新创建的Spring ...

  2. 了不起的Node.js 5/16

    Chapter 1 安装 1.Node.js的设计理念之一,只维护较少量的依赖,这使得安装node.js变得非常简单. 2.执行文件console.log没问题,但是node执行http静态服务器的时 ...

  3. CSS两列布局的N种实现

    一.什么是两列布局 两列布局分为两种,一种是左侧定宽.右侧自适应,另一种是两列都自适应(即左侧宽度由子元素决定,右侧补齐剩余空间).在CSS面试题里面属于常考题,也是一个前端开发工程师必须掌握的技能, ...

  4. PHP fstat() 函数

    定义和用法 fstat() 函数返回关于一个打开的文件的信息. 该函数将返回一个包含下列元素的数组: [0] 或 [dev] - 设备编号 [1] 或 [ino] - inode 编号 [2] 或 [ ...

  5. Phantomjs实现后端生成图片文件

    目录 PhantomJS简介 了解rasterize.js 使用方法 今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 ...

  6. Hadoop生态系统入门进阶之一

    组成系统介绍 HDFS:Hadoop 生态圈的基本组成部分是 Hadoop 分布式文件系统(HDFS).HDFS 是一种分布式文件系统,数据被保存在计算机集群上,HDFS 为 HBase 等工具提供了 ...

  7. SQL语句:在两个数据库间复制表结构和数据数据库

    一.如果两个数据库在同一台服务器上 1.复制表结构和数据:SELECT * INTO DatabaseB.dbo.TableB FROM DatabaseA.dbo.TableA 2.仅仅复制表结构: ...

  8. Java 通过Jna调用dll路径问题

    调试阶段 C++ dll --> window/system32C# dll --> C:\Program Files\Java\jdk1.8.0_171\bin [jdk bin] 打包 ...

  9. JS DOM操作案例

    显示隐藏表单文本内容 <input type="text" value="手机"> var text = document.querySelecto ...

  10. Pytorch_第九篇_神经网络中常用的激活函数

    神经网络中常用的激活函数 Introduce 理论上神经网络能够拟合任意线性函数,其中主要的一个因素是使用了非线性激活函数(因为如果每一层都是线性变换,那有啥用啊,始终能够拟合的都是线性函数啊).本文 ...