操作系统(5):I/O管理
Last updated on July 22, 2025 pm
这是《操作系统》课程的课程笔记系列。本文整理部分为“第5章:I/O管理”。
5.1 I/O 管理概述
5.1.1 I/O 设备
- I/O 设备:将数据输入/输出计算机的外部设备
- 按使用特性分类:人机交互类外部设备、存储设备、网络通信设备
- 按传输速率分类:低速设备、中速设备、高速设备
- 按信息交换的单位分类:
- 块设备:传输快,可寻址
- 字符设备:传输慢,不可寻址,常采用中断驱动方式
5.1.2 I/O 控制
- I/O 设备的组成:机械部件和电子部件组成,其中电子部件即为 I/O 控制器
- I/O 控制器的功能:用于实现对 I/O 设备的控制
- 接受和识别 CPU 发出的命令(要有控制寄存器)
- 向 CPU 报告设备的状态(要有状态寄存器)
- 数据交换(要有数据寄存器)
- 地址识别(由 I/O 逻辑实现)
- I/O 控制器的组成:
- CPU 与控制器之间的接口:实现控制器与 CPU 之间的通信
- I/O 逻辑:识别 CPU 发出的命令,并向设备发出命令
- 控制器与设备之间的接口:实现控制器与设备之间的通信
- 两种寄存器编址方式:
- 内存映射 I/O:
- 控制器中的寄存器与内存统一编址
- 可采用对内存进行操作的指令来对控制器进行操作
- 寄存器独立编址:
- 控制器中的寄存器独立编址
- 需要设置专门的指令来操作控制器
- 内存映射 I/O:
5.1.3 I/O 控制方式
控制方式 | 完成一次读/写过程 | CPU 干预频率 | 每次 I/O 的数据传输单位 | 数据流向 | 优点 | 缺点 |
---|---|---|---|---|---|---|
程序直接控制方式 | CPU 发出 I/O 命令后需要不断轮询 | 极高 | 字 | 设备CPU内存; 内存CPU设备 |
实现简单 | CPU 和 I/O 设备只能串行工作,CPU 长期处于“忙等”状态,利用率低 |
中断驱动方式 | CPU 发出 I/O 命令后可以做其他事,本次 I/O 完成后设备控制器发出中断信号 | 高 | 字 | 设备CPU内存; 内存CPU设备 |
CPU 和 I/O 设备可并行工作,CPU 利用率提升 | 每个字的传输都要经过 CPU,频繁的中断处理会消耗较多的 CPU 时间 |
DMA 方式 | CPU 发出 I/O 命令后可以做其他事,本次 I/O 完成后 DMA 控制器发出中断信号 | 中 | 块 | 设备内存; 内存设备 |
数据以块传输,CPU 介入频率进一步降度;数据传输不用经过 CPU,传输效率提高;CPU 和 I/O 设备的并行性提升 | CPU 每发出一条 I/O 指令,只能读/写一个或多个连续的数据块 |
通道控制方式 | CPU 发出 I/O 命令后可以做其他事,通道会执行通道程序以完成 I/O,完成后通道向 CPU 发出中断信号 | 低 | 一组块 | 设备内存; 内存设备 |
CPU、通道、I/O 设备可并行工作,资源利用率高 | 实现复杂,需要专门的通道硬件支持 |
5.1.4 I/O 软件层次结构
- 用户层软件:实现与用户交互的接口,向上提供方便易用的库函数
- 设备独立性软件:
- 向上层提供统一的调用接口(系统调用)
- 设备的保护
- 差错处理
- 设备的分配与回收
- 数据缓冲区管理
- 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
- 通过 逻辑设备表(LUT, Logical Unit Table) 进行
- 设备驱动程序:设置设备寄存器、检查设备状态
- 中断处理程序:进行中断处理
- 硬件:执行 I/O 操作,由机械部件和电子部件组成
5.1.5 I/O 应用程序接口和驱动程序接口
- 应用程序 I/O 接口:
- 字符设备接口:用于字符设备(如键盘、打印机),不可寻址,读 / 写以字符为单位
get
/put
系统调用:向字符设备读 / 写一个字符
- 块设备接口:用于块设备(如磁盘),读 / 写以数据块为单位
read
/write
系统调用:向块设备的读写指针位置读 / 写多个字符seek
系统调用:修改读写指针位置
- 网络设备接口:又称网络套接字接口,用于网络设备(如网卡)
socket
系统调用:创建一个网络套接字,需指明网络协议(TCP / UDP)bind
:将套接字绑定到某个本地端口connect
:将套接字连接到远程地址read
/write
:从套接字读 / 写数据
- 字符设备接口:用于字符设备(如键盘、打印机),不可寻址,读 / 写以字符为单位
- 阻塞与非阻塞 I/O:
- 阻塞 I/O:应用程序发出 I/O 系统调用,进程需转为阻塞态等待
- 如从键盘读一个字符
get
(字符设备接口)
- 如从键盘读一个字符
- 非阻塞 I/O:应用程序发出 I/O 系统调用,系统调用可迅速返回,进程无需阻塞等待
- 如往磁盘写数据
write
(块设备接口)
- 如往磁盘写数据
- 阻塞 I/O:应用程序发出 I/O 系统调用,进程需转为阻塞态等待
- 设备驱动程序接口:操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序
5.2 设备独立性软件
5.2.1 I/O 核心子系统
- I/O 子系统:包括设备独立性软件、设备驱动程序、中断处理程序三层
- 属于操作系统的内核部分,即 I/O 系统
- I/O 子系统的功能:I/O 调度、设备保护、假脱机技术、设备分配与回收、缓冲区管理
- I/O 调度:用某种算法确定一个好的顺序来处理各个 I/O 请求
- 设备保护:采用文件保护技术实现设备保护
- 在 UNIX 系统中,设备被看作一种特殊的文件,每个设备也会有对应的 FCB
5.2.2 假脱机技术
- 脱机技术:外围控制机+更高速的设备(磁带)
- 作用:缓解设备与 CPU 的速度矛盾,实现预输入、缓输出
- 假脱机技术(SPOOLing 技术):用软件的方式模拟脱机技术
- 输入井和输出井:位于磁盘,模拟脱机输入 / 输出时的磁带
- 输入进程和输出进程:模拟脱机输入 / 输出时的外围控制机
- 输入缓冲区和输出缓冲区:内存中的缓冲区,输入、输出时的中转站
5.2.3 设备的分配和回收
- 考虑的因素:
- 固有属性:
- 独占设备:一个时段只能分配给一个进程(如打印机)
- 共享设备:可同时分配给多个进程使用(如磁盘)
- 宏观上共享使用,微观上交替使用
- 虚拟设备:采用 SPOOLing 技术将独占设备改造成虚拟的共享设备
- 分配算法:先来先服务、优先级高者优先、短任务优先等
- 安全性:
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次 I/O 完成后才将进程唤醒
- 一个时段内每个进程只能使用一个设备
- 优点:破坏了“请求和保持”条件,不会死锁
- 缺点:对于一个进程来说,CPU 和 I/O 设备只能串行工作
- 不安全分配方式:进程发出 I/O 请求后,系统为其分配 I/O 设备,进程可继续执行,之后还可以发出新的 I/O 请求;只有某个 I/O 请求得不到满足时才将进程阻塞
- 一个进程可以同时使用多个设备
- 优点:进程的计算任务和 I/O 任务可以并行处理,使进程迅速推进- 缺点:有可能发生死锁
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次 I/O 完成后才将进程唤醒
- 固有属性:
- 静态分配与动态分配:
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
- 破坏了“请求和保持”条件,不会发生死锁
- 动态分配:进程运行过程中动态申请设备资源
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
- 设备分配管理中的数据结构:
- 一个通道可控制多个设备控制器,每个设备控制器可控制多个设备
- 设备控制表(DCT):每个设备对应一张 DCT
- 关键字段:类型 / 标识符 / 状态 / 指向 COCT 的指针 / 等待队列指针
- 控制器控制表 (COCT):每个控制器对应一张 COCT
- 关键字段:状态 / 指向 CHCT 的指针 / 等待队列指针
- 通道控制表(CHCT):每个控制器对应一张CHCT
- 关键字段:状态 / 等待队列指针
- 系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目
- 关键字段:设备类型 / 标识符 / DCT / 驱动程序入口
- 设备分配的步骤:
- 根据进程请求的物理设备名查找 SDT
- 根据 SDT 找到 DCT 并分配设备
- 根据 DCT 找到 COCT 并分配控制器
- 根据 COCT 找到 CHCT 井分配通道
- 只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动 I/O 设备进行数据传送
- 缺点:用户编程时必须使用物理设备名
- 若换了一个物理设备,则程序无法运行
- 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
- 设备分配步骤的改进:
- 用户编程时使用逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过 LUT)
- 逻辑设备表(LUT)的设置:
- 整个系统只有一张 LUT:各用户所用的逻辑设备名不允许重复
- 每个用户一张 LUT:各个用户的逻辑设备名可重复
5.2.4 缓冲区管理
- 缓冲区:是一片存储区域,设备独立性软件一般利用内存作为缓冲区
- 缓冲区的作用:
- 缓和 CPU 与 I/O 设备之间速度不匹配的矛盾
- 减少对 CPU 的中断频率,放宽对 CPU 中断相应时间的限制
- 解决数据粒度不匹配的问题
- 提高 CPU 与 I/O 设备之间的并行性
- 缓冲区的特性:
- 当缓冲区数据非空时,不能往缓冲区充入数据,只能从缓冲区把数据传出
- 当缓冲区为空时,可以往缓冲区充入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
- 单缓冲:在主存中分配一个缓冲区
- 设备一()一缓冲区一()一工作区一()一处理
- 处理一块数据平均耗时
- 分析问题的初始状态:工作区满,缓冲区空
- 双缓冲:在主存中分配两个缓冲区
- 处理一块数据平均耗时
- 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空
- 循环缓冲:多个缓冲区链接成循环队列
in
指针指向第一个空缓冲区,out
指针指向第一个满缓冲区
- 缓冲池:由系统中共用的缓冲区组成
- 三个队列:空缓冲队列、输入队列(装满输入数据)、输出队列(装满输出数据)
- 四种工作缓冲区:
- 用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区
- 用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区
5.3 磁盘和固态硬盘
5.3.1 磁盘的结构
- 磁盘、磁道、扇区:
- 磁盘由表面涂有磁性物质的圆形盘片组成
- 每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区
- 磁盘的读/写过程:磁头移动到目标位置,盘片旋转,对应扇区划过磁道
- 盘面、柱面:
- 磁盘有多个盘片垂直堆叠,每个盘片有两个盘面
- 所有盘面中相对位置相同的磁道组成柱面
- 磁盘的物理地址:(柱面号,盘面号,扇区号)
- 磁盘的分类:
- 根据磁头是否可移动:
- 固定头磁盘:每个磁道有一个磁头
- 移动头磁盘:每个盘面只有一个磁头
- 根据盘片是否可更换:固定盘磁盘、可换盘磁盘
- 根据磁头是否可移动:
5.3.2 磁盘调度算法
- 一次磁盘读/写操作需要的时间:
- 寻找时间(寻道时间):启动磁臂、移动磁头所花的时间
- 寻找时间是磁盘调度算法影响的指标
- 延迟时间:将目标扇区转到磁头下面所花的时间
- 传输时间:读 / 写数据花费的时间
- 寻找时间(寻道时间):启动磁臂、移动磁头所花的时间
- 磁盘调度算法:
- 先来先服务(FCFS):按访问请求到达的先后顺序进行处理
- 最短寻找时间优先(SSTF):每次都优先响应距离磁头最近的磁道访问请求
- 贪心算法,能保证眼前最优,但无法保证总的寻道时间最短
- 缺点:可能导致饥饿
- 扫描算法(SCAN):只有磁头移动到最边缘的磁道时才可以改变磁头移动方向
- 缺点:对各个位置磁道的响应频率不平均
- 循环扫描算法(C-SCAN):只有磁头朝某个方向移动时才会响应请求,移动到边缘后立即让磁头返回起点,返回途中不响应任何请求
- LOOK 算法:SCAN 算法的改进,只要在磁头移动方向上不再有请求,就立即改变磁头方向
- C-LOOK 算法:C-SCAN 算法的改进,只要在磁头移动方向上不再有请求,就立即让磁头返回
5.3.3 减少磁盘延迟时间的方法
- 交替编号:让编号相邻的扇区在物理上不相邻
- 原理:读取完一个扇区后需要一段时间处理才可以继续读入下一个扇区
- 错位命名:让相邻盘面的扇区编号错位
- 原理:与“交替编号”的原理相同,可降低延迟时间
- 磁盘地址结构的设计:(柱面号,盘面号,扇区号)
- 原因:在读取地址连续的磁盘块时,前者更不需要移动磁头
5.3.4 磁盘的管理
- 磁盘初始化:
- 物理格式化(低级格式化):划分扇区
- 磁盘分区(C 盘、D 盘、E 盘)
- 逻辑格式化:建立文件系统(根目录文件、用于存储空间管理的数据结构等)
- 引导块:计算机启动时需要运行初始化程序(自举程序)来完成初始化
- ROM 中存放很小的自举装入程序
- 完整的自举程序存放在初始块(引导块)中
- 坏块的管理:
- 简单的磁盘:逻辑格式化时将坏块标记出来
- 在这种方式中,坏块对操作系统不透明
- 复杂的磁盘:磁盘控制器维护一个坏块链,并管理备用扇区
- 在这种方式中,坏块对操作系统透明
- 简单的磁盘:逻辑格式化时将坏块标记出来
5.3.5 固态硬盘 SSD
- 原理:基于闪存技术,属于电可擦除 ROM,即 EEPROM
- 组成:
- 闪存翻译层:负责翻译逻辑块号,找到对应页
- 存储介质:多个闪存芯片,每个芯片包含多个块,每个块包含多个页
- 读写性能特性:
- 以页为单位读/写:相当于磁盘的扇区
- 以块为单位擦除:擦干净的块,其中的每页都可以写一次,读无限次
- 支持随机访问:系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
- 读快、写慢:要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
- 与机械硬盘相比的特点:
- SSD 读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
- SSD 安静无噪音、耐摔抗震、能耗低、造价更贵
- SSD 的一个块被擦除次数过多(重复写同一个块)可能会坏,而机械硬盘的扇区不会因为写的次数太多而坏掉
- 磨损均衡技术:
- 思想:将“擦除”平均分布在各个块上,以提升使用寿命
- 动态磨损均衡:写入数据时,优先选择累计擦除次数少的新闪存块
- 静态磨损均衡:SSD 监测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的储存任务,让较新的闪存块承担更多的写任务
操作系统(5):I/O管理
https://cny123222.github.io/2025/07/18/操作系统-5-:I-O管理/