操作系统(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
      • 控制器中的寄存器与内存统一编址
      • 可采用对内存进行操作的指令来对控制器进行操作
    • 寄存器独立编址
      • 控制器中的寄存器独立编址
      • 需要设置专门的指令来操作控制器

5.1.3 I/O 控制方式

控制方式 完成一次读/写过程 CPU 干预频率 每次 I/O 的数据传输单位 数据流向 优点 缺点
程序直接控制方式 CPU 发出 I/O 命令后需要不断轮询 极高 设备\toCPU\to内存;
内存\toCPU\to设备
实现简单 CPU 和 I/O 设备只能串行工作,CPU 长期处于“忙等”状态,利用率低
中断驱动方式 CPU 发出 I/O 命令后可以做其他事,本次 I/O 完成后设备控制器发出中断信号 设备\toCPU\to内存;
内存\toCPU\to设备
CPU 和 I/O 设备可并行工作,CPU 利用率提升 每个字的传输都要经过 CPU,频繁的中断处理会消耗较多的 CPU 时间
DMA 方式 CPU 发出 I/O 命令后可以做其他事,本次 I/O 完成后 DMA 控制器发出中断信号 设备\to内存;
内存\to设备
数据以块传输,CPU 介入频率进一步降度;数据传输不用经过 CPU,传输效率提高;CPU 和 I/O 设备的并行性提升 CPU 每发出一条 I/O 指令,只能读/写一个或多个连续的数据块
通道控制方式 CPU 发出 I/O 命令后可以做其他事,通道会执行通道程序以完成 I/O,完成后通道向 CPU 发出中断信号 一组块 设备\to内存;
内存\to设备
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(块设备接口)
  • 设备驱动程序接口:操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序

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 任务可以并行处理,使进程迅速推进- 缺点:有可能发生死锁
  • 静态分配与动态分配
    • 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
      • 破坏了“请求和保持”条件,不会发生死锁
    • 动态分配:进程运行过程中动态申请设备资源
  • 设备分配管理中的数据结构
    • 一个通道可控制多个设备控制器,每个设备控制器可控制多个设备
    • 设备控制表(DCT):每个设备对应一张 DCT
      • 关键字段:类型 / 标识符 / 状态 / 指向 COCT 的指针 / 等待队列指针
    • 控制器控制表 (COCT):每个控制器对应一张 COCT
      • 关键字段:状态 / 指向 CHCT 的指针 / 等待队列指针
    • 通道控制表(CHCT):每个控制器对应一张CHCT
      • 关键字段:状态 / 等待队列指针
    • 系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目
      • 关键字段:设备类型 / 标识符 / DCT / 驱动程序入口
  • 设备分配的步骤
    1. 根据进程请求的物理设备名查找 SDT
    2. 根据 SDT 找到 DCT 并分配设备
    3. 根据 DCT 找到 COCT 并分配控制器
    4. 根据 COCT 找到 CHCT 井分配通道
    • 只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动 I/O 设备进行数据传送
    • 缺点:用户编程时必须使用物理设备名
      • 若换了一个物理设备,则程序无法运行
      • 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
  • 设备分配步骤的改进
    • 用户编程时使用逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过 LUT)
    • 逻辑设备表(LUT)的设置
      • 整个系统只有一张 LUT:各用户所用的逻辑设备名不允许重复
      • 每个用户一张 LUT:各个用户的逻辑设备名可重复

5.2.4 缓冲区管理

  • 缓冲区:是一片存储区域,设备独立性软件一般利用内存作为缓冲区
  • 缓冲区的作用
    • 缓和 CPU 与 I/O 设备之间速度不匹配的矛盾
    • 减少对 CPU 的中断频率,放宽对 CPU 中断相应时间的限制
    • 解决数据粒度不匹配的问题
    • 提高 CPU 与 I/O 设备之间的并行性
  • 缓冲区的特性
    • 当缓冲区数据非空时,不能往缓冲区充入数据,只能从缓冲区把数据传出
    • 当缓冲区为空时,可以往缓冲区充入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
  • 单缓冲:在主存中分配一个缓冲区
    • 设备一(TT)一缓冲区一(MM)一工作区一(CC)一处理
    • 处理一块数据平均耗时 max(C,T)+M\max(C,T)+M
    • 分析问题的初始状态:工作区满,缓冲区空
  • 双缓冲:在主存中分配两个缓冲区
    • 处理一块数据平均耗时 max(T,C+M)\max(T,C+M)
    • 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空
  • 循环缓冲:多个缓冲区链接成循环队列
    • 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管理/
Author
Nuoyan Chen
Posted on
July 18, 2025
Licensed under