type
date
slug
summary
tags
category
password
status
icon
一、I/O 系统基本概念
二、I/O 接口
1、I/O 接口
(1)I/O 接口的定义
- 也称 I/O 控制器,是主机和外设之间的交接界面
- 通过接口可以实现主机和外设之间的信息交换

(2)I/O 接口的功能
- 进行地址译码和设备选择:使主机和指定外设交换信息
- 实现主机和外设的通信联络控制:实现主机—I/O 接口—I/O 设备之间的通信
- 实现数据缓冲:通过数据缓冲寄存器(DBR)达到主机和外设工作速度的匹配
- 信号格式的转换:串-并、并-串、电平、数-模、模-数等格式转换
- 传送控制命令和状态信息:接收从控制总线发来的控制信号、时钟信号;通过状态寄存器反馈设备的各种错误、状态信息,供 CPU 查用

(3)I/O 接口的基本结构

- 外部接口:通过接口电缆与外设连接,数据传输可能是串行方式,因此 I/O 接口需具有串/并转换功能
- 内部接口:与系统总线相连,实质上是与内存、CPU 相连
- 如何确定要操作的设备:每个设备对应一组寄存器,操作不同的寄存器就是在操作不同的设备
- I/O 指令:对数据缓冲寄存器、状态/控制寄存器的进行访问操作的指令
- 只能在 OS 内核的底层 I/O 软件中使用
- I/O 指令实现的数据传送通常发生在通用寄存器和 I/O 端口之间
- 是一种特权指令
(4)I/O 接口的类型
- 按数据传送方式(外设和接口一侧)分:
- 并行接口:一个字节或一个字所有位同时传送
- 串行接口:一位一位地传送
- 按主机访问 I/O 设备的控制方式分:
- 程序查询接口
- 中断接口
- DMA 接口
- 按功能选择的灵活性分:
- 可编程接口
- 不可编程接口
2、I/O 端口及其编址
(1)I/O 端口
- I/O 端口:接口电路中可以被 CPU 直接访问的寄存器,可以进行读/写的寄存器
- 接口 = 端口 + 相应的控制逻辑
- I/O 端口想要能被 CPU 访问,则必须对各个端口进行编号,每个端口对应一个端口地址
- 主要的 I/O 端口有:
- 数据端口:CPU 对数据端口中的数据执行读写操作
- 状态端口:对状态端口中的外设状态只能执行读操作
- 控制端口:对控制端口中的各种控制命令只能执行写操作
(2)I/O 编址
1)统一编址
- 定义:
- 存储器映射方式
- 把 I/O 端口当做存储器的单元进行地址分配,CPU 不需要设置专门的 I/O 指令,用统一的访存指令就可以访问 I/O 端口
- 特点:依靠地址码的不同区分存储单元和 I/O 设备
- 优点:
- 不需要专门的 I/O 指令
- 可以使 CPU 访问 I/O 的操作更灵活、更方便
- 可以使端口有较大的编址空间
- 缺点:
- 端口占用主存地址空间,使内存容量变小
- 外设寻址时间长(地址位数多,地址译码速度慢)
- 译码电路复杂,降低了译码速度【在识别 I/O 端口时全部地址线都需要参加译码】
2)独立编址
- 定义:
- I/O 映射方式
- I/O 端口的地址空间与主存地址空间是两个独立的地址空间
- 需要设置专门的 I/O 指令来访存 I/O 端口
- 特点:通过专门的 I/O 指令来区分存储单元和 I/O 设备【I/O 指令的地址码给出 I/O 端口号】
- 优点:
- 使用专用 I/O 指令,程序编制清晰
- I/O 端口地址位数少,译码简单,地址译码速度快
- 缺点:
- I/O 指令少,一般只能对端口进行传送操作
- 需要 CPU 提供存储器读/写、I/O 设备读/写两组控制信号,增加了控制逻辑电路的复杂性
三、I/O 方式
- I/O方式:输入/输出系统实现主机与 I/O 设备之间数据传送的控制方式

