1
第 7章 I/O设备管理
本章知识点:
?7.1 I/O系统硬件
?7.2 I/O软件
?7.3 磁盘调度
?7.4 系统举例
2
7.1 I/O系统硬件
在计算机系统中,使用了许多 I/O设备,它们的
特点和操作方式不完全一样。但是,所有的 I/O
设备都是通过设备管理程序来管理的。设备管
理是计算机操作系统中最繁杂且与硬件紧密相
关的部分。
要把大量的 I/O设备精减成一个单一模块的 I/O
系统,必须全面地适应已有设备的需求,这些
设备包括从简单的鼠标到键盘、打印机、图形
显示终端、硬盘驱动器,CD-ROM驱动器,以
至于网络等,同时也必须考虑到未来的存储和
输入 /输出技术的发展。
3
7.1.1 I/O设备
计算机所管理的 I/O外部设备按输入输出
对象的不同可以分为以下 3类:
? ① 用户可读设备,用于用户与计算机通
信。
? ② 机器可读设备,用于电子装置与计算
机通信。
? ③ 通信设备,用于与远程设备通信。
4
7.1.1 I/O设备
所有这些设备其属性和类别有很大的区别,其
主要的区别在于:
? ① 数据传输速度。
? ② 应用。
? ③ 控制的复杂性。
? ④ 信息组织方式。
? ⑤ 数据描述。
? ⑥ 错误条件。
5
7.1.2 设备控制器
? I/O设备一般由机械和电子两部分组成,
通常将这两部分分开处理,以提供更加
模块化、更加通用的设计。
? 电子部分称作设备控制器或适配器
(Device Controller或 Adapter)。
? 机械部分就是设备本身,控制器通过电
缆与设备内部相连。
6
7.1.2 设备控制器
设备控制器的主要作用有:
? ① 接收和识别 CPU发来的多种不同命令;
? ② 实现 CPU与控制之间、控制器和设备
之间的数据交换;
? ③ 记录和报告设备的状态。
? ④ 地址识别。识别控制器控制的每个设
备的地址。
7
7.1.2 设备控制器
? 设备控制器的组成:
数据寄存器
控制 / 状态
寄存器
控制器
与设备
接口 l
控制器
与设备
接口 i
数据
状态
控制
地址线
控制线
数据线
C PU 与控制器接口 控制器与设备接口
I / O
逻辑

数据
状态
控制

