第 7 章 输入/输出系统
I/O 接口
I/O 接口(也称 I/O 控制器)是主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换
I/O 接口的功能
进行地址译码和设备选择。CPU 送来选择外设的地址码后,接口必须对地址进行译码以 产生设备选择信息,使主机能和指定外设交换信息。
实现主机和外设的通信联络控制。解决主机与外设时序配合问题,协调不同 工作速度的 外设和主机之间交换信息,以保证整个计算机系统能统一、协调地工作。
实现数据缓冲。CPU 与外设之间的速度往往不匹配,为消除速度差异,接口必须设置数 据缓冲寄存器,用于数据的暂存,以避免因速度不 一致而丢失数据。
信号格式的转换。外设与主机两者的电平、数据格式都可能存在差异,接口应提供主机与外设的信号格式的转换功能,如电平转换、并/串或串/并转换、模/数或数/模转换等。
传送控制命令和状态信息。CPU 要启动某外设时,通过接口中的命令寄存器向外设发出启动命令;外设准备就绪时,则将“准备好”状态信息送回接口中的状态寄存器,并反馈给 CPU。外设向 CPU 提出中断请求时,CPU 也应有相应的响应信号反馈给外设
I/O 接口的基本结构
I/O 端口与 CPU 交换的内容
I/O 接口在主机侧通过 1/O 总线与内存、CPU 相连。数据缓冲寄存器用来暂存与 CPU 或内存之间传送的数据信息,状态寄存器用来记录接口和设备的状态信息,控制寄存器用来保存 CPU 对外设的控制信息。状态寄存器和控制寄存器在传送方向上是相反的,在访问时间上也是错开的,因此可将它们合二为 一
I/O 接口的数据线上传输的内容
I/O 接口中的数据线传送的是读/写数据、状态信息、控制信息和中断类型号。地址线传送的是要访问 I/O 接口中的寄存器的地址。控制线传送的是读/ 写控制信号,以确认是读寄存器还是写寄存器,此外控制线还会传送中断请求和响应信号、仲裁信号和握手信号。
数据缓冲寄存器、状态/控制寄存器的访问操作是通过相应的指令来完成的,通常称这类指 令为 I/O 指令,I/O 指令只能在操作系统内核的底层 I/O 软件中使用,它们是一种特权指令。
I/O 接口的类型
从不同的角度看,I/O 接口可以分为不同的类型。
按数据传送方式(外设和接口 一侧),可分 并行接口(一字节或 一个字的所有位同时传 送)和串行接口(一位 一位地有序传送),接口要完成数据格式的转换。
按主机访问 I/ O 设备的控制方式,可分为程序查询接口、中断接口和 DMA 接口等。
按功能选择的灵活性,可分为可编程接口(通过编程改变接口功能)和不可编程接口。
I/O 端口及其编址
I/O 端口是指 I/0 接口电路中可被 CPU 直接访问的寄存器,主要有数据端口、状态端口和控 制端口。
端口和接口是两个不同的概念,端口是指接口电路中可以进行读/写的寄存器。
I/O 端口要想能够被 CPU 访问,就必须要对各个端口进行编址,每个端口对应一个端口地址。而对 I/O 端口的编址方式有与存储器独立编址和统一编址两种。
- 独立编址
独立编址也称 I/O 映射方式,是指对所有的 I/O 端口单独进行编址。I/O 端口的地址空间与主存地址空间是两个独立的地址空间,它们的范围可以重叠,相同地址可能属于不同的地址空间。因此需设置专门的 I/O 指令来表明访问的是 I/O 地址空间,I/O 指令的地址码给出 1/O 端口号。
- 统一编址
统一编址也称存储器映射方式,是指把主存地址空间分出一部分给 I/O 端口进行编址,I/0 端口和主存单元在同一地址空间的不同分段中,根据地址范围就能区分访问的是 I/O 端口还是主存单元,因此无须设置专门的 I/O 指令,用统一的访存指令就可访问 1/O 端口。
I/O 方式
输入/输出系统实现主机与 I/O 设备之间的数据传送,可以采用不同的控制方式,各种方式在代价、性能、解决间题的着重点等方面各不相同,常用的 I/0 方式有程序查询、程序中断和 DMA 等,其中前两种方式更依赖于 CPU 中程序指令的执行
程序查询方式
程序查询方式的工作流程如下:
CPU 执行初始化程序,并预置传送参数。
向 I/ O 接又发出命令字,启动 I O 设备。
从外设接又读取其状态信息。
CPU 周期或持续的查询设备状态,直到外设准备就绪。
传 送 一次 数 据 。
修改地址和计数器参数。
判断传送是否结束,若未结束转第 3 步,直到计数器为 0。
根据上述流程 4 中查询方式的不同,程序查询方式可分为如下两类。
独占查询。一旦设备被启动,CPU 就一直持续查询接又状态,CPU 花费 100%的时间用 于 1/O 操作,此时外设和 CPU 完全串行工作。
定时查询。CPU 周期性地查询接又状态,每次总是等到条件满足才进行一个数据的传送, 传送完成后返回到用户程序。定时查询的时间间隔与设备的数据传输速率有关
程序中断方式
- 程序中断的基本概念
程序中断方式的思想:CPU 在程序中安排好在某个时机启动某台外设 ,然后 CPU 继续执行当前的程序,不需要像查询方式那样一直等待外设准备就绪。一旦外设完成数据传送的准备工作,就主动向 CPU 发出中断请求。在可以响应中断的条件下,CPU 暂时中止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU 返回原来的程序。
- 程序中断的工作流程
(1)中断请求
中断源是请求 CPU 中断的设备或事件,一台计算机允许有多个中断源。每个中断源向 CPU 发出中断请求的时间是随机的。为记录中断事件并区分不同的中断源,中断系统需对每个中断源 设置中断请求标记触发器,当其状态为“ 1” 时,表示该中断源有请求。这些触发器可组成中断 请求标记寄存器,该寄存器可集中在 CPU 中,也可分散在各个中断源中。
通过 INTR 线发出的是可屏蔽中断,通过 NMI 线发出的是不可屏蔽中断。
(2)中断响应判优
中断响应优先级是指 CPU 响应中断请求的先后顺序
不可屏蔽中断>内部异常>可屏蔽中断
在内部异常中,硬件故障>软件中断
DMA 中断请求>I/0 设备的中断请求
在 1/O 传送类中断请求中,高速设备>低速设备; 输入设备>输出设备; 实时设备 >普通设备 。
(3)CPU 响应中断的条件
CPU 响应中断必须满足以下 3 个条件:
1、中断源有中断请求。
2、CPU 允许中断及开中断 (异常和不可屏蔽中断不受此限制)。
3、一条指令执行完毕 (异常不受此限制),且没有更紧迫的任务。
(4)中断响应的过程
CPU 响应中断后,经过某些操作,转去执行中断服务程序。这些操作是由硬件直接实现的, 我们将它称为中断隐損令。中断隐指令并不是指令系统中的一条真正的指令,只是一种虚拟的说法,本质上是硬件的一系列自动操作。它所完成的操作如下:
1、关中断。CPU 响应中断后,首先要保护程序的断点和现场信息,在保护断点和现场的过程中,CPU 不能响应更高级中断源的中断请求。否则,若断点或现场保存不完整,在中断服务程序结束后,就不能正确地恢复并继续执行现行程序。
2、保存断点。为保证在中断服务程序执行完后能正确地返回到原来的程序,必须将原程序的断点(指令无法直接读取的 PC 和 PSW 的内容对程序员透明)保存在找或特定寄存器中。注意异常和中断的差是:异常指令通常并没有执行成功,异常处理后要重新执行,所以其断点通常是当前指令的地址。中断的断点则是下一条指令的地址。
3、引出中断服务程序。识别中断源,将对应的服务程序入又地址送入程序计数器 PC。有两种方法识别中断源:硬件向量法和软件查询法。本节主要讨论比较常用的向量中断。
(5)中断向量
中断识别分为向量中断和非向量中断两种。非向量中断即软件查询法
中断识别分为向量中断和非向量中断两种。非向量中断即软件查询法,第 5 章已介绍。 每个中断源都有 一个唯 一的类型号,每个中断类型号都对应 一个中断服务程序,每个中断服 务程序都有一个入又地址,即中断向量,CPU 必须找到入又地址。把系统中的全部中断向量集中 存放到存储器的某个区域内,这个存放中断向量的存储区就称为中断向量表。
CPU 响应中断后,通过识别中断源获得中断类型号,然后据此计算出对应中断向量的地址: 再根据该地址从中断向量表中取出中断服务程序的入又地址,并送入程序计数器 PC,以转去执行中断服务程序,这种方法被称为中断向量法,采用中断向量法的中断被称为向量中断。
(6)中断处理过程
所示为一个可嵌套中断的典型处理流程
中断处理流程如下:
中断处理流程如下: 1️⃣ 关中断。
2️⃣ 保存断点。
3️⃣ 中断服务程序寻址。
4️⃣ 保存现场和屏蔽字。进入中断服务程序后首先要保存现场和中断屏蔽字,现场信息是指用户可见的工作寄存器的内容,它存放程序执行到断点处的现行值。
现场和断点,这两类信息都不能被中断服务程序破坏。由于现场信息用指令可直接访问, 因此通常在中断服务程序中通过指令把它们保存到栈中,即由软件实现 。而断点信息由 CPU 在中断响应时自动保存到栈或指定的寄存器中,即由硬件实现。
5️⃣ 开中断。允许更高级中断请求得到响应,以实现中断嵌套。
6️⃣ 执 行中断服 务程序。这是中断请求的目的。
7️⃣ 关中断。保证在恢复现场和屏蔽字时不被中断。
8️⃣ 恢复现场和屏蔽字。将现场和屏蔽字恢复到原来的状态。
9️⃣ 开中断、中断返回。中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便 继续执行原程序。
1~3 由中断隐指令(硬件自动)完成: 4~ 9 由中断服务程序完成。
- 多重中断和中断屏蔽技术
DMA 方式
DMA 方式是一种完全由硬件进行成组信息传送的控制方式,它具有程序中断方式的优点,即在数据准备阶段,CPU 与外设并行工作。DMA 方式在外设与内存之间开辟了一条“真接数据通路”,信息传送不再经过 CPU,降低了 CPU 在传送数据时的开销,因此称为直接存储器存取方式。由于数据传送不经过 CPU,因此不需要保护、恢复 CPU 现场等烦琐操作。
DMA 方式的特点
DMA 控制器的组成
- DMA 的传送方式
(1)停止 CPU 访存
当 I/O 设备有 DMA 请求时,由 DMA 接又向 CPU 发送一个停止信号,使 CPU 放弃总线控制权,停止访问主存,直到 DMA 传送一块数据结束
(2)周期挪用
由于 I/0 访存的优先级高于 CPU 访存(I/0 不立即访存就可能丢失数据),因此由 I/O 设备挪用一个存取周期,传送完一个数据字后立即释放总线
(3)DMA 与 CPU 交替访问
将 CPU 的工作周期分成两个时间片,一个给 CPU 访存,另一个给 DMA 访存,这样在每个 CPU 周期内,CPU 和 DMA 就都可以轮流访存
按照时钟周期数理解的话,一秒 DMA 传送需要的周期数比一秒计算机主频振动次数就是这个百分比了 这里 1 秒可充满 40000 次 所以需要 40000 次预处理和后处理 再比上一秒计算机主频 即为占比
- DMA 的传送过程
DMA 的数据传送氛围预处理、数据传送和后处理 3 个阶段。
(1)预处理
由 CPU 完成一些必要的准备工作。首先,初始化 DMA 控制器中的有关寄存器、设置传送方向、测试并启动设备等。然后,CPU 继续执行原程序,直到 I/O 设备准备好发送的数据(输入情况)或接收的数据(输出情况)时,I/O 设备向 DMA 控制器发送 DMA 请求,再由 DMA 控制器向 CPU 发出总线请求(这两个过程也可统称 DMA 请求),用以传输数据
(2)数据传送
DMA 以数据块为基本传送单位。DMA 占用总线后的数据输入/输出操作都是通过循环来实现的,这一循环也是由 DMA 控制器实现的,即数据传送阶段完全由 DMA(硬件)控制。
(3)后处理
DMA 控制器向 CPU 发送中断请求,CPU 执行中断服务程序做 DMA 结束处理,包括校验数据(出错则转诊断程序)等后处理工作。
- DMA 方式和中断方式的区别
DMA 方式和中断方式的重要区别如下:
1、中断方式是程序的切换,需要保护和恢复现场:而 DMA 方式不中断现行程序,无需保护现场,除了预处理和后处理,其他时候不占用任何 CPU 资源。
2、对中断请求的响应只能发生在每条指令执行结束时(执行周期后);而对 DMA 请求的响应可以发生在任意一个机器周期结束时(取指、间址、执行周期后均可)。
3、中断传送过程需要 CPU 的干预;而 DMA 传送过程不需要 CPU 的干预,因此数据传输速率非常高,适合于高速外设的成组数据传送。
4、DMA 请求的优先级高于中断请求。
5、中断方式具有处理异常事件的能力,而 DMA 方式仅局限于大批数据的传送。
6、从数据传送来看,中断方式靠程序传送,DMA 方式靠硬件传送。