第六章 I/O设备管理
I/O系统的组成
I/O系统不仅包括 各种I/O设备,还包括与设备相连的 设备控制器,有些系统还配备了专门用于输入/输出控制的专用计算机(通道),此外:I/O系统要通过总线与CPU、内存相连。
I/O系统的结构
I/O系统的结构分为两大类:
- 微机I/O系统;
- 主机I/O系统;
微机I/O系统
CPU与内存之间可以直接进行信息交换,但是 不能直接与设备进行信息交换,必须经过 设备控制器。
主机I/O系统
主机I/O系统采用四级结构,包括:主机、通道、设备控制器和设备。
一个通道可以控制多个设备控制器。
一个设备控制器可以控制多个设备。
I/O设备的分类
- 按传输速率分类:
- 低速设备:鼠标、键盘
- 中速设备:打印机
- 高速设备:磁盘机、磁带机、光盘机
- 按信息交换单位分类:
- 块设备:磁盘
- 字符设备:打印机
- 按设备的共享属性分类:
- 独占设备:必须作为临界资源以 互斥形式访问,如:打印机
- 共享设备:允许 多个进程共同访问 的设备,如:磁盘
- 虚拟设备:通过 虚拟技术 把一台物理设备变成若干逻辑的设备
设备控制器
设备控制器是 CPU与I/O设备之间的接口,接收I/O命令并 控制设备 完成I/O工作。
设备控制器是一个 可编址设备,链接多个设备时可有多个设备地址。
设备控制器的功能
- 接收和识别命令;
- 数据交换:通过 数据寄存器 进行数据交换;
- 设备状态的了解和报告;
- 地址识别;
- 数据缓冲;
- 差错控制;
设备控制器的组成
- 设备控制器与处理机的接口:
- 数据线;
- 地址线;
- 控制线;
- 设备控制器与设备的接口,接口中的3类信号为;
- 数据;
- 状态;
- 控制信号;
- I/O逻辑,主要由两部分构成:
- 指令译码器;
- 地址译码器;
I/O通道
一种特殊的处理机,它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作。
大型主机系统中 专门用于I/O的专用计算机。
引入通道能够使CPU从控制I/O操作的任务中解脱,使 CPU与I/O并行工作,提高CPU利用率和系统吞吐量。
I/O控制方式
目的:尽量 减少 主机对输入/输出控制的 干预,提高 主机与输入/输出的 并行程度。
- 轮询控制方式:早期;
- 中断控制方式:引入中断机制后;
- DMA控制方式:提高输入输出性能;
- 通道控制方式:使输入/输出更大程度地独立于主机CPU;
轮询控制方式
工作流程:
- 主机试图发送I/O控制命令之前,先通过 反复检测设备控制器状态寄存器的忙/闲标志位;
- 若设备“忙”,主机继续检测该标志位;
- 直到设备“空闲”,主机发送I/O指令;
缺点:
使CPU经常处于 循环检测状态,造成 CPU的极大浪费,影响整个进程的 吞吐量。
中断控制方式
现在计算机系统广泛采用中断控制方式完成对I/O控制。
工作流程:
- CPU执行过程中,发出输入/输出请求;
- 若此时I/O设备不忙,则向设备控制器发出I/O指令;
- 若此时I/O设备忙,则进程阻塞等待;
- 当处于“忙”状态的设备工作完毕,通过中断控制器发出中断请求信号;
- CPU响应中断,执行对应该设备的中断处理程序,然后唤醒因等待该设备而被阻塞的进程;
- CPU继续执行这个进程时,向设备控制器发出I/O指令,然后CPU被调度程序分配给某个进程,继续执行某个进程;
- 本次I/O结束后,设备控制器通过CPU发送中断请求信号,告知CPU本次数据传输结束;
优点:
使CPU和I/O设备在某些时间段上 并行工作,提高 CPU利用率 和 系统吞吐量。
DMA控制方式
DMA控制器结构:
- DMA 与主机的接口;
- DMA 与设备的接口;
- I/O控制逻辑;
DMA控制器中的寄存器:
- 命令/状态寄存器,CR:用于接收从CPU发来的 I/O命令或有关控制信息、设备状态;
-
内存地址寄存器,MAR:存放地址;
- 在输出数据时,存放输出数据在内存的起始地址;
- 在输入数据时,存放输出数据将要被放入内存的起始地址;
- 数据寄存器,DR:用于暂存DMA传输中 要输入或输出的数据;
- 数据计数器,DC:指示DMA,本次向CPU发中断信号前要 读或写数据的次数;
工作流程:
- 当CPU要从磁盘读入一个数据块时,就向磁盘控制器发送一条读命令;
- 该命令被送到DMA的命令寄存器CR中,同时CPU将本次读入数据将要放在内存中的地址地址送DMA的MAR寄存器,将本次要读的次数送入DC寄存器;
- 然后启动DMA控制器进行数据传输,在DMA控制传输过程中,CPU可以执行其他的进程,当本次读入的数据全部传输完毕后,DMA向CPU发送中断请求;
缓冲管理
缓冲区是用来 保存两个设备之间或设备与应用程序之间传输数据的内存区域。
由于CPU的速度远远高于I/O设备,为了 尽可能使CPU与设备并行工作,提高系统的性能,通常需要操作系统在设备管理软件中提供缓冲区管理功能。
缓冲的引入
在数据到达速率与数据离去速率不同的地方,都可以引入缓冲区。
引入缓冲的原因:
- 处理数据流的 生产者与消费者之间的速度差异;
- 协调传输 数据大小不一致 的设备;
引入缓冲的主要作用:
- 缓和 CPU与I/O设备之间 速度不匹配 的矛盾;
- 提高 CPU和I/O设备之间 并行性;
单缓冲
最简单 的缓冲类型,在主存储器的系统区中 只设立一个缓冲区。
用户进程发出I/O请求时,操作系统为该操作分配一个位于主存的缓冲区。
双缓冲(缓冲交换)
当一个进程往这一个缓冲区中传输数据(或从这个缓冲区读取数据)时,操作系统正在清空(或填充)另一个缓冲区,这个技术称为双缓冲(Double Buffering),或缓冲交换(Buffering Swapping)。
循环缓冲
在数据到达和数据离去的速度差别很大的情况下,需要增加缓冲区的数量。
多个缓冲区:
- 空缓冲区R;
- 已装满数据的缓冲区G;
- 现行工作缓冲区C;
多个指针:
- Nextg:用于指出 消费者进程下一个可用的装有数据的缓冲区;
- Nexti:用于指出 生产者这进程下一个可用的空缓冲区;
- Current:用于指出进程 正在使用的工作缓冲区;
Getbuf过程:
- 消费者进程要 使用缓冲区数据 时调用;
- 生产者进程要 使用空缓冲区装数据 时调用;
Releasebuf过程:
进程使用完缓冲区后,使用Releasebuf过程 释放缓冲区;
缓冲池
公共缓冲池中设置多个可供若干进程共享的缓冲区,提高缓冲区的利用率。
缓冲池的组成:
- 3种类型的缓冲区:
- 空缓冲区;
- 装满输入数据的缓冲区;
- 装满输出数据的缓冲区;
- 3种缓冲队列:
- 空缓冲队列;
- 输入队列;
- 输出队列;
- 4种工作缓冲区:
- 收容输入数据的缓冲区;
- 提取输入数据的缓冲区;
- 收容输出数据的缓冲区;
- 提取输出数据的缓冲区;
设备分配
设备分配中的数据结构
支持设备分配的数据结构需要记录设备的状态(忙或空闲)、设备类型等基本信息。
- 设备控制表,DCT - Device Control Table
- 控制器控制表:COCT - Controller Control Table
- 通道控制表:CHCT - Channel Control Table
- 系统设备表:SDT - System Device Table
设备控制表
系统为每个设备建立一张设备控制表,多张设备控制构成设备控制表集合。
每张设备控制表,包含:
- 设备类型;
- 设备标识符;
- 设备状态;
控制器控制表
系统为每个控制器设置一张 用于记录该控制器信息 的控制器控制表。通常包含:
- 控制器标识符;
- 控制器状态;
通道控制表
系统为每个通道设备设一张通道控制表,通常包含:
- 通道标识符;
- 通道状态;
系统设备表
记录了 系统中全部设备 的情况,每个设备占一个表目,其中包括:
- 设备类型;
- 设备标识符;
- 设备控制表;
- 设备驱动程序的入口地址;
设备分配的考虑因素
- 设备的固有属性;
- 设备分配算法;
- 设备分配方式;
设备的固有属性
- 独占性:独占设备 - 独享分配策略;
- 共享性:共享设备 - 可同时分配给多个进程使用;
- 可虚拟性:可虚拟设备 - 可同时分配给多个进程使用;
设备的分配算法
- 先来先服务:根据进程对某设备请求的先后顺序分配;
- 基于优先权的分配算法:对高优先权进程所提出的I/O请求也赋予高优先权;
设备分配方式
关键点:是否具备 “请求和保持” 的条件。
- 安全分配方式:发出I/O请求后进入阻塞状态;
- 不安全分配方式:仅当请求的设备被占用,进程才进入阻塞状态;
设备独立性
基本含义:应用程序独立于具体使用的物理设备
应用程序中,使用 逻辑设备名称 来请求使用某类设备。
系统在实际执行时,必须使用 物理设备名称。
实现设备独立性 带来的好处:
- 应用程序与物理设备无关;
- 易于处理输入/输出设别的故障;
- 提高了系统的可靠性,增加了设备分配的灵活性;
设备独立软件的功能:
- 执行所有设备的公有操作,包括:
- 独占设备的分配与回收;
- 使用 逻辑设备表LUT 将逻辑设备名称转换为物理设备名称;
- 对设备进行保护;
- 对用户层软件提供同一的接口;
独占设备的分配程序:
- 分配设备;
- 分配控制器;
- 分配通道;
SPOOLing技术
在多道程序环境下,利用 一道程序 来模拟 脱机输入 时的 外围控制机 的功能,把低速I/O设备上的数据传送到高速输出磁盘上,再利用 另一道程序 来模拟 脱机输出 时 外围控制机 的功能,把数据从磁盘传送到低速输出设备上。
这种在 联机情况下实现的同时外围操作 称为SPOOLing。
SPOOLing的 组成:
- 输入井和输出井;
- 输入缓冲区和输出缓冲区;
- 输入进程SPi和输出进程SPo;
- 请求I/O队列;
利用SPOOLing技术 实现共享打印机:
- 由输出进程在输出井中申请空闲盘区块,并将要打印的数据传入其中;
- 输出进程再为用户申请并填写一张用户请求打印表,将该表放到请求队列上;
SPOOLing的 特点:
- 提高 I/O速度;
- 将 独占 设备改造成 共享 设备;
- 实现了 虚拟设备 功能;
I/O软件管理
I/O软件原理
输入输出软件总体目标是 将软件组织成一种层次结构。
低层软件 用来屏蔽硬件的具体细节。
高层软件 则主要是为用户提供一个简洁、规范的界面。
设备管理的4个层次:
- 用户层软件:向系统发出I/O请求、显示I/O操作的结果、提供用户与设备的接口;
- 与设备无关的软件层:完成设备命名、设备分配、设备独立性和缓冲管理等功能;
- 设备驱动程序:与硬件关系密切,包括:设备服务程序、中断处理程序;
- 中断处理程序(底层);
设备管理软件的功能
- 实现I/O设备的独立性;
- 错误处理;
- 异步传输;
- 缓冲管理;
- 设备的分配和释放;
- 实现I/O控制方式;
中断处理程序的功能
将发出I/O请求而被阻塞的进程唤醒。
设备驱动程序的功能
设备驱动程序是 I/O进程与设备控制器之间的通信程序,其主要任务接受上层软件发来的抽象的I/O请求,如 read
和 write
命令,把它们转换为具体要求后,发送给设备控制器启动设备去执行。
与硬件无关的I/O软件的功能
- 设备命名;
- 设备保护;
- 提供独立于设备的块大小;
- 为块设备和字符设备提供必要的缓冲技术;
- 块设备的存储分配;
- 分配和释放独立设备;
- 错误处理;
磁盘管理
磁盘存储器不仅 容量大,存取速度快,而且可以实现 随机存取,是存放大量程序和数据的理想设备。
磁盘管理的 重要目标:提高磁盘 空间利用率 和磁盘 访问速度。
磁盘结构
一个物理记录存储在一个扇区上,磁盘存储的物理记录数目是由 扇区数、磁道数 及 磁盘面数 决定的。
磁盘类型:
- 固定头磁盘:在每条磁道上都有读/写磁头;
- 活动头磁盘(移动头):每一个盘面仅配有一个磁头;
磁盘访问时间:
- 寻道时间:磁头移动到指定 磁道 所经历的时间;
- 旋转延迟时间:指定 扇区 移动到磁头下面所经历的时间;
- 传输时间:把数据从磁盘读取或向磁盘写入数据时所经历的时间;
花费磁盘访问时间 最长 的是:寻道时间和旋转延迟时间。
磁盘调度
磁盘调度的一个重要目标是 使磁盘的平均寻道时间最少。包括有:
- 先来先服务,First Come First Served, FCFS;
- 最短寻道时间优先,Shortest Seek Time First, SSTF;
- 扫描算法:SCAN;
- 循环扫描算法:CSCAN;
- NStepSCAN和FSCAN调度算法;
先来先服务,FCFS
最简单 的磁盘调度算法。
根据进行 请求访问磁盘的先后顺序 进行调度。
优点:公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况
缺点:平均寻道时间较长
最短寻道时间优先,SSTF
该算法选择的进程:其 要求访问的磁道 与 当前磁头所在的磁道 距离 最近,以使每次的寻道时间最短。
优点:每次的寻道时间最短
缺点:可能导致某个进程发生 饥饿 现象
扫描算法,SCAN
又叫 电梯调度算法,不仅考虑到要访问的磁道与当前磁道的距离,更优先考虑磁头当前的移动方向。
优点:有较好的寻道性能,防止 “饥饿” 现象
缺点:有时候进程请求被大大推迟
循环扫描算法,CSCAN
在扫描算法的基础上,规定磁头是单向移动的。将最小磁道号紧接着最大磁道号构成循环,进行循环扫描。
NStepSCAN和FSCAN调度算法
NStepSCAN:FCFS + SCAN
- 将磁盘请求队列分成 若干个长度为N的子队列;
- 磁盘调度将按 FCFS算法 依次处理这些子队列;
- 每处理一个队列时又是按照 SCAN算法;
- 对一个队列处理后,再处理其他队列;
FSCAN:
- NStepSCAN算法的简化,将磁盘请求队列分成 两个子队列;
- 一个是由当前所有请求磁盘访问的进程形成的队列,由磁盘调度按 SCAN算法 进行处理;
- 将新出现的所有请求磁盘访问的进程,放入另外一个等待处理的请求队列;
提高磁盘I/O速度的方法
- 提前读,减少读数据的时间;
- 延迟写,减少写磁盘的时间;
- 优化物理块的分布,减少磁臂移动距离;
- 虚拟盘,RAM,存放临时文件;
- 磁盘高速缓存,暂存从磁盘中读出的信息;