7.3 I/O方式
输入/输出系统实现主机与I/O设备之间的数据传送,可采用不同的控制方式。各种方式在硬件代价、系统性能及适用场景等方面各有侧重。常用的I/O方式包括程序查询、程序中断和DMA等,其中前两种方式高度依赖CPU执行程序指令来完成控制。
7.3.1 程序查询方式
在程序查询方式中,数据交换的控制完全由CPU通过执行程序实现。接口电路通常包含一个数据缓冲寄存器(数据端口)和一个设备状态寄存器(状态端口)。主机进行I/O操作时,首先读取设备状态,并据此决定是立即传送数据还是继续等待。
程序查询方式的工作流程如下:
- CPU执行初始化程序,预置传送参数(如起始地址、数据量等)。
- 向I/O接口发送命令字,启动外设。
- 循环读取外设状态寄存器。
- 若设备未就绪,则继续查询;若就绪,则执行一次数据传送。
- 修改地址和计数器参数。
- 判断传送是否完成,若未完成则返回步骤3.,直至计数器归零。
根据查询策略的不同,程序查询方式可分为两类:
独占查询。一旦启动外设,CPU便连续不断地查询其状态,直至操作完成。在此期间,CPU无法执行其他任务,处于忙等待状态,导致CPU与外设完全串行工作。定时查询。CPU以固定时间间隔周期性地查询外设状态。每次查询时,若设备已就绪,则传送一个数据单元,随后返回用户程序继续执行。查询间隔需根据外设的数据传输速率合理设置,以避免数据丢失。
【例7.1】 假设计算机主频为500MHz,CPI为4,某外设的数据传输速率为2MB/s,其I/O接口配备一个32位数据缓冲寄存器。采用定时查询方式,每次查询操作执行10条指令。问:CPU最多间隔多长时间查询一次,才能避免数据丢失?此时CPU用于该外设I/O的时间占总时间的百分比至少为多少?
解:
由于端口缓冲区容量有限,必须在外设填满该缓冲区前完成读取,否则新数据将覆盖未读取的旧数据,造成丢失。外设填满(4字节)缓冲区所需时间为 。因此,CPU最多每隔 就需查询一次,即每秒至少查询 次。每次查询执行10条指令,每条指令平均消耗4个时钟周期,故每秒用于I/O的时钟周期数为 ;CPU主频为500MHz(每秒 个时钟周期),因此I/O时间占比为 。
程序查询方式的优点是设计简单、硬件开销小。缺点是CPU需耗费大量时间进行查询与等待,且在同一时间段内只能与一台外设通信,导致CPU与外设串行工作,效率很低。
7.3.2 程序中断方式
1. 程序中断的基本概念
程序中断是指在计算机执行程序的过程中,当出现某些急需处理的外部事件或内部异常时,CPU暂停当前程序的执行,转去处理该事件或异常;处理完毕后,再返回到原程序的断点处继续执行。中断技术最初被用于实现主机与I/O设备之间的异步通信。
随着计算机系统的发展,中断技术被赋予了多种重要功能,主要包括:
- 实现CPU与I/O设备的并行工作。
- 处理硬件故障和软件异常。
- 支持人机交互(如键盘输入、鼠标点击)。
- 支撑多道程序与分时操作系统的任务切换。
- 满足实时系统对快速响应的需求。
- 实现用户程序向操作系统的切换(如通过软中断或系统调用指令)。
- 在多处理器系统中协调各处理器间的通信与任务迁移。
中断的基本工作思想:当前进程发起I/O操作时,会启动相应外设,并主动进入阻塞状态;CPU随即转而执行就绪队列中的另一进程,实现外设与CPU的并行工作。外设完成数据准备后,主动向CPU发出中断请求。CPU响应后,暂停当前指令流,保存现场,并转入中断服务程序,完成主机与外设之间的数据传送。数据传送结束后,CPU恢复被中断进程的现场,并返回断点处继续执行。此后,外设与CPU再次并行工作。
【例7.2】 假设计算机主频为500MHz,CPI为4,某外设的数据传输速率为40MB/s,其I/O接口配备一个32位数据缓冲寄存器。在中断I/O方式下,若每次中断响应与中断处理共需至少400个时钟周期,则该外设能否采用中断I/O方式?为什么?
解:
中断响应与中断处理所需时间为 。外设填满(4B)缓冲区所需时间为 。由于外设准备数据的时间()远小于中断处理时间(),若采用每32位触发一次中断的方式,则新数据将在CPU处理完前次中断前就已到达,导致缓冲区被覆盖而丢失数据。因此,该高速外设不适合直接使用单字中断方式。
2. 程序中断的工作流程
(1) 中断请求
中断源是指能够向CPU发出中断请求的设备或事件。一台计算机允许多个中断源同时存在,且各中断源发出请求的时间具有随机性。为记录并区分不同的中断请求,中断系统为每个中断源设置一个中断请求标记触发器:当其状态为“1”时,表示该中断源有中断请求。这些触发器可组成中断请求标记寄存器,该寄存器可集中置于CPU内部,也可分散在各个中断源中。
通过INTR信号线发出的是可屏蔽中断,通过NMI信号线发出的是不可屏蔽中断。可屏蔽中断的优先级较低,在关中断状态下不被响应;不可屏蔽中断用于处理紧急且关键的硬件事件(如电源掉电、总线错误等),其优先级最高,且不受中断允许标志的影响。
(2) 中断响应判优
中断响应优先级是指CPU响应多个同时发生的中断请求的先后顺序。由于中断请求具有随机性,当多个中断源同时提出请求时,需通过中断判优逻辑确定优先响应哪个中断源的请求。中断响应的判优通常由硬件排队器(或中断查询程序)实现。
一般来说
- 不可屏蔽中断 可屏蔽中断;
- 在I/O传送类中断请求中,高速设备 低速设备;输入设备 输出设备;实时设备 普通设备。
NOTE中断优先级包括响应优先级和处理优先级。响应优先级由硬件线路或查询顺序固定决定,不可动态更改;处理优先级可通过中断屏蔽技术动态调整,以支持多重中断(中断嵌套)。二者的关系可概括为:只有未被屏蔽的中断请求,才会被送入中断判优电路参与响应优先级的判定。
(3) CPU响应中断的条件
CPU仅在满足特定条件时才会响应中断请求,并经过一些特定的操作,转去执行中断服务程序。CPU响应中断必须满足以下三个条件:
- 存在有效的中断请求。
- CPU处于开中断状态(中断允许标志为1;异常和不可屏蔽中断不受此限制)。
- 当前指令已执行完毕(异常不受此限制),且无更高优先级任务待处理。
NOTEI/O设备的就绪时间是随机的,而CPU仅在每条指令执行结束时统一采样中断请求信号(前提是开中断)。因此,CPU响应I/O中断的时机总是发生在某条指令执行完成之后。此处所述中断特指I/O中断,不包括异常。
(4) 中断响应过程
CPU响应中断后,由硬件自动完成一系列操作(称为中断隐指令),随后转入中断服务程序。中断隐指令并非指令系统中的真实指令,而是对硬件自动操作的统称,主要包括以下步骤:
关中断。CPU响应中断后,首先关闭中断允许标志,禁止响应任何可屏蔽中断(包括更高优先级者),以防止在保存断点和现场时被新中断打断;否则,现场信息可能不完整,导致中断返回后无法正确恢复原程序的执行。保存断点。为保证中断返回后能正确恢复原程序执行,需将程序计数器(PC)和程序状态字(PSW)等关键现场信息保存至栈或专用寄存器中。中断与异常的差异:中断发生于指令执行完成后,断点为下一条指令地址;故障类异常(如缺页、除零)因指令未完成,处理后需重新执行当前指令,断点为当前指令地址;陷阱类异常(如系统调用)在指令成功执行后触发,断点为下一条指令地址。引出中断服务程序。通过识别中断源,将对应中断服务程序的入口地址送入程序计数器PC。识别方法主要有硬件向量法和软件查询法,本节主要讨论更常用的硬件向量中断法。
(5) 中断向量
中断识别分为向量中断和非向量中断两类。非向量中断采用软件查询法,已在第5章介绍。
在向量中断中,每个中断源被分配一个唯一的中断类型号,该类型号对应一个中断服务程序的入口地址,此地址称为中断向量。系统将所有中断向量集中存放在内存的特定区域,该区域称为中断向量表。
CPU响应中断后,首先在中断响应阶段从数据总线获取该中断源的中断类型号,然后据此计算出对应中断向量在中断向量表中的地址;接着从中断向量表中读取该中断向量,并送入程序计数器PC,从而转入对应的中断服务程序。这种基于中断向量表实现转移的方法称为中断向量法,采用该方法的中断即为向量中断。
NOTE中断请求和响应信号通过I/O总线的控制线传输,而中断类型号则在中断响应阶段由中断控制器经数据总线提供给CPU,用于定位中断向量表中的相应表项。
(6) 中断处理过程
不同计算机的中断处理过程各具特色。
中断处理流程如下:
关中断。防止在保存关键信息过程中被新中断打断。保存断点。由硬件自动将断点信息保存至栈或专用寄存器。中断服务程序寻址。通过中断类型号获取服务程序入口地址,并送入PC。保存现场和中断屏蔽字。通过软件指令将现场信息和中断屏蔽字压入栈中,以便后续恢复。现场信息是指CPU中可能被中断服务程序修改且需恢复的寄存器内容。
NOTE断点与现场信息均不可被中断服务程序破坏。由于现场信息用指令可直接访问,因此由软件在进入中断服务程序时显式保存。而断点信息由硬件在中断响应阶段自动保存。
开中断。由开中断指令实现,允许更高优先级的中断请求被响应,从而实现中断嵌套。执行中断服务程序。关中断。由关中断指令实现,确保在恢复现场和中断屏蔽字的过程中不被中断。恢复现场和中断屏蔽字。从栈中恢复寄存器内容及中断屏蔽状态。开中断、中断返回。中断服务程序的最后一条指令通常为中断返回指令,用于恢复断点现场并返回原程序继续执行。
其中,1~3由中断隐指令(硬件自动)完成;4~9由中断服务程序(软件)完成。
NOTE对于单重中断(不支持嵌套),上述流程中省略5(开中断)和7(关中断)即可。
3. 多重中断和中断屏蔽技术
在CPU执行中断服务程序的过程中,若出现新的更高优先级中断请求,而CPU不予响应,则称为单重中断;若CPU暂停当前中断服务程序,转去处理新中断,则称为多重中断(也称中断嵌套)。
CPU执行主程序时收到中断请求1。由于主程序未屏蔽任何中断,CPU响应该中断请求,将主程序断点保存至栈中,并转入中断服务程序1。在执行中断服务程序1期间,若发生优先级更高的中断请求2,CPU会暂停中断服务程序1,将其断点保存至栈中,并转入中断服务程序2。类似地,更高优先级的中断请求3可打断中断服务程序2。当中断请求3处理完毕后,CPU从栈顶恢复断点,返回至中断服务程序2的断点(K3+1)处继续执行。以此类推,直至所有中断处理完毕,最终返回主程序的断点(K1+1)处继续执行。
中断处理优先级是指多重中断的实际处理顺序,可通过中断屏蔽技术动态调整。若不使用屏蔽技术,则处理优先级与响应优先级(中断请求被CPU识别的先后顺序)一致。现代计算机普遍采用中断屏蔽技术,通过设置中断屏蔽字寄存器实现灵活的优先级控制。
一个简单的可编程中断控制器,来自I/O总线的外设中断请求信号(IRi)首先被记录在中断请求寄存器中。中断屏蔽字寄存器的每一位对应一个中断源:置1时屏蔽对应的中断请求,置0时允许其通过。在送入中断判优电路前,每个中断请求信号会与其对应屏蔽位的取反值进行逻辑“与”操作——仅当屏蔽位为0时,该中断请求才被允许参与仲裁。因此,被屏蔽的中断无法进入判优电路,而未被屏蔽的中断则按固定的响应优先级次序处理。
需要注意的是:中断屏蔽字通常在进入中断服务程序时由软件加载,用于控制后续中断的嵌套行为。因此,中断屏蔽仅在CPU执行中断服务程序期间生效;而在主程序运行阶段,中断响应仍由主程序所设置的屏蔽状态决定(通常为全开放)。此外,即使在中断服务程序执行期间,若有多个未屏蔽中断同时到达,其处理顺序仍由中断判优电路的响应优先级决定。
关于中断屏蔽字的设置及多重中断程序执行的轨迹,下面通过实例说明。
【例7.3】 假设某机有4个中断源A、B、C、D,其硬件响应优先级为 。现要求通过中断屏蔽技术,将实际中断处理优先级调整为 。
- 写出每个中断源对应的中断屏蔽字。
- 若CPU在执行用户程序时,A、C、D同时发出中断请求;随后在执行C的中断服务程序期间,B又发出中断请求。试分析CPU的程序执行轨迹。
解:
- 中断处理优先级调整为 后,A的处理优先级最高,需要屏蔽所有中断(包括自身),屏蔽字设为1111;D的次高,只允许被A中断,屏蔽B、C和自身,屏蔽字是0111;C的第三,允许被A和D中断,屏蔽B和自身,屏蔽字为0110;B的最低,允许被A、D、C中断,仅屏蔽自身,屏蔽字为0100;结果如表7.1所示。
表7.1 中断源对应的中断屏蔽字
中断源 \ 屏蔽字 A B C D A 1 1 1 1 B 0 1 0 0 C 0 1 1 0 D 0 1 1 1
- CPU执行用户程序时,A、C和D同时发出中断请求。根据响应优先级,先响应A。进入A的服务程序前,系统保存现场,加载A的屏蔽字1111,并开中断。由于所有中断均被屏蔽,A的服务程序独占CPU直至完成,随后返回用户程序。重回用户程序后,C和D尚未处理,根据响应优先级,先响应C。但在执行C的服务程序前,系统加载其屏蔽字0110,即允许D打断C,于是CPU响应D。D的处理过程中未出现更高处理优先级的中断请求,D顺利完成后返回被中断的C继续执行。在C的处理过程中,B发出中断请求,但由于C的屏蔽字为0110,B被屏蔽,该请求不予响应。C处理完后返回用户程序。最后,CPU响应B,B处理完后,再次返回用户程序。
从宏观上看,程序中断方式克服了程序查询方式中CPU的忙等待现象,显著提高了CPU利用率。但从微观操作分析,CPU在处理中断时仍需暂停原程序的运行。尤其当高速设备频繁、成批地与主存交换数据时,会不断打断CPU现行程序以执行中断服务程序,造成较大开销。
7.3.3 DMA方式
DMA方式是一种完全由硬件控制的数据传输方法,它具有程序中断方式的优点,即在数据准备阶段,CPU与外设可并行工作。DMA在外设与内存之间建立了一条直接的数据通路,使得信息传送无须经过CPU,从而显著降低CPU在数据传输过程中的负担。正因如此,该方式被称为直接存储器存取,并避免了保存与恢复CPU现场等复杂操作。
DMA特别适用于磁盘、显卡、声卡、网卡等高速设备的大批量数据传输,但其硬件实现开销较高。在DMA方式中,中断的作用仅限于处理故障和正常传输完成的通知。
1. DMA方式的特点
DMA机制在主存与DMA控制器之间建立了一条直接的数据通路。由于数据传输不经过CPU,因此无须中断现行程序,从而实现I/O操作与CPU计算的并行执行。
DMA方式的主要特性包括:
- 打破主存与CPU的固定关联,主存既可被CPU访问,又可被外设直接访问。
- 在块数据传输过程中,主存地址的生成与传送字数的计数均由硬件电路自动完成。
- 主存中需设置专用缓冲区,以支持高效的数据交换。
- 支持高速数据传输,且CPU与外设可并行工作,显著提升系统效率。
- 传输开始前需由软件进行预处理,结束后则通过中断机制完成后处理。
2. DMA控制器的组成
在DMA方式中,对数据传送过程进行控制的硬件称为DMA控制器(DMA接口)。当I/O设备需要进行数据传送时,通过DMA控制器向CPU提出DMA请求,CPU响应后即让出系统总线,由DMA控制器接管总线并执行数据传送。其主要功能如下:
- 接收外设发出的DMA请求,并向CPU发出总线请求信号。
- 在CPU发出总线响应信号后,DMA控制器接管总线控制权,进入DMA操作周期。
- 确定数据传送的主存起始地址及长度,并自动更新主存地址计数器和传送长度计数器。
- 指定数据在主存与外设间的传送方向,发出读/写等控制信号,完成数据传送。
- 在DMA操作结束后,向CPU报告传送完成。
主存地址计数器:存放待传送数据的主存地址。传送前,保存整批数据的起始地址;每传送一个字,其内容自动加1,直至该批数据传送完毕。传送长度计数器:记录待传送数据的总长度。传送前,存入整批数据的总字数;每传送一个字,计数值减1,当计数器为0时,表示传送结束。数据缓冲寄存器:暂存每次传送的数据。通常,DMA控制器与主存之间以字为单位传送,而与外设之间可能以字节或字为单位。DMA请求触发器:当I/O设备准备好数据时,发出DMA请求信号,使其置位。控制/状态逻辑:用于设定传送方向、更新传送参数,并协调DMA请求与CPU响应信号。中断机构:当一批数据传送完毕后,触发中断并向CPU发出中断请求。
在DMA传送过程中,DMA控制器接管系统总线;传送结束后,将总线控制权交还给CPU,由CPU继续执行后续操作。因此,DMA控制器必须具备控制系统总线的能力。
3. DMA的传送方式
主存与I/O设备之间交换信息时不经过CPU。然而,当I/O设备和CPU同时访问主存时,可能发生冲突。为高效利用主存,DMA与CPU通常采用以下三种方式共享主存。
(1) 停止CPU访存
当I/O设备发出DMA请求时,DMA控制器向CPU发送停止信号,使CPU放弃总线控制权并暂停访存,直至DMA完成整块数据的传送。数据传送结束后,DMA控制器通知CPU恢复主存访问,并交还总线控制权。
优点:控制逻辑简单,适用于数据传输速率很高的I/O设备进行成组数据传送。 缺点:DMA访存期间,CPU基本处于空闲状态,资源利用率较低。
(2) 周期挪用
对于高速I/O设备,若不及时访存可能导致数据丢失,因此其访存请求具有较高优先级。周期挪用允许I/O设备挪用一个主存存储周期,传送完一个数据字后立即释放总线,属于单字传送方式。当I/O设备发起DMA请求时,可能出现以下三种情况:
- CPU当前不在访存,I/O请求无冲突,可直接使用总线;
- CPU正在访存,则需等待当前存储周期结束,再释放总线控制权;
- I/O与CPU同时请求访存,发生冲突,此时CPU暂时放弃总线控制权。
优点:既满足了I/O数据传送需求,又较好地发挥了CPU与主存的效率。 缺点:每次挪用均需申请并释放总线控制权,带来一定开销。
(3) DMA与CPU交替访存
将CPU工作周期划分为两个子周期:一个供CPU访存,另一个供DMA访存。这样,在每个CPU周期内,两者可以轮流访问主存。该方式适用于CPU工作周期长于主存存储周期的场景。例如,若CPU工作周期为 ,主存存储周期小于 ,则可将其分为 和 两个子周期,其中 专供DMA访存, 专供CPU访存。总线控制权通过 和 分时固定分配,无须动态申请或释放。
优点:无须总线控制权的申请与释放过程,数据传送速率高。 缺点:硬件控制逻辑较为复杂。
【例7.4】 假定计算机的主频为500MHz,CPI为4,某外设的数据率为40MB/s,I/O接口中的数据端口为32位,采用DMA方式,每次DMA传送块大小为1000B,且DMA预处理和后处理的总时钟周期数为500,则CPU用于该外设I/O的时间占CPU总时间的百分比是多少?
解:
DMA每秒次数为 ,在DMA方式中,只有预处理和后处理需要CPU处理,数据传送全程由DMA控制。CPU用于外设I/O的总时间为 个时钟周期,占CPU总时间的百分比为 。
4. DMA的传送过程
DMA的数据传送流程,分为预处理、数据传送和后处理三个阶段。
(1) 预处理
由CPU完成必要的初始化工作,包括设置DMA控制器中的主存起始地址、传送方向、传送数据个数,并启动I/O设备。随后,CPU继续执行原程序。当I/O设备准备好待发送(输入)或接收(输出)的数据时,会向DMA控制器发出DMA请求;DMA控制器随即向CPU发出总线请求,申请总线控制权。
(2) 数据传送
DMA以数据块为单位进行传送。一旦获得总线控制权,DMA控制器便通过硬件循环自动完成数据的输入或输出操作,整个过程无须CPU干预。
(3) 后处理
数据块传送完成后,DMA控制器向CPU发出中断请求。CPU响应后执行中断服务程序,进行后处理工作,如校验数据完整性,若出错则转入诊断程序等。
在DMA方式下,整个数据块的传送过程均由硬件完成,CPU仅在预处理阶段进行初始化,在后处理阶段响应中断,因此用于I/O的开销极小。
5. DMA方式和中断方式的区别
DMA方式和中断方式的主要区别如下:
- 中断方式涉及程序切换,需保存和恢复CPU现场;而DMA方式不中断现行程序,无须保存现场,除预处理和后处理外,完全不占用CPU资源。
- 中断请求只能在每条指令执行结束后被响应;而DMA请求可在当前总线周期结束后立即获得响应,无须等待指令完成。
- 中断方式的数据传送依赖CPU执行指令完成;DMA方式则由专用硬件直接在主存与外设间传送数据,传输速率高,适用于高速外设的成组数据传输。
- 当CPU和DMA控制器同时访问主存时,DMA请求的优先级通常更高。
- 中断方式具备处理异常事件的能力,而DMA方式仅用于大批量数据的高效传输。
- 从数据传送来看,中断方式由软件控制传送,DMA方式由硬件直接完成。
