第 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 方式靠硬件传送。
强化
- IO接口的功能和特性
功能:实现主机和外设间的通信联络控制、地址译码、设备选择、数据缓冲、信号格式转换、传送控制命令和状态信息
组成:数据缓冲寄存器、状态/控制寄存器、地址译码和IO控制逻辑
- IO接口的数据线上传输的内容
数据线:读/写数据、状态信息、控制信息(命令字)和中断类型号
地址线:访问IO接口中寄存器的地址
控制线:读写控制信号、中断请求和响应信号、仲裁信号和握手信号
- IO接口和IO端口的区别
IO端口:可被CPU直接访问的寄存器,有数据端口、状态端口和控制端口
- IO端口编址方式和IO指令的作用
独立编址:设置专门的IO指令,IO指令的地址码给出IO端口号
统一编制:和主存一起统一编址,将主存中的一部分地址分为IO端口,不需要额外的IO指令
- 程序查询方式
CPU周期性的执行程序查询设备状态。
独占查询、独占查询
计算程序查询方式下CPU用于IO外设的时间占CPU总时间的百分比
IO查询所需时钟周期数 / CPU主频
- 程序中断方式
程序中断:在计算机执行现行程序的过程中,出现某些急需理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
工作流程:
1.中断请求:中断源向CPU发送中断请求信号
2.中断响应:响应中断的条件;中断判优:多个中断源同时提出请求时通过中断判优逻辑响应一个中断源。
3.中断处理:中断隐指令。中断服务程序。
陷阱:有意而为之的异常,如系统调用
故障:由错误条件引起的,可能被故障处理程序修复,如缺页
终止:不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如整数除0
非屏蔽中断:关中断(中断标志位IF=0)时也会被响应
可屏蔽中断:关中断时不会被响应
中断请求标记:每个中断源向CPU发出中断请求的时间是随机的。为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR。当其状态为“1”时,表示中断源有请求。这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号(对于执行时间很长的指令,可在执行过程中设置若干个“查询断点”),以获取的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
CPU响应中断必须满足以下3个条件:
1.中断源有中断请求。2.CPU允许中断即开中断。3.一条指令执行完毕,且没有更紧迫的任务。
中断判优:既可以用硬件实现,也可用软件实现(硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中;软件实现是通过查询程序实现的) 优先级:1.硬件故障中断属于最高级,其次是软件中断;2.非屏蔽中断优于可屏蔽中断;3.DMA请求优于设备传送的中断请求;4.高速设备优于低速设备;5.输入设备优于输出设备;6.实时设备优于普通设备。
中断处理过程:
1.当前指令执行结束后,pc内容为K+1
2.进入中断服务程序的方法是把该程序第一条指令的地址放入pc
3.回到主程序的方法是把K+1放入pc
4.软件无法完成保存pc的任务,应由硬件实现:中断隐指令
中断隐指令的主要任务: 1.关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
2.保存断点(PC)。为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(pc)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
3.引出中断服务程序。实质就是取出中断服务程序的入口地址并传送给程序计数器(pc)。软件查询法;硬件向量法(由硬件产生向量地址再由向量地址找到入口地址)
中断服务程序的主要任务:
1.保护现场:一是保存程序断点(PC),己由中断隐指令完成;二是保存通用寄存器和状态寄存器的内容,由中 断服务程序完成。可以使用堆,也可以使用特定存储单元。
2.中断服务(设备服务):主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中。
3.恢复现场:通过出栈指令或取数指令把之前保存的信息送回寄存器中。
4.中断返回:通过中断返回指令回到原程序断点处。
单重中断:执行中断服务程序时不响应新的中断请求。
多重中断:又称中断嵌套,执行中断服务程序时可响应新的中断请求。
中断屏蔽技术:主要用于多重中断,CPU要具备多重中断的功能,须满足下列条件。
1.在中断服务程序中提前设置开中断指令。
2.优先级别高的中断源有权中断优先级别低的中断源。
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
屏蔽触发器与屏蔽字
对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字。屏蔽字与中断源的优先级别是一一对应的,在中断服务程序中设置适当的屏蔽字,能对优先级别不同的中断源的进行屏蔽例如:1级中断源的请求已被CPU响应,若在其中断服务程序中(通常在开中断指令前)设置一个全“I"的屏蔽字,便可保证在执行1级中断服务程序过程中,CPU不再响应任何一个中断源(包括本级在内)的中断请求,即此刻不能实现多重中断。如果在4级中断源的服务程序中设置一个屏蔽字0001111111,由于第1-3位为0,意味着第1-3级的中断源未被屏蔽,因此在开中断指令后,比第4级中断源级别更高的1、2、3级中断源可以中断4级中断源的中断服务程序,实现多重中断。采用了屏蔽技术后,可以改变CPU处理各中断源的优先等级,从而改变CPU执行程序的轨迹
- DMA方式
DMA控制器的特点:数据不经过CPU,不需要保护、恢复现场等操作,DMA控制直接与主存传输数据,期间独占系统总线,可与CPU并行工作
DMA控制器的组成
DMA控制传送方式:停止CPU访问、周期性挪用、DMA与CPU交替访问
DMA传送过程:预处理、数据传送、后处理
CPU用于DMA的时间占CPU总时间的多少
DMA和中断方式的区别
DMA和CPU请求总线的优先级对比