1、程序查询方式
- 基本概念:
- 信息交换的控制完全由 CPU 执行程序实现
- 接口中设置一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)
- 主机进行 I/O 操作时,先发出询问信号,读取设备状态决定下一步操作到底是进行数据传送还是等待
- CPU 一旦启动 I/O,就必须停止现行程序的运行,并在现行程序中插入一段程序

- 主要特点:
- CPU 有“踏步”等待现象
- CPU 与 I/O 串行工作
- 优点:
- 接口设计简单,设备量少
- 缺点:
- CPU 在信息传送过程中要花费很多时间来查询和等待
- 在一段时间内只能和一台外设交换信息,效率大大降低
- 独占查询:一旦设备被启动,CPU 就一直持续查询接口状态,CPU 花费 100% 的时间用于 I/O 操作,此时外设和 CPU 完全串行工作
- 定时查询:CPU 周期性查询接口状态,在此期间可以干其他的事情,每次总是等到条件满足才进行一个数据的传送,传送完成后返回到用户程序【时间间隔与设备的数据传输速率有关】
2、程序中断方式
(1)基本概念
- 在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU 暂停中止现行程序而转去对这些异常情况或特殊请求进行处理,处理完毕后再返回到现行程序的断点处,继续执行原程序
- 早期的中断技术就是为了处理数据传送
- 中断响应阶段 CPU 进行的操作:关中断,保护断点和程序状态,识别中断源
- 多重中断系统在保护被中断进程现场时关中断,执行中断程序时开中断
- CPU 一般在一条指令执行结束的阶段采样中断请求信号,查看是否存在中断请求,然后决定是否响应中断
- 中断隐指令的工作:关中断+保存断点+引出中断服务程序
- 通用寄存器的保护由中断服务程序完成
- 中断优先级由屏蔽字决定,而不是根据请求的先后次序
- 有中断请求时,如果是关中断的姿态,或新中断请求的优先级较低,则不能响应新的中断请求
(2)中断技术的主要功能
- 实现 CPU 和 I/O 设备的并行工作
- 处理硬件故障和软件错误
- 实现人机交互,用户干预机器需要用到中断系统
- 实现多道程序、分时操作,多道程序的切换需要借助于中断系统
- 实时处理需要借助中断系统来实现快速相应
- 实现应用程序和操作系统(管态程序)的切换,称为软中断
- 多处理器系统中各处理器之间的信息交流和任务切换
(3)程序中断方式的主要思想
- CPU 在程序中安排好在某个时机启动某台外设
- 然后 CPU 继续执行当前的程序,不需要像查询方式那样等待外设准备就绪
- 一旦外设完成数据传送的准备工作,就主动向 CPU 发出中断请求,请求 CPU 为自己服务
- 在可以响应中断的条件下,CPU 暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU 回到原来的程序

