基本思想

  • 按层次构建,较低层软件为较高层软件服务
  • 使较高层软件独立于硬件
  • 为用户提供统一接口

重点 I/O 软件层次结构

用户级 I/O(库函数,stdio)
    ↓
设备无关操作系统层(命名、保护、缓冲、分配、错误处理)
    ↓
设备驱动程序(设备特定操作、设备寄存器、中断处理)
    ↓
中断处理程序(保存/恢复现场,处理中断)
    ↓
硬件设备

各层详解

用户级 I/O(User-level I/O)

  • 提供标准库函数(如 C 语言的 printfscanffreadfwrite
  • 将格式化数据转换为系统调用
  • 对用户屏蔽底层细节

设备无关操作系统层(Device-independent OS Layer)

  • 设备命名:统一的逻辑设备名,独立于物理设备
  • 设备保护:权限检查,防止未授权访问
  • 缓冲处理:提供单缓冲、双缓冲等机制
  • 设备分配与释放:管理独占/共享设备
  • 错误处理:处理设备错误(重试、报告等)
  • 提供统一的 I/O 系统调用接口

设备驱动程序(Device Driver)

  • 设备特定的代码,每种设备类型对应一个驱动程序
  • 负责操作设备寄存器,发送命令
  • 实现中断处理例程
  • 向上层提供标准接口,对下层封装硬件差异
  • 通常以内核模块形式加载

中断处理程序(Interrupt Handler)

  • 保存被中断进程的上下文(CPU 寄存器、程序计数器等)
  • 识别中断源(通过中断向量表)
  • 执行相应中断服务程序
  • 恢复上下文,返回被中断进程

I/O 请求处理流程(用户→硬件)

用户进程调用 read/write(库函数)
    ↓
用户态 → 内核态(系统调用)
    ↓
设备无关层:参数校验、权限检查、缓冲管理
    ↓
设备驱动层:构造命令、操作设备寄存器、启动 I/O
    ↓
中断处理程序:硬件完成 I/O 后触发中断,传输数据、唤醒等待进程
    ↓
返回用户态,数据就绪

I/O 交通管制程序

  • 负责各 I/O 设备之间的协调工作
  • 管理 I/O 请求队列

I/O 调度程序

  • 负责设备的分配和调度
  • 决定请求的执行顺序(如磁盘调度算法)

I/O 设备处理程序(驱动程序)

  • 负责每类设备的具体操作
  • 直接与硬件通信