8
7.1.3 I/O技术
1,I/O技术简介
目前,操作系统中的 I/O技术大致有以下
3种:
? (1) 程序 I/O
? (2) 中断驱动 I/O
? (3) 直接存储器存储 (DMA)
9
7.1.3 I/O技术
随着计算机系统的发展,单个部件也越来越复
杂。最明显的例子就是 I/O技术的发展。
? ① 处理器直接控制边缘设备。
? ② 增加一个控制器或 I/O模块。
? ③ 使用了如阶段②的设置,但增加了中断。
? ④ I/O模块通过 DMA直接控制内存。
? ⑤ I/O模块由一个单独处理器处理,有专门用
于 I/O的指令集。
? ⑥ I/O模块有本地存储器,事实上,有其自己
的计算机。
10
7.1.3 I/O技术
2,DMA
DMA是一种优于中断方式的 I/O控制方式,其
特点为:数据传输的基本单位是数据块,即
CPU与 I/O设备之间,每次至少传送一个数据块;
所传送的数据是从设备直接送入内存的,或者
相反;仅在传送一个或多个数据块的开始和结
束时,向 CPU发中断信号,请求 CPU干预,整
块数据的传送是在控制器的控制下完成的。
11
7.1.3 I/O技术
? DMA控制器组成,
12
7.1.3 I/O技术
3,I/O通道
计算机中设计了一个专门负责外设 I/O的
处理器,置于 CPU和设备控制器之间,
称这个 I/O处理器为 I/O通道。
设计目的是:建立独立的 I/O操作,使数
据的传送独立于 CPU,并尽量使有关 I/O
操作的组织、管理及结束也独立,以保
证 CPU有更多时间进行数据处理。
13
7.1.3 I/O技术
? I/O通道是 DMA方式的发展,它的程序是
由通道指令组成的,称为通道程序。 I/O
处理器和 CPU共享主存储器。
? 在微型计算机中,其 I/O处理器并不完全
具有前述 I/O通道的所有功能,因此,就
称为 I/O处理器。
14
7.1.3 I/O技术
? 在大型计算机中常有多个 I/O通道,而在一般的
微型计算机中则可以配置 1--2个 I/O处理器 (或更
多 )。
? 这些 I/O处理器和中央处理器共享主存储器和总
线 (微型机中采用总线结构 ),在大型机中就可
能出现几条通道和中央处理器同时争相访问主
存储器的情况。为此给通道和中央处理器规定
了不同的优先次序。
15
7.1.3 I/O技术
? 通道通过执行通道程序,并与设备控制
器一起共同实现对 I/O设备的控制。
? 通道程序是由一系列的通道指令 (或称为
通道命令 )所构成。通道指令和一般的机
器指令不同,在它的每条指令中通常包
含下列信息:操作码,内存地址,计数,
通道程序结束位 P,记录结束标志 R。
16
7.1.3 I/O技术
一般 I/O通道有 3种类型:
? (1)字节多路通道
? (2) 数组选择通道
? (3) 数组多路通道
I/O通道方式的发展,既可进一步减少
CPU的干预,又可实现 CPU、通道和
I/O设备 3者的并行工作,从而更有效地
提高了整个系统的资源利用率。
17
7.2 I/O软件
I/O软件的总体目标是,按分层的思想构造软件,
较低层的软件要使较高层的软件独立于硬件,
较高层的软件则要向用户提供一个友好、规范、
清晰的界面。 I/O软件设计的具体目标是:
? ① 设备独立性。
? ② 统一命名。
? ③ 同步 /异步传输。
? ④ 出错处理。
? ⑤ 设备共享与独占。
18
7.2 I/O软件
根据 I/O软件的设计目标,将 I/O软件组织
成以下 4个层次:
? (1)中断处理程序 ;
? (2)设备驱动程序 ;
? (3)与设备无关的操作系统软件 ;
? (4)用户层软件。
19
7.2.1 中断处理程序
在现代计算机系统中,对 I/O设备的控制,
广泛采用中断驱动 (Interrupt-driven)方式,
即当某进程要启动某个 I/O设备工作时,
便由 CPU向相应的设备控制器发出一条
I/O命令,然后立即返回继续执行原来的
任务。设备控制器便按照该命令的要求
去控制 I/O设备,此时,CPU与 I/O设备并
行操作。
20
7.2.1 中断处理程序
无论是哪种 I/O设备,其中断处理程序的
处理基本相同,其步骤为:
? ① 唤醒被阻塞的驱动进程。
? ② 保护被中断进程的 CPU环境。
? ③ 分析中断原因,转入相应的中断处理
程序。
? ④ 进行中断处理。
? ⑤ 恢复现场。
21
7.2.2 设备驱动程序
所有与设备相关的代码放在设备驱动程
序中。它是 I/O进程与设备控制器之间的
通信程序,因为它常以进程的形式存在,
故也可以称为设备驱动进程。由于驱动
程序与设备硬件密切相关,故应为每一
类设备配置一种驱动程序,或为一类密
切相关的设备配置一个驱动程序。
22
7.2.2 设备驱动程序
1.设备驱动程序的功能
? ① 将接收到的来自它上一层的与设备无关的抽象请求
转为具体请求。
? ② 检查用户 I/O请求的合法性,了解 I/O设备的状态,
传递有关参数、设置设备的工作方式。
? ③ 发出 I/O命令,启动分配到的 I/O设备,完成指定的
I/O操作。
? ④ 及时响应控制器或通道发来的中断请求,并调用相
应的中断处理程序处理。
? ⑤ 对于有通道的计算机系统,驱动程序还应能根据用
户 I/O请求构成通道程序。
23
7.2.2 设备驱动程序
2,设备驱动程序的处理过程
? 一般地说,设备驱动程序的任务是接收来自它
上面一层的与设备无关软件的请求,并执行这
个请求。
? 一个典型的请求是“读第 n块”,如果请求到
来时驱动程序是空闲的,则立即开始执行该请
求;若驱动程序正在执行一个请求,则将新到
来的请求插到一个等待处理 I/O请求队列中。
24
7.2.3 与设备无关的 I/O软件
? 大部分 I/O软件是与设备无关的,设备驱动程序
与设备独立软件之间的确切界限依赖于具体系
统,因为对于一些本来应按照设备独立方式实
现的功能,出于效率和其他原因,实际上还是
由设备驱动来实现的。
? 与设备无关软件层通常应实现的功能为:设备
驱动程序的统一接口、设备命名、提供一个与
设备无关的块大小、缓冲、块设备的存储分配、
分配和释放独占设备、错误报告等。
25
7.2.3 与设备无关的 I/O软件
? 与设备无关的 I/O软件系统称为 I/O子系统。
? I/O子系统执行着与设备无关的操作。
? 同时 I/O子系统为用户应用程序提供一个
统一的接口。
下面讨论 I/O子系统所需完成的主要功能。
26
7.2.3 与设备无关的 I/O软件
1,设备命名
? 与设备无关的软件 (即 I/O子系统 )负责把设备的
符号名映射到相应的设备驱动程序。
? 设备命名后,所有设备的名字的集合称做设备
的名字空间。
? UNIX系列有 3种不同的名字空间。
– (1) 主次设备号
– (2) 内部号与外部号
– (3) 设备文件与路径名
27
7.2.3 与设备无关的 I/O软件
2,设备保护
? 与设备命名机制密切相关的是设备保护。
? 在大多数大型计算机系统中,用户进程
对 I/O设备的访问是完全禁止的。
28
7.2.3 与设备无关的 I/O软件
3,与设备无关的块及存储设备的块分配
? 不同的磁盘可以采用不同的扇区尺寸,
与设备无关软件的一个任务是向较高层
软件屏蔽并给上一层提供大小统一的块
尺寸 。
29
7.2.3 与设备无关的 I/O软件
4,设备分配
一些设备,如磁盘驱动器,在任一时刻
只能被单个进程使用。
因此,操作系统需要对设备使用请求进
行检查,并根据申请设备的可用状况决
定是接收该请求还是拒绝该请求。
30
7.2.3 与设备无关的 I/O软件
5,出错处理
出错处理是由设备驱动程序完成的。大
多数错误是与设备密切相关的,因此,
只有驱动程序知道应如何处理 (是重试、
忽略,还是报警 )。
31
7.2.4 用户空间的 I/O软件
? 虽然大部分 I/O软件都包合在 OS内核之中,但也
有一小部分 I/O软件是由与用户程序连接在一起
的库过程构成,它们可能完全运行在 OS之外。
例如,下列一个 C程序调用了 write库过程,并包
含在运行时的二进制程序代码中:
count=write(fd,buffer,nbytes);
显然,write库过程是 I/O系统的组成部分。
? 上面描述的是第一类用户空间 I/O软件,第二类
用户空间 I/O软件为 spooling(simultaneous
peripheral operation on line)系统,即假脱机系统。
spooling系统是多道程序设计系统中处理独占 I/O
设备的一种方法。
32
7.2.4 用户空间的 I/O软件
spooling系统的作用如下:
? (1) 实现了虚拟设备功能
? (2) 将独占型设备变成共享设备
? (3) 提高了 I/O效率
33
7.2.5 缓冲技术
系统为达到如下目的需要使用缓冲技术:
? (1) 缓和 CPU与 I/O设备间速度不匹配的矛盾
? (2) 减少 CPU的中断频率,放宽对中断响应
的限制
? (3) 提高 CPU和 I/O设备之间的并行性
34
7.2.5 缓冲技术
? 根据系统设置的缓冲区的个数,可以把
缓冲技术分为单缓冲、双缓冲和循环缓
冲以及缓冲池几种。
用户进程 操作系统
传送 输入
I /O 设备
单缓冲
35
双缓冲
多缓冲
传送
用户进程 操作系统
输入
I / O 设备
传送 输入
I / O 设备
用户进程 操作系统
7.2.5 缓冲技术
36
7.2.5 缓冲技术
1.单缓冲
? 单缓冲是 OS提供的一种最简单的缓冲。当用户
进程发出一个 I/O请求时,OS便在主存中分配
一个缓冲区。
? 对于单缓冲,缓冲区属于临界资源,即不允许
多个进程同时对一个缓冲区进行操作。因此,
单缓冲虽然能匹配设备和 CPU的处理速度,但
无法实现设备与设备之间的并行操作。
37
7.2.5 缓冲技术
2,双缓冲
? 双缓冲提供两个缓冲区。
? 但双缓冲只是一种说明设备与设备、
CPU与设备并行操作的简单模型,并不
能用于实际系统中的并行操作。
38
7.2.5 缓冲技术
3,循环缓冲
? 由于双缓冲并不能真正解决实际系统中的并行
操作,于是引入了多缓冲。通过增加缓冲区的
个数,可使并行程度得到明显提高。
? 多缓冲是把多个缓冲区连接起来组成两部分:
一部分专门用于输入;另一部分专门用于输出。
循环缓冲包括以下两部分。
– (1) 多个缓冲区
– (2) 多个指针
39
7.2.5 缓冲技术
4,缓冲池
上述的循环缓冲区仅适用于某特定的 I/O进程和计算进
程,因而属于专用缓冲。为了提高缓冲区的利用率,
目前广泛流行公用缓冲池,池中的缓冲区可供多个进
程共享。
? (1) 缓冲池的结构
相同类型的缓冲区链成一个队列,于是可形成以下 3个
队列:
– ① 空缓冲队列 emq。
– ② 输入队列 inq。
– ③ 输出队列 outg。
40
7.2.5 缓冲技术
缓冲池中的工作缓冲区,
h i n 缓冲区 l Si n 缓冲区 m
s o u t 缓冲区 n hout 缓冲区 k
提取输入
收容输出
C PU
收容输入
提取输出
I / O 设备
41
7.2.5 缓冲技术
? (2) 缓冲池的管理
一般,管理缓冲池的步骤如下:
– ① take-buf(type):从 3种缓冲区队列中按一定的规则
取出一个缓冲区。
– ② add-buf(type,number):把缓冲区按一定的规则插入
相应的缓冲队列。
– ③ get-buf(type,number):申请缓冲区。
– ④ put-buf(type,work-buf):将缓冲区放入相应缓冲区
队列。
其中,type为缓冲队列类型,number为缓冲区号,
work-buf为工作缓冲区类型。
42
7.3 磁盘调度
近 30年来,处理器和主存速度的增加远
远把磁盘抛在了后面。因为磁盘的相对
低速,使得磁盘子系统的性能变得至关
重要,许多人也在积极探索提高磁盘子
系统性能的方法,改进调度策略,降低
查找时间。
43
7.3.1 调度策略
? 磁盘调度策略有很多,常见的有随机调度、先
进先出、进程优先级、后进先出等。
1,先进先服务策略( FCFS)
? 顾名思义,它是将各进程对磁盘请求的等待队
列按提出请求的时间进行排序,并按此次序给
予服务的一种策略。
? 这个策略对各进程是公平的,它不管进程优先
级多高,只要是新来到的访问请求,都被排在
队尾。
44
7.3.1 调度策略
2.最短服务时间优先策略( SSTF)
? 这是将请求队列中柱面号最接近于磁头当前所
在柱面的访问要求,作为一个服务对象的一种
策略。
3.扫描策略
? 扫描策略( SCAN)也叫电梯策略 (Elevator
Algorithm)。大多数电梯保持按一个方向移动,
直到没有请求为止,然后改变方向。
45
7.3.1 调度策略
4,循环扫描策略( CSCAN)
? 对 SCAN算法稍作改进可以进一步减少响
应时间。方法是:总是按同一方向移动
磁臂,处理完最高编号柱面上的请求后,
磁臂移动到具有读 /写请求的最低编号的
柱面,然后继续向上移动。
46
7.3.1 调度策略
? 磁盘调度策略很多,各有利弊。如何选择相应
调度策略与磁盘的使用环境因素有关。
? 磁盘调度的另一个趋势是使多个磁盘 (磁盘阵列 )
一起工作,特别对高端系统很有用。廉价冗余
磁盘陈列 (Redundant Array of Inexpensive Disks,
简称 RAID) 的特点是:
– ① RAID是一个物理磁盘集合,但被 OS认为是一个
逻辑盘。
– ② 数据分布存放在不同磁盘上。
– ③ 具有较强的纠错能力。
47
7.3.2 磁盘高速缓存
? Cache存储器是在主存和处理器之间插入的一
个更快、更小但更昂贵的存储器,其作用是减
少主存的平均存取时间。同样的原理也可应用
到磁盘存储器。
? 关于磁盘 Cache,有几个设计问题值得说明。
– (1) Cache中的数据传送
当一个 I/O请求能由 Cache提供服务时,Cache中的数
据必须传送到请求进程中。有两种方法传送数据:
一是通过共享存储器将数据所在的指针传送到请求
进程;二是传送 Cache中的数据到用户进程的存储
空间中。
48
7.3.2 磁盘高速缓存
– (2) Cache中数据的替换策略
当一个新的扇区装入 Cache中时,一个原先
在 Cache中的扇区数据必须替换出去。经常
使用的算法是最近最少使用算法 (Least
Recently Used,LRU)。 Cache中没有被使用
时间最长的那个块将被替换。
替换 Cache中最少被访问的块的算法是最少
使用算法 (Least Frequently Used,LFU)。
49
7.3.2 磁盘高速缓存
有必要在考虑最近最久未使用这一原则的
同时,注意到以下三点内容:
? ① 访问频率。通常,联想存储器的访问频率远
高于高速缓存的访问频率。
? ② 可预见性。预见哪些内容在不久将来会再次
被访问,哪些则可能很久都不再被访问。
? ③ 数据一致性。必须保持高速缓存、内存和磁
盘间数据的一致性。
基于以上的考虑,提出了一个新的技术 —
—基频率的替换 (Frequency- Based
Replacement)。
50
7.3.2 磁盘高速缓存
– (3) Cache的失效率
一般而言,在同样的替换策略下,Cache越
大,失效率越少。因此,必须设计好 Cache
的大小和替换策略,减少失效率。
51
The end
Thanks!