基本思想
- 按层次构建,较低层软件为较高层软件服务
- 使较高层软件独立于硬件
- 为用户提供统一接口
重点 I/O 软件层次结构
用户级 I/O(库函数,stdio)
↓
设备无关操作系统层(命名、保护、缓冲、分配、错误处理)
↓
设备驱动程序(设备特定操作、设备寄存器、中断处理)
↓
中断处理程序(保存/恢复现场,处理中断)
↓
硬件设备
各层详解
用户级 I/O(User-level I/O)
- 提供标准库函数(如 C 语言的
printf、scanf、fread、fwrite)
- 将格式化数据转换为系统调用
- 对用户屏蔽底层细节
设备无关操作系统层(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 设备处理程序(驱动程序)