输入/输出系统
简介
将计算机系统的运行过程视作函数 y = f(x), 其中,输入/输出系统完成的工作是: 将外界的数据输入处理成计算机可识别的输入 x,并将计算机的输出结果 y 处理成外界所需要的输出数据

相关概念
- I/O (输入/输出)设备: 用于与计算机通信的外部设备,设备类型和控制方式多种多样,本身也为一个系统
- I/O 接口: 协调外部设备与计算机的信息传输,功能包括:
- 设备选择与寻址: 识别 CPU 要访问的 I/O 设备
- 数据缓冲: 速度匹配
- 信号转换: 时序电平、时序、数据格式(串行、并行)转换
- 传送设备状态(忙、就绪等)
- 传送控制命令(读写等)
分类
输入/输出
- 输入设备(键盘、鼠标等)
- 输出设备(显示器、打印机等)
数据组织方式
- 字符设备: 以字符为单位传输(键盘、鼠标、打印机等)
- 块设备: 以数据块为单位传输(硬盘、光盘、U盘等)
用途差异
- 存储设备(硬盘等)
- 通信设备(网卡等)
- 人机交互设备(键盘、鼠标、显示器、打印机等)
I/O 端口编址方式
独立编址
- I/O 端口拥有独立的地址空间,CPU 使用专门的 I/O 指令(如 x86 的 in, out 指令)来访问
- 不占用内存空间,I/O 指令短,执行快; 但需要专门的 I/O 指令和 CPU 引脚
统一编址
- I/O 端口地址被映射到 CPU 的内存地址空间中,CPU 可通过内存访问方式来访问 I/O 端口
- 通常用在嵌入式系统中(例如 STM32 的 GPIO),需要大数据量传输的设备(如显卡显存(被映射成 CPU 物理地址空间的一部分)等)
访问 I/O 设备的方式
查询/轮询(Polling)
- CPU 周期性检查设备的状态寄存器,确定设备 I/O 操作状态
- 过程
- 检查设备的状态寄存器
- 若忙,回到 1,循环等待(忙等待, Busy waiting)
- 若就绪,执行相关操作
- 特点
- 实现简单
- 需要 CPU 忙等待,浪费 CPU 资源
- 设备速度慢时,效率低下
中断(Interrupt)
- 旨在避免 CPU 忙等待,设备准备好时,主动通知 CPU
- 过程
- 中断请求: 设备就绪时,向 CPU 发送中断信号
- 中断响应: CPU 当前指令执行结束时,检查中断请求,若有且没有屏蔽,响应中断
- 中断处理: 保存当前相关寄存器和堆栈,查询对应的 中断向量 (中断程序入口地址),控制权转移到 中断处理程序 中并执行
- 中断返回: 执行完毕后,恢复现场
- 特点
- 上下文切换(Context Switch): 中断开始保护相关变量参数以及结束时恢复变量参数的过程
- 中断频率高时,频繁的上下文切换会消耗大量 CPU 时间
- 存在 中断优先级 , 可形成 中断嵌套
直接内存访问(Direct Memory Access, DMA)
- 允许 I/O 设备直接绕过 CPU,与内存之间直接传输数据
- 特点
- 直接绕过 CPU,CPU 可执行其它任务
- 需要有 DMA 控制器
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Forgotten Area!


