Skip to main content

操作系统笔记10:I/O管理

··1823 words·10 mins· loading · loading · ·
GaleInk
Author
GaleInk
A Breezing Gale ~
Table of Contents
Operating Systems::Notes - This article is part of a series.
Part 10: This Article

一、I/O 管理概述
#

1.1 I/O 的特点
#

  • I/O 性能往往是系统性能的瓶颈
  • 设备种类多、杂,并发控制复杂——操作系统庞杂的重要原因
  • 速度差异大、控制接口复杂、传送单位不同、数据表示不一致、错误条件各异
  • 与文件系统联系密切

1.2 设备分类
#

按数据特征分

类型 特点 例子 I/O 方式
字符设备 字节为单位,不可寻址,传输速率低 键盘、鼠标、串口 get() / put()
块设备 数据块为单位,可随机寻址 磁盘、磁带 文件系统接口或 mmap
网络设备 格式化报文交换 以太网、无线、蓝牙 send() / recv()

按资源分配角度分

类型 说明 例子
独占设备 一段时间内只能一个进程使用 打印机
共享设备 多个进程交叉使用 磁盘
虚设备 用共享设备模拟独占设备,SPOOLing 用硬盘模拟打印机输入输出

1.3 I/O 管理的目标
#

  1. 控制设备操作,完成 I/O 设备与内存之间的数据交换(设备分配/回收、记录状态、执行驱动、中断处理、缓冲区管理)
  2. 建立统一、独立于设备的接口——用户使用逻辑设备名,系统屏蔽硬件细节
  3. 提高并行性——利用中断、缓冲、DMA 等技术使 CPU 与设备并行工作
  4. 保护——设备数据的安全与保密

1.4 设备驱动模型
#

硬件差异 vs 应用统一 → 引入中间层 VFS,通过 struct file / inode / dentry 的函数指针表实现多态。


二、I/O 硬件组成
#

2.1 设备控制器的功能
#

  • 地址译码(端口地址)
  • 按约定格式收发数据和控制信号
  • 数模转换(数字 ↔ 模拟信号)
  • 内部硬件缓冲、数据加工

当控制器接受一条命令后,可独立于 CPU 完成指定操作;操作完成时产生中断通知 CPU。

2.2 I/O 端口编址
#

内存映射编址(MMIO) I/O 独立编址(PMIO)
地址空间 与内存统一编址 独立于内存
操作指令 可用所有内存指令(load/store) 专用 in/out 指令
优点 指令丰富、不需专用指令 不占内存空间、易区分
缺点 占用内存空间、需要禁用控制寄存器缓存 指令类型少、操作不灵活

MMIO 的关键问题:控制寄存器不能进行高速缓存,否则轮询循环会只读缓存而错过设备状态变化。硬件必须支持逐页选择性禁用缓存。


三、I/O 控制方式
#

3.1 三种基本方式
#

方式 原理 CPU角色 适用
可编程 I/O(轮询) 由CPU代表进程给I/O模块发I/O命令,进程进入忙等待,直到操作完成才继续执行 CPU 全程参与 简单低速设备
中断驱动 I/O 操作完成后控制器发中断通知 CPU 发起后切走,中断后处理 较复杂设备
DMA 控制器直接访问总线,在内存和外设间搬运数据 只参与开始和结束 高吞吐量设备

3.2 I/O 部件的演化
#

  1. CPU 直接控制外围设备
  2. 增加控制器,CPU 使用非中断可编程 I/O
  3. 采用中断方式,CPU 无需等待
  4. DMA 直接控制存储器(块传输)
  5. I/O 部件增强为独立处理器(I/O 通道)
  6. I/O 部件有自己的局部存储器(独立计算机)

四、I/O 软件层次
#

分层的设计思想:较低层考虑硬件特性,较高层不依赖硬件。

用户级 I/O 软件          ← 用户进程,系统调用,格式化 I/O 数据
独立于设备的软件          ← 设备命名、保护、缓冲、块大小统一
设备驱动程序              ← 设置设备寄存器、检查执行状态
中断处理程序              ← I/O 完成时唤醒驱动进程
硬件                      ← 物理 I/O 操作

4.1 设备独立性(设备无关性)
#

  • 用户使用逻辑设备名,系统完成逻辑→物理转换
  • 好处:设备分配时灵活、易于实现 I/O 重定向
  • 实现:设备作为特殊文件处理,用户 I/O 请求在文件系统中完成合法性检查和参数处理

4.2 设备驱动程序
#

  • 每个设备驱动程序处理一种设备类型
  • 接收来自上层软件的抽象请求并执行
  • 与外界的接口:操作系统接口、系统引导接口、设备接口

4.3 I/O 进程模型
#

专门处理系统中 I/O 请求和中断的系统进程:

  • 用户程序 send 发 I/O 请求给 I/O 进程 → block 阻塞自己
  • I/O 完成后 wakeup 唤醒用户进程
  • 中断到达时,内核发消息给 I/O 进程处理

五、缓冲技术
#

5.1 为什么引入缓冲
#

  • 解决 CPU 与 I/O 设备速度不匹配(最早引入的技术)
  • 提高 CPU 与 I/O 设备之间的并行性
  • 减少对 CPU 的中断请求次数

5.2 缓冲区分类
#

类型 说明
硬缓冲 设备中硬件寄存器实现
软缓冲 内存中开辟空间
单/双缓冲 基本形式
缓冲池 多个缓冲区,循环使用,生产者-消费者模型

5.3 UNIX System V 缓冲池
#

  • 约 200 个缓冲区,每个 512 或 1024 字节
  • 每个缓冲区 = 缓冲控制块(设备号、盘块号、状态、指针)+ 缓冲数据区

每个缓冲区同时在两条链中:

用途
av 链(空闲队列) 空闲缓冲区,头 bfreelist,按近似 LRU 分配
b 链(设备队列) 分配给具体设备的缓冲区,散列组织,64 个队列

散列公式:i = (b_dev + block) mod 64

访问流程:根据盘块号在 b 链查找 → 找到则标记"忙"并从 av 链取下 → 传送数据 → 释放回 av 链尾 → 保留在 b 链中(数据有效可复用)→ 长期未用从 av 链头被置换。


六、设备分配
#

6.1 独占设备分配
#

方式 说明 优缺点
静态分配 进程运行前分配,结束时回收 设备利用率低,但不会死锁
动态分配 进程提出申请时分配,停止使用时收回 效率好,但可能死锁

6.2 分时共享设备
#

以一次 I/O 为单位分时使用,请求排队。典型:SPOOLing 技术——用硬盘模拟打印机,打印请求排队由 daemon 进程逐个处理。


七、I/O 性能
#

目的:使CPU利用率尽可能不被IO降低,尽可能摆脱IO(如DMA)。

7.1 同步 vs 异步 I/O
#

同步 I/O 异步 I/O
进程状态 阻塞直到操作完成 发起后继续执行
CPU 利用 I/O 期间 CPU 空闲 I/O 期间 CPU 可做其他事
实现 简单 通过线程切换或用户态分段发请求
例子 默认 read() Windows Overlapped I/O、aio_read

7.2 性能优化措施
#

  • 缓冲技术 → 减少速度差距
  • 异步 I/O → CPU 不等待 I/O
  • DMA / 通道 → CPU 摆脱 I/O 操作
Operating Systems::Notes - This article is part of a series.
Part 10: This Article