文章目录
-
-
- 一、I/O系统的基本功能与目标
- 二、I/O硬件原理
-
- [1. I/O设备的分类](#1. I/O设备的分类)
- [2. I/O控制器(设备控制器)](#2. I/O控制器(设备控制器))
- 三、I/O控制方式:数据传输的四种模式
- 四、I/O软件层次结构
- 五、I/O核心子系统与关键技术
-
- [1. 缓冲技术](#1. 缓冲技术)
- [2. 设备分配与回收](#2. 设备分配与回收)
- [3. SPOOLing技术(假脱机技术)](#3. SPOOLing技术(假脱机技术))
- 六、磁盘调度算法
-
I/O管理
核心目标
隐藏硬件细节
实现设备独立性
提高CPU与I/O并行度
硬件基础
I/O设备分类
块设备
字符设备
I/O控制器
功能与组成
数据传输方式
程序直接控制
中断驱动
DMA
通道控制
软件层次结构
用户层软件
设备独立性软件
设备驱动程序
中断处理程序
关键技术
缓冲技术
设备分配与回收
SPOOLing技术
核心算法
磁盘调度算法
下面,我们将依据这个框架,深入展开每个知识点。
一、I/O系统的基本功能与目标
操作系统管理I/O设备,首要目标是隐藏物理设备的细节 ,向用户提供统一的、抽象的接口(如read/write系统调用),从而简化编程。与之紧密相关的是设备独立性 ,允许用户程序使用逻辑设备名请求I/O,而无需关心具体的物理设备,这极大地提高了操作系统的可移植性和易适应性。
此外,I/O系统还致力于提高处理机和I/O设备的利用率 ,通过让两者并行操作来提升系统整体效率;对I/O设备进行控制 ,选择合适的控制方式(如中断、DMA);并确保对设备的正确共享 (区分独占设备与共享设备)以及进行错误处理。
二、I/O硬件原理
1. I/O设备的分类
I/O设备种类繁多,通常有以下几种分类方式:
- 按信息交换的单位分类 :这是最核心的分类。
- 块设备:数据传输的基本单位是"块"(如磁盘)。特点是可寻址,能随机读写任意一块。
- 字符设备:数据传输的基本单位是"字符"(如键盘、鼠标)。特点是不可寻址,通常采用中断驱动方式。
- 按传输速率分类:分为低速设备(如键盘)、中速设备(如打印机)和高速设备(如磁盘)。
2. I/O控制器(设备控制器)
CPU无法直接控制I/O设备的机械部件,因此需要I/O控制器作为"中介"。其主要功能包括:
- 接受和识别CPU或通道发来的命令。
- 实现数据交换,包括设备与控制器之间、控制器与主存之间的数据传送。
- 标识和报告设备的状态(如忙碌/空闲)。
- 实现地址识别 ,区分控制器中的不同寄存器。
一个I/O控制器可能控制多个设备,其组成通常包括:CPU与控制器接口、I/O逻辑、控制器与设备接口。控制器中的寄存器编址方式有两种:内存映射I/O (寄存器与内存统一编址)和独立编址(使用专用I/O地址空间)。
三、I/O控制方式:数据传输的四种模式
这是本章的重点之一,描述了CPU如何控制数据在内存与I/O设备间传输。其演进过程体现了CPU效率的不断提高。
| 控制方式 | 核心思想 | CPU干预程度 | 数据传输单位 | 主要特点 |
|---|---|---|---|---|
| 程序直接控制方式 | CPU直接查询设备状态,等待操作完成。 | 极高(不断轮询,完全串行) | 字 | 简单但效率极低,CPU利用率差。 |
| 中断驱动方式 | CPU发出命令后转去做其他事,设备完成后通过中断信号通知CPU。 | 中等(响应中断、处理数据) | 字 | 实现了CPU与I/O设备一定程度的并行,但频繁中断开销大。 |
| DMA方式 | 由DMA控制器接管总线,控制数据直接在设备与内存间传输,完成后中断CPU。 | 低(仅开始和结束时参与) | 数据块 | 大大减少了CPU对I/O的干预,适合高速块设备。 |
| 通道控制方式 | 通道是一种专用I/O处理器,执行通道程序来控制多个I/O控制器,完成I/O任务后中断CPU。 | 极低 | 一组数据块 | 独立性最强,CPU干预最少,适合大型系统。 |
💡 核心辨析:中断方式和DMA方式都会产生中断信号,但本质不同。中断方式下,数据仍需通过CPU中转;而DMA方式下,数据在设备和内存间直接传输,CPU几乎不参与数据搬运过程。
四、I/O软件层次结构
I/O软件采用分层结构,自下而上依次为:
- 中断处理程序:I/O系统的最底层,直接与硬件交互。当设备完成操作发来中断信号时,由其进行相应处理,通常包括保存现场、分析中断原因、执行中断服务程序、恢复现场等。
- 设备驱动程序 :与硬件直接相关,是进程和设备控制器之间的通信程序。其主要功能是将上层发来的抽象I/O请求(如读块)转换为对设备控制器的具体命令和参数,并启动设备。每类设备配置一个驱动程序。
- 设备独立性软件 :这是I/O软件的核心层次,负责实现设备独立性 。其功能包括:
- 执行所有设备公有操作:设备分配与回收、逻辑设备名到物理设备名的映射、设备保护、缓冲管理、差错控制等。
- 向用户层提供统一接口:无论何种设备,都提供统一的读写等操作接口。
- 用户层I/O软件:实现与用户交互的接口,用户可直接调用库函数进行I/O操作,这些库函数通过系统调用进入内核。
五、I/O核心子系统与关键技术
1. 缓冲技术
引入缓冲的主要原因是为了缓和CPU与I/O设备速度不匹配的矛盾 ,减少对CPU的中断次数 ,并提高CPU和I/O设备之间的并行性。
- 单缓冲:设备和CPU之间设置一个缓冲区。设备输入时,先把数据写入缓冲区,CPU再从缓冲区取数据。
- 双缓冲:设置两个缓冲区,I/O设备输入数据时,两个缓冲区交替使用,进一步提高了并行度。
- 循环缓冲区:包含多个缓冲区,形成循环队列,适用于I/O操作频繁且数据量较大的情况。
2. 设备分配与回收
对于独占设备,系统需要根据一定的策略进行分配,常见的策略有先来先服务、优先级高者优先等。分配过程中会涉及设备控制表、控制器控制表、通道控制表等数据结构。
3. SPOOLing技术(假脱机技术)
SPOOLing是"Simultaneous Peripheral Operation On-Line"的缩写,即"外部设备联机并行操作"。其核心思想是用软件的方式模拟脱机输入/输出技术,将一台独占设备改造成共享设备 。
SPOOLing系统主要由以下几部分组成:
- 输入井和输出井:在磁盘上开辟的两个存储区域,用于暂存输入数据和输出数据。
- 输入缓冲区和输出缓冲区:在内存中开辟,用于缓和CPU与磁盘速度不匹配的矛盾。
- 输入进程和输出进程 :模拟脱机输入/输出时的外围控制机,负责将数据从低速设备输入到输入井,或将数据从输出井输出到低速设备。
典型应用------共享打印机:当用户进程请求打印时,SPOOLing系统并不是立即分配打印机,而是在磁盘的"输出井"中为它申请一个空闲盘块,将打印数据写入其中,并建立一张请求打印表挂到打印队列。打印进程从队列中取出请求,将数据从输出井通过输出缓冲区传送给打印机进行实际打印。这样,用户感觉自己在独占打印机,而实际上打印机被多个进程共享使用。
六、磁盘调度算法
对于磁盘这类共享设备,多个进程可能同时请求访问不同的磁道。磁盘调度算法的目标是减少寻道时间,从而提高磁盘I/O效率。常见的算法有:
- 先来先服务(FCFS):按请求到达的先后顺序调度。简单但可能产生较长的寻道时间。
- 最短寻道时间优先(SSTF):优先选择与当前磁头位置最近的请求。贪心策略,可能导致"饥饿"现象。
- 扫描算法(SCAN,电梯算法):磁头沿一个方向移动,处理该方向上的所有请求,直到没有请求后再反向移动。避免了饥饿,但响应频率不均。
- 循环扫描算法(C-SCAN) :在SCAN基础上,磁头单向移动,返回时直接快速移至起始端而不处理请求,提供了更均匀的等待时间。
在实际应用中,SCAN和C-SCAN算法常被优化为LOOK 和C-LOOK算法,即磁头移动方向上无请求时立即改变方向,无需到达磁盘边缘,进一步提高了效率。