operating system(操作系统)之输入/输出管理

输入/输出管理 即I/O管理,也就是设备管理,我们主要掌握I/O设备的基本特性,I/O子系统的特性,三种I/O控制方式,高速缓存和缓冲区以及SPOOLing技术。

一、I/O管理概述

1、I/O设备

在理解设备管理之前我们先来了解具体的I/O设备类型。

分别按照使用特性、传输速率、信息交换的单位三种方法进行分类

  1. 按使用特性划分:
    ——人机交互类外部设备:以字节作为数据交换单位,速率相对较慢,比如打印机、鼠标、键盘等
    ——存储设备:以多字节组成 的 数据块作为数据交换单位,速度较快,比如光盘、磁盘等
    ——网络通信设备:速度介于人机交互类外部设备和存储设备之间,用于远程设备通信的设备,比如调制解调器,网络接口等

  2. 按传输速率分:低速(键盘、鼠标)、中速(打印机)、高速(磁盘)

  3. 按信息交换的单位分 :
    ——块设备,比如磁盘,其特征是速度高,可寻地址,可以随机读写任意一块
    ——字符设备,比如打印机,不可寻地址,速度低,I/O时采用中断驱动方式

2、I/O控制方式

设备管理的主要任务之一就是控制设备和内存或处理机之间的数据传送。其控制方式有四种,如下:
1. 程序直接控制

计算机从外部设备读取数据到存储器,每次读一个字的数据。CPU在这种方式下绝大部分时间都处在等待I/O设备完成数据I/O的循环检查检查中,效率低。

2. 中断驱动

允许I/O设备主动打断CPU的运行并请求服务,就可以在向I/O控制器发送读命令后可以去继续做其他有用的工作。但是,由于数据中每个字在存储器与I/O控制器之间的传输都要经过CPU,仍会耗费较多CPU时间。

3. DMA(直接存储器存取)

CPU接收DMA请求,给I/O控制器发送命令,待传送完成后DMA控制器发送中断信号给CPU

特点:——基本单位是数据块
——数据是设备与内存直接传送
——仅在传送一个或多个数据块开始或者结束的时候,CPU干预,整块数据的传送是在DMA控制器下完成的

与中断驱动方式的主要区别是在所要传送的一批数据结束时才中断CPU,中断处理实在DMA控制器的控制下完成的

4. 通道控制

I/O通道是指专门负责输入/输出的处理机,通道与CPU共享主机内存。
是DMA的改进,与DMA的区别是DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而在通道方式中这些是由通道控制。

3. I/O子系统的层次结构
I/O系统划分为四个层次的系统结构,各层次的及功能如下:

  1. 用户层 I/O软件:实现与用户交互的接口

  2. 设备独立性软件:实现用户程序与设备驱动器的统一接口、设备命令、设备保护及设备分配与释放

  3. 设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令

  4. 中断处理程序:用于处理中断的相关事宜

  5. 硬件设备:包括一个机械部件(设备本身)和一个电子部件(控制器)
    电子部件——设备控制器必须包括设备控制器与CPU的接口(数据线、地址线、控制线)、设备控制器与设备的接口(每个接口存在数据、控制、状态三种信号)、I/O控制逻辑(用于实现对设备的控制)

通过以用户对 设备的一次命令举例记忆各层及功能:

当用户要读取某设备的内容的时候,通过操作系统提供的read命令接口,这就经过了用户层

操作系统提供给用户使用的 接口,一般是统一的通用接口,也就是几乎每个设备都可以响应的统一命令,如 read 命令,用户发出的 read命令,首先经过设备独立层进行解析,然后再交往下层;

接下来,不同类型的设备,对 read 命令的行为会有所不同,如磁盘接收 read 命令后的行为,与打印机接收 read 命令后的行为是不同的。因此,需要针对不同的设备,把read 命令解析成不同的指令,这就经过了设备驱动层

命令解析完成后,需要中断正在执行的进程,转而执行 read 命令,这就需要中断处理程序

最后,命令真正抵达到硬件设备,硬件设备的控制器按照上层传达的命令操控硬件设备完成相应的功能。

二、I/O核心子系统

I/O子系统提供的服务主要有:I/O调度、缓冲与高速缓存、设备回收与分配、SPOOLing(假脱机)、设备保护和差错处理

1. I/O调度

I//O调度确定一个好的顺序来执行这些I/O请求。目的是改善系统整体性能,使进程之间公平的 共享设备访问 ,减少I/O完成所需要的平均等待时间。
I/O调度的一种就是磁盘调度算法,有:
——先来先服务算法
——最短寻找时间优先算法
——扫描算法(电梯算法)
——循环算法

2. 缓冲(buffer)与高速缓存 (cache)

引入缓冲区的目的:
1)缓和CPU和I/O设备间速度不匹配的矛盾
2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制
3)解决基本数据单元大小(即数据粒度)不匹配的问题
4)提高CPU和I/O设备之间的并行 性

实现方法有:
1)硬件缓冲器,成本过高
2)缓冲区(位于内存)

缓冲区的特点:缓冲区只有在空才能充入数据,只有在满才能取出数据

缓冲技术根据系统设置缓冲器个数分为单缓冲和双缓冲

单缓冲:在设备和处理机之间设置一个缓冲区。
双缓冲:设置两个缓冲区,先装缓冲区1,装满了再装缓冲区2,与此同时CPU可从缓冲区1中取数据

接下来我们来对比一下两种技术的每块数据的处理时间,研究方法:假设一种初始状态,然后计算下一次到达相同状态时所需要的时间。

假设从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区的数据传送到用户区的时间为M,而CPU对这一块数据处理的时间为C。

