为了缓和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. PHP unset() 函数

    unset() 函数用于销毁给定的变量.高佣联盟 www.cgewang.com PHP 版本要求: PHP 4, PHP 5, PHP 7 语法 void unset ( mixed $var [, ...

  2. luogu P5161 WD与数列 SAM 线段树合并 启发式合并

    LINK:WD与数列 这道题可谓妙绝 我明白了一个增量统计的原理. 原本的想法是:差分之后 显然长度为1的单独统计 长度为2的以及更多就是字符串之间的匹配问题了. 对差分序列建立SAM 由于第一个是一 ...

  3. Android运行时注入浅析与使用

    背景 最近接触新项目,项目中引入了Android Annotation(AA)依赖注入开源框架,代码中大片的注解代码,对于没用过注解框架(或者说没有如此大面积的使用)的我来说确实看得很费力,于是花时间 ...

  4. Spring Cloud及微服务简介

    最近在看微服务编排的东西,看到一篇入门博客,私以为不错,再次分享下:https://blog.csdn.net/w05980598/article/details/79007194 什么是微服务 微服 ...

  5. [转]Post和Get的区别

    作者:zhanglinblog     来源:https://urlify.cn/FnYBbu 这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以 ...

  6. C 语言学习 --2

    memset Declaration: void *memset(void *str, int c, size_t n); Copies the character c (an unsigned ch ...

  7. Spring bean作用范围

    1,singleton Spring ioc 容器中仅有一个 Bean 实例,Bean 以单例的方式存在:2,prototype 每次从容器中调用 Bean 时,都返回一个新的实例:3,request ...

  8. 使用pytorch快速搭建神经网络实现二分类任务(包含示例)

    使用pytorch快速搭建神经网络实现二分类任务(包含示例) Introduce 上一篇学习笔记介绍了不使用pytorch包装好的神经网络框架实现logistic回归模型,并且根据autograd实现 ...

  9. 《JAVA并发编程的艺术》学习笔记

    第一章:并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制.时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通 ...

  10. 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?

    写在前面 [Spring专题]停更一个多月,期间在更新其他专题的内容,不少小伙伴纷纷留言说:冰河,你[Spring专题]是不是停更了啊!其实并没有停更,只是中途有很多小伙伴留言说急需学习一些知识技能, ...