# 6.3 I/O软件层次结构 ## 一、I/O软件的设计目标 ### 1.1 设备独立性 **定义**:用户程序与物理设备无关,使用逻辑设备名。 **优点**: - 程序与设备无关 - 方便设备更换 - 提高系统灵活性 ### 1.2 统一命名 **定义**:使用统一的方式命名设备。 **实现**: - 逻辑设备名映射到物理设备名 - 通过设备驱动程序访问设备 ### 1.3 错误处理 **定义**:在尽可能接近硬件的层次处理错误。 **原则**: - 底层处理硬件错误 - 上层处理逻辑错误 ### 1.4 同步与异步传输 **同步传输**: - 阻塞式I/O - 等待I/O完成 **异步传输**: - 非阻塞式I/O - 继续执行,I/O完成后通知 ### 1.5 缓冲管理 **目的**: - 缓解CPU与设备速度不匹配 - 提高I/O效率 --- ## 二、I/O软件的层次 ### 2.1 层次划分 ``` +------------------+ | 用户层I/O软件 | +------------------+ | 设备独立性软件 | +------------------+ | 设备驱动程序 | +------------------+ | 中断处理程序 | +------------------+ | 硬件 | +------------------+ ``` ### 2.2 用户层I/O软件 **功能**: - 实现与用户交互的接口 - 用户程序中的I/O操作 - 库函数(如C标准库的stdio) **实现**: - 系统调用封装 - 格式化I/O - 缓冲管理 **例子**: - `printf()`, `scanf()` - `fopen()`, `fread()`, `fwrite()` ### 2.3 设备独立性软件 **功能**: - 设备名到设备驱动程序的映射 - 设备保护 - 提供与设备无关的块大小 - 缓冲管理 - 差错控制 - 分配和释放设备 **设备映射**: - 逻辑设备名 → 物理设备名 - 通过逻辑设备表(LUT)实现 **缓冲管理**: - 管理I/O缓冲区 - 提高I/O效率 ### 2.4 设备驱动程序 **功能**: - 与设备控制器通信 - 发出I/O命令 - 检查设备状态 - 处理设备中断 **特点**: - 与具体设备相关 - 每个设备类型有对应的驱动程序 - 运行在核心态 **接口**: - 向上:提供统一的接口给设备独立性软件 - 向下:与设备控制器交互 ### 2.5 中断处理程序 **功能**: - 响应设备中断 - 处理I/O完成 - 唤醒等待进程 **处理过程**: 1. 保存被中断进程的CPU现场 2. 分析中断原因 3. 转去执行相应的中断处理程序 4. 恢复被中断进程的CPU现场 --- ## 三、设备独立性 ### 3.1 逻辑设备与物理设备 **逻辑设备**: - 用户程序使用的设备名 - 如:`/dev/printer` **物理设备**: - 实际的硬件设备 - 如:`LPT1` ### 3.2 逻辑设备表(LUT) **功能**: - 记录逻辑设备名到物理设备名的映射 - 记录设备的驱动程序入口地址 **结构**: | 逻辑设备名 | 物理设备名 | 驱动程序入口 | |-----------|-----------|-------------| | /dev/printer | LPT1 | printer_driver | | /dev/disk | /dev/sda | disk_driver | ### 3.3 设备分配 **独占设备分配**: - 申请设备 - 分配设备 - 使用设备 - 释放设备 **共享设备**: - 不需要显式分配 - 直接使用 --- ## 四、缓冲管理 ### 4.1 缓冲的引入 **目的**: - 缓解CPU与I/O设备速度不匹配 - 减少CPU中断频率 - 提高CPU和I/O设备的并行性 ### 4.2 单缓冲 **结构**: - 一个缓冲区 - 输入:设备 → 缓冲区 → 进程 - 输出:进程 → 缓冲区 → 设备 **特点**: - 设备和CPU可以部分并行 - 但存在等待 ### 4.3 双缓冲 **结构**: - 两个缓冲区 - 一个用于输入/输出,一个用于处理 **特点**: - 设备和CPU可以并行 - 提高吞吐量 ### 4.4 循环缓冲 **结构**: - 多个缓冲区组成循环队列 - 输入指针和输出指针 **特点**: - 适合生产者和消费者速度不同 ### 4.5 缓冲池 **结构**: - 多个缓冲区组成缓冲池 - 分为空闲队列、输入队列、输出队列 **管理**: - 从空闲队列取缓冲区 - 使用后归还到相应队列 --- ## 五、考研重点 1. **I/O软件的设计目标**:设备独立性、统一命名、错误处理、同步与异步、缓冲管理 2. **I/O软件的层次**:各层的功能 3. **设备独立性**:逻辑设备、物理设备、LUT 4. **缓冲管理**:单缓冲、双缓冲、循环缓冲、缓冲池 --- *下一节:6.4 设备分配与回收*