单缓冲,假设初始状态为:工作区是满的,缓冲区是空的。一般认为缓冲区的大小等于工作区,单缓冲处理每块数据用时为Max(C,T)+M

双缓冲,假设初始状态为工作区是是空的,其中一个缓冲区是满的,若M+C<T,可以使块设备连续输入,若M+C>T,则可使CPU不必等待设备输入。双缓冲区处理一块数据用时为Max(C+M,T)。

如果两太机器之间通信仅配置了单缓冲,那么他们在任一时刻只能单方向数据传输;为了实现双向数据传输,必须在两台机器中都设置两个缓冲区,一个做发送,一个做接收。

循环缓冲: 包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲形成一个环形。循环缓冲还有两个用于输入/输出的指针in/out。in指针指向可以输入数据的第一个空缓冲 去,out指针指向第一个可以提取数据的满缓冲区。

缓冲池:缓冲池可以分成三个队列:空缓冲队列、装满输入数据的缓冲队列(输入队列)和装满输出数据的缓冲队列(输出队列)。从这三个队列中的缓冲区在工作时进行入队和出队操作,构成四种缓冲区:分别用于收容输入数据提取输入数据收容输出数据提取输出数据的工作缓冲区。队列遵循先进先出的原则,共同完成数据的输入与输出。

高速缓存是可以保存数据拷贝的高速存储器,访问高数缓存比访问原始数据更快、更高效。

高速缓存与缓冲区的对比如下表:

相同点 都是介于高速设备和低速设备之间
区别1 (存放数据) cache存放的是低速设备上的某些数据的复制数据 ;buffer存放的是低速设备传给高速设备的数据(或者相反),而这些数据在低速或者高速设备上却不一定有备份
区别2(目的) cache存放的是高速设备经常要访问的数据,如果高速设备要访问的数据不在cache中,高速设备就要访问低速设备;buffer是高速设备与低速设备通信的必经之地,高速设备永远不会直接访问低速设备

3. 设备回收与分配

设备分配是指根据用火的I/O请求分配所需的设备,总原则是充分发挥设备的使用效率,避免造成进程死锁,还要将用户和具体设备隔离开。

设备按使用方式不同分为以下三种 :
——独占式设备:独占式使用
——共享式设备:分时式共享使用
——虚拟设备:SPOOLing方式使用,SPOOLing技术实质上是一种以空间换时间的技术 。

设备分配所依靠的数据结构主要有设备控制表(DCT)、控制器控制表(COCY)、通道控制表(CHCT)和系统控制表(SDT)
一个设备控制表(DCT)就表征一个设备,每个设备分为负责解析上层传达的命令并控制机械部件运作的电子部件(控制器)和机器部件,每个DCT都有一个指向COCT的指针(表项),DCT与COCT一一对应;
现代操作系统的I/O控制都采用通道控制方式,每个COCT必定有一个表项存放指向相应的通道控制表(CHCT)的指针(表项),而CHCT必定有一个指针指向一个表达CHCT提供服务的那几个设备控制器,CHCT与COCT是一对多的关系;
系统设备表是被记录系统中所有设备的表,整个系统只有一种SDT。

设备分配的策略(或算法): 分为静态分配方式和动态分配方式两种
——静态分配方式主要用于独占设备的分配,作业开始前由系统一次性分配(串行分配);
——动态分配方式是进程需要设备时,由系统调用命令向系统提出设备请求,由系统按事先规定的策略给进程分配所需的设备、I/O控制器,而且一旦用完,立即释放,常常用于共享设备上。常见的动态分配算法有1.先请求先分配、2.优先级高者优先分配。

设备分配的安全性: 是指设备分配中应防止进程死锁
——安全分配方式:每当进程发出I/O请求后进程便进去阻塞状态,直到其I/O操作完成时才被唤醒。优点是安全,缺点是 对同一进程而言CPU和I/O设备是串行工作 的
——不安全分配方式:发出一个请求后进程还能继续运行,继而发出后续请求,仅当进程请求的设备被占用时才进入阻塞状态。优点是一个进程可同时操作多个设备,使进程推进迅速,缺点是可能死锁

设备的独立性: 是指应用程序独立于具体使用的物理设备。
在系统中设置一张逻辑设备表(LUT),用于将逻辑设备名映射成物理设备名。
建立方式:整个系统只设置一张LUT或为每个用户设置一张LUT

4. SPOOLing(假脱机)

SPOOLing是指外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中一项独占设备改造成共享设备的技术。

SPOOLing系统由磁盘上用于收容数据的输入井和收容输出数据的输出井、内存上暂存输入数据的输入缓冲区和暂存输出数据的输出缓冲区输入进程输出进程组成。

——输入进程将用户要求的数据从输入设备通过输入缓冲区再送到输入井,当CPU需要输入数据是直接将数据从输入井读入内存;
——输出进程将用户要求的数据先从内存送到输出井,待输出设备空闲时再将输出井中的数据经过输出缓冲区送到输出设备。

共享打印就是使用SPOOLing技术的一个实例

原来的打印机工作时,CPU要向打印机输出要打印的数据,打印机打印速度比较慢,CPU就必须迁就打印机,在打印机把数据打印完毕后才能继续 做其他工作,浪费了CPU的不少时间,而在SPOOLing技术下,CPU要打印机打印的的数据可以先输出到次磁盘的输出井(由输出进程控制),然后做其他事,打印机如果此时被占用,那么SPOOLing系统就会把这个请求挂到等待队列上,待打印机空闲再将数据打印出来,向磁盘输出数据的速度比向打印机输出数据的速度快,节省了时间,牺牲了磁盘开辟的空间。

猜你喜欢

转载自blog.csdn.net/qq_42415326/article/details/89355513