简介

将计算机系统的运行过程视作函数 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. 检查设备的状态寄存器
    2. 若忙,回到 1,循环等待(忙等待, Busy waiting)
    3. 若就绪,执行相关操作
  • 特点
    • 实现简单
    • 需要 CPU 忙等待,浪费 CPU 资源
    • 设备速度慢时,效率低下

中断(Interrupt)

  • 旨在避免 CPU 忙等待,设备准备好时,主动通知 CPU
  • 过程
    • 中断请求: 设备就绪时,向 CPU 发送中断信号
    • 中断响应: CPU 当前指令执行结束时,检查中断请求,若有且没有屏蔽,响应中断
    • 中断处理: 保存当前相关寄存器和堆栈,查询对应的 中断向量 (中断程序入口地址),控制权转移到 中断处理程序 中并执行
    • 中断返回: 执行完毕后,恢复现场
  • 特点
    • 上下文切换(Context Switch): 中断开始保护相关变量参数以及结束时恢复变量参数的过程
    • 中断频率高时,频繁的上下文切换会消耗大量 CPU 时间
    • 存在 中断优先级 , 可形成 中断嵌套

直接内存访问(Direct Memory Access, DMA)

  • 允许 I/O 设备直接绕过 CPU,与内存之间直接传输数据
  • 特点
    • 直接绕过 CPU,CPU 可执行其它任务
    • 需要有 DMA 控制器