(4)程序中断的基本流程
1)中断请求
- 中断源是请求 CPU 中断的设备或事件【一台计算机允许有多个】
- 中断系统对每个中断源设置中断请求标记触发器【1 表示有请求】
- 这些触发器组成中断请求标记寄存器【可集中在 CPU 中,也可分散在各个中断源中】
- 可屏蔽中断:INTR 线发出,关中断模式下不被响应
- 不可屏蔽中断:NMI 线发出,如时钟中断、电源掉电
2)中断响应判优
- 通过硬件排队器实现
- 不可屏蔽中断 > 内部异常 > 可屏蔽中断
- 内部异常中,硬件故障 > 软件中断
- DMA 中断请求 > I/O 设备传送的中断请求
- 在 I/O 传送类中断请求中,高速设备 > 低速设备
- 输入设备优先于输出设备,实时设备 > 普通设备
- 注意:中断优先级包括响应优先级和处理优先级
- 响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变
- 处理优先级可有中断屏蔽技术动态调整,以实现多重中断
3)CPU 响应中断的条件
- 中断源有中断请求
- CPU 允许中断与开中断(异常和不可屏蔽中断不受此影响)
- 一条指令执行完毕(异常不受此限制),且没有更紧迫的任务
- 注意:CPU 响应中断的时间是在每条指令执行阶段的结束时刻【仅指 I/O 中断】
4)中断响应过程
- 中断隐指令:硬件的一系列自动操作,用于执行中断服务程序【并不是指令系统中的一条真正的指令】
- 关中断:在保护程序的断点和现场信息过程中,不能响应更高级中断源的中断请求
- 保存断点:将原程序的断点保存在栈或特定寄存器中【中断的断点是下一条指令的地址】【异常程序的断点是当前指令地址,需要重新执行】
- 引出中断服务程序:识别中断源,将对应的服务程序入口地址送入 PC
5)中断向量
- 中断识别分为向量中断【硬件向量法】和非向量中断【软件查询法】两种
- 每个中断源有一个唯一的类型号
- 每个中断类型号对应一个中断服务程序
- 每个中断服务程序都有一个入口地址,即中断向量
- 中断向量表:存储系统中的全部中断向量
- 中断向量法【硬件向量法】:CPU 响应中断后,通过识别中断源获得中断类型号然后据此计算出对应中断向量的地址;再根据该地址从中断向量表中取出中断服务程序的入口地址,并送入 PC,以转而执行中断服务程序
- 采用中断向量法的中断被称为向量中断
- 注意:
- 中断请求和响应信号是在 I/O 总线的控制线上传送
- CPU 响应某一中断后,就从数据线上获取该中断源的中断类型号,并计算对应中断向量在中断向量表中的位置
6)中断处理过程

(5)多重中断和中断屏蔽技术
1)单重中断和多重中断
- 单重中断:若CPU在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,而CPU对新的中断请求不予响应
- 多重中断【中断嵌套】:若 CPU 在执行中断服务程序的过程中,又出现了新的更高优先级的中断请求,CPU 暂停现行的中断服务程序,转去处理新的中断请求

2)中断屏蔽技术
- 中断屏蔽技术主要用于多重中断,CPU 要具备多重中断的功能,要满足:
- 在中断服务程序中提前设置开中断指令
- 优先级别高的中断源有权中断优先级别低的中断源
- 每个中断源都有一个屏蔽触发器(MASK),1 表示屏蔽该中断源的请求,0 表示可以正常请求
- 所用 MASK 组合在一起便构成一个屏蔽字寄存器,寄存器的内容称为屏蔽字
- 屏蔽字中 1 越多,优先级越高
- 每个屏蔽字中至少有一个 1【至少能屏蔽自身的中断】

3、DMA 方式
(1)基本概念
- 一种完全由硬件进行成组信息传送的控制方式
- 在数据准备阶段,CPU与外设并行工作,在外设与内存之间开辟一条“直接数据通路”
- 信息传送不再经过CPU(也就不需要保护、恢复CPU现场等操作),降低了CPU在传送数据时的开销
- 被称为直接存储器存取方式
- 适用于磁盘、显卡、声卡、网卡等高速设备大批量数据的传送,硬件开销大
- DMA 方式中,中断的作用仅限于故障和正常传送结束时的处理
(2)DMA 方式的特点
- 主存既可以被 CPU 访问,也可被外设访问
- 在数据块传送时,主存地址的确定、传送数据等都由硬件电路直接实现
- 主存中要开辟专用缓冲区,及时供给和接收外设的数据
- DMA 传送速度快,CPU 和外设并行工作,提高了系统效率
- DMA 在传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理
(3)DMA 控制器
1)定义
- DMAC 又叫 DMA 控制器(DMA 接口),是对数据传送过程进行控制的硬件
- 在 DMA 过程中,DMAC 将接管 CPU 的地址总线、数据总线和控制总线,CPU 的主存控制信号被禁用
2)功能
- 接收外设发出的 DMA 请求,并向 CPU 发出总线请求
- CPU 响应此总线请求,发出总线响应信号,DMA接管总线控制权,进入 DMA 操作周期
- 确定传送数据的主存单元地址及长度,并自动修改主存地址计数和传送长度计数
- 规定数据在主存和外设间的传送方向,发出读写等控制信号,执行数据传送操作
- 向 CPU 报告 DMA 操作结束
3)组成
- 主存地址计数器:存放要交换数据的主存地址
- 传送长度计数器:记录传送数据的长度(总字数)。每传送一个字,计数器就减 1,直至计数器为 0,表示该批数据传送完毕
- 数据缓冲寄存器:暂存每次传送的数据【DMA 接口与主存之间的传送单位为字,DMA 与设备之间的传送单位可能为字节或位】
- DMA 请求触发器:每当 I/O 设备准备好数据后,给出一个控制信号,使 DMA 请求触发器置位
- “控制/状态”逻辑:由控制和时序电路及状态标志组成,用于指定传送方向,修改传送参数,并对 DMA 请求信号、CPU 响应信号进行协调和同步
- 中断机构:当一个数据块传送完毕后触发中断机构,向 CPU 提出中断请求

(4)传送方式
1)停止 CPU 访问
- 定义:当 I/O 设备有 DMA 请求时,由 DMA 接口向 CPU 发送一个停止信号,使 CPU 放弃总线控制权,停止访问主存,直到 DMA 传送一块数据结束

- 优点:控制简单,适用于数据传输速率很高的 I/O 设备实现成组数据的传送
- 缺点:DMA 访问主存时,CPU 基本上处于不工作状态
2)周期挪用
- 定义:由于 I/O 访存的优先级高于 CPU 访存(I/O 不立即访存就可能丢失数据),因此由 I/O 设备挪用一个存取周期,传送完一个数据字后立即释放总线【单字传送方式】
- I/O 设备有 DMA 请求时,会遇到 3 种情况:
- 此时 CPU 不访存
- CPU 正在访存,待存取周期结束后,CPU 再将总线占有权让出
- I/O 和 CPU 同时请求访存,CPU 要暂时放弃总线占有权

- 优点:既实现了 I/O 传送,又较好地发挥了主存与 CPU 的效率
- 缺点:每挪用一个主存周期,DMA 接口都要申请、建立和归还总线控制权
3)DMA 与 CPU 交替访问
- 定义:将 CPU 的工作周期分成两个时间片,一个给 CPU 访存,另一个给 DMA 访存,这样在每个周期内,CPU 和 DMA 就都可以轮流访存
- 总线使用权分时控制

- 优点:不需要申请、建立和归还总线控制权,具有很高的传送速率
- 缺点:相应的硬件逻辑变得更复杂
(5)传送过程
- 预处理:由 CPU 完成一些必要的准备工作
- 首先,初始化 DMA 控制器的有关寄存器、设置传送方向、测试并启动设备等
- 然后,CPU 继续执行原程序,直到 I/O 设备准备好发送的数据或接收的数据时,I/O 设备向 DMA 控制器发送 DMA 请求
- DMA 控制器向 CPU 发出总线请求【这两个过程可统称为 DMA 请求】
- 数据传送:
- 以数据块为基本传送单位
- DMA 占用总线后的数据输入/输出操作通过循环实现【DMA 控制器】
- 后处理:
- DMA 控制器 向 CPU 发出中断请求
- CPU 执行中断服务程序做 DMA 结束处理
- 后处理包括:
- 校验送入主存的数据是否正确
- 测试传送过程中是否出错(错误则转诊断程序)
- 决定是否继续使用 DMA 传送其他数据等

4、各种方式的比较


- 作者:救赎之旅
- 链接:https://jiushuself.nyc.mn/article/e1b33bd8-89ed-4de5-81ba-ce18e6dedc3d
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。