Chapter 3 Basic Input/Output(3)
Chapter 3 Basic Input/Output(3)
中英对照表
英文 | 中文 |
---|---|
What is An Interrupt | 什么是中断 |
Interrupt Example | 中断示例 |
Advantages of Interrupt Driven I/O | 中断驱动I/O的优势 |
Concepts of Interrupt | 中断的概念 |
Interrupt Processing | 中断处理 |
Enabling and Disabling Interrupts | 启用和禁用中断 |
什么是中断
中断是一种事件,它会致使处理器暂停当前正在执行的程序,转而执行一个中断服务程序。也就是说,当中断发生时,处理器会放下手头正在处理的任务,优先去处理与该中断相关的特定操作,等完成中断服务程序里规定的任务后,再视情况决定是否返回原来被中断的程序继续执行。
中断示例
(1)
- 任务场景设定:
- 设想有这样一个任务,它需要不间断地开展大量计算工作,并且要把计算得出的结果实时显示在显示设备上。
- 关键要求是显示的结果必须每十秒更新一次,以此确保展示信息的时效性。
- 计时与信号机制:
- 这 10 秒的时间间隔由一个简易的定时器电路把控,定时器能精准地生成契合要求的信号,为结果更新提供时间依据。
- 处理器把定时器电路视作一个特殊的输入设备,这个设备产出的信号可供处理器随时查询、监测,用以捕捉时间节点。
- 定时器电路会每 10 秒准时发出一个中断请求,处理器收到该请求后,便会立即响应,着手将最新的结果显示出来。
(2)
- 程序构成与执行逻辑:
- 上述任务通过一个由两个例程组成的程序来落地实施,这两个例程分别是 COMPUTE(计算)例程和 DISPLAY(显示)例程。
- 正常情况下,处理器一门心思地持续执行 COMPUTE 例程,全力投入计算任务当中。
- 一旦处理器接收到来自定时器的中断请求,它会即刻暂停手头正在执行的 COMPUTE 例程,转而迅速执行 DISPLAY 例程,目的是把最新的计算结果输送至显示设备。
- 任务恢复与时间分配:
- 在 DISPLAY 例程执行完毕后,处理器会无缝衔接,恢复到之前被中断的 COMPUTE 例程继续执行,确保计算任务不中断、不延误。
- 由于把结果发送至显示设备所耗费的时间相较于 10 秒的更新间隔而言极其短暂,所以处理器实际上绝大部分时间都花在执行 COMPUTE 例程上,高效保障了计算任务的连贯性与进度。
中断驱动 I/O 的优势
三个优点:解放CPU,以及使得IO设备的灵活性大大提高。
- 无需 CPU 反复检查设备:
- 以图 3.4 和图 3.5 的示例来讲,程序会进入一个等待循环当中。在此循环里,程序不间断地检测设备状态,反复查验设备是否就绪。
- 但问题在于,这段反复检测的时间里,处理器并没有进行任何有实际价值的计算工作,白白消耗了算力资源,降低了处理效率。
- 克服 CPU 空等现象:
- 常规的程序控制 I/O 模式下,CPU 常常要在原地等待设备完成操作,处于闲置状态,造成计算资源的浪费。而中断驱动 I/O 有效解决了这一难题。
- I/O 模块就绪时主动中断:
- I/O 模块在准备就绪后,会向处理器发送一个名为中断请求的硬件信号。收到信号后,处理器便能即刻知晓 I/O 操作已完成,随即开展后续处理,无需持续守在设备前被动等待,极大提高了整体系统的运行效率与资源利用率。
中断的概念
(1)
- 中断请求:
- 这是一种由 I/O 设备发出的信号。设备借助总线控制线中的某一条,将该信号传送给处理器,目的在于告知处理器自身出现了需要处理的情况,请求处理器暂停手头事务,先来关注设备这边的状况。
- 中断应答:
- 当处理器接收到中断请求信号后,会发出中断应答信号,以此向发出请求的设备表明自己已经知晓中断事件,即将着手处理,维系设备与处理器之间信息交互的完整性与连贯性。
(2)
- 中断服务程序(中断处理程序):
- 一旦处理器接收到中断请求,随即执行的对应程序就叫做中断服务程序。此程序专门用于处理引发中断的特定事项,确保相关问题得到妥善解决。
- 中断延迟:
- 指从处理器接收到中断请求的那一刻起,到正式开始执行中断服务程序之间的时间间隔。这段延迟时间越短,系统响应中断就越迅速,实时性与处理效率也就越高。
(3)
这个是一个经常出现的考点,因此需要注意。
- 子程序与中断服务程序的区别:
- 子程序是应主程序的功能需求而编写、调用的,它与调用它的主程序紧密关联,执行的功能是主程序流程里不可或缺的一部分。所以在调用、执行子程序时,程序员能提前预估其对状态信息、寄存器内容可能造成的改变,做好相应准备。
- 中断服务程序则不同,它与接收到中断请求时正在执行的程序部分可能毫无关系。正因为如此,在启动中断服务程序前,必须把那些可能会在执行中断服务程序期间,以不可预估的方式被改变的状态信息、处理器寄存器内容统统保存下来。等到中断服务程序执行完毕,恢复被中断程序执行之前,再把保存的信息原封不动地还原回去,以此保证被中断程序后续执行不受干扰。
中断处理
(1)
- 中断处理流程概述:
- 当中断发生并且被处理器接受后,当前正在执行的程序会即刻暂停运行。这么做是为了优先处理引发中断的紧急事项,防止程序执行出现混乱。
- 暂停程序时,必须把程序计数器(PC)以及各寄存器中的内容保存到进程控制块(PCB)里。PC 保存着下一条待执行指令的地址,寄存器存放各类数据、状态信息,保存它们利于后续恢复程序执行,确保程序连贯性。
- 随后,中断服务程序启动并执行,专门针对引发中断的问题进行处理,让设备或系统恢复正常状态。
(2)
中断处理流程图:流程图直观呈现中断处理全过程,涵盖从接收到中断请求、暂停当前程序,到保存关键信息、执行中断服务程序,再到恢复程序执行的一系列步骤,助于清晰梳理各环节先后顺序与逻辑关联。
(3)
- 中断处理细节之处理器应答:
- 方法 1:处理器主动发出中断应答信号。收到中断请求后,处理器以此信号告知发出请求的设备或模块,自己已接收请求,即将开展后续处理,维系双方通信的顺畅,利于精准协调动作。
- 方法 2:在中断服务程序里,当执行访问设备接口中状态或数据寄存器的指令时,会隐含地通知设备其中断请求已被认可。设备借此知晓处理器动态,避免重复发送请求,提升处理效率。
(4)
- 中断处理细节之信息保存与恢复:
- 需要保存与恢复的信息通常涵盖条件码标志,以及被中断程序和中断服务程序共同使用的寄存器内容。条件码标志反映指令执行结果状态,寄存器存放运算、控制所需数据,保存它们能避免执行中断服务程序时数据被误改、丢失。
- 信息保存与恢复任务可由处理器自动完成,一些先进处理器自带此功能,简化编程复杂度;也能通过编写程序指令手动达成,给予程序员灵活调控空间。
(5)
- 中断处理细节之信息保存与恢复(续):
- 多数现代处理器仅保存维持程序执行完整性所需的最少信息量,典型的就是程序计数器(PC)和程序状态字(PSW)的内容。PC 把控程序执行走向,PSW 记录程序运行状态,保存它们能基本保证程序恢复执行时不出错。
- 若还有其他额外信息需要保存,就得在中断服务程序开头,借助程序指令手动保存;结束时,再按序恢复,防止信息错乱,维持程序逻辑稳定。
启用和禁用中断
(1)
- 启用和禁用中断的重要性:
- 启用和禁用中断在所有计算机系统中都极为关键。因为程序执行随时可能被中断打断,而中断是随机出现的,它们很可能改变程序员原本预想的事件执行顺序。
- 有时候必须确保某一段特定的指令序列能完整无中断地执行完毕,这是由于中断服务程序有可能会修改相关指令正在使用的数据,若随意中断可能导致程序出现错误结果或逻辑混乱。
(2)
- 处理器端的中断控制:
- 设置程序状态寄存器中的中断使能位:
- 当中断使能位(IE)的值为 1 时,处理器会接受来自 I/O 设备的中断请求,并对其进行相应处理,意味着此时中断机制处于开启状态,处理器能响应外部设备的中断诉求。
- 而当 IE = 0 时,处理器会直接忽略来自 I/O 设备的所有中断请求,相当于暂时关闭了中断功能,外界设备即便发送中断请求,处理器也不会响应,以此保证特定程序片段不受干扰地执行。
- 在开始执行中断服务程序前,处理器会自动禁用中断(将中断使能位清零,即 IE = 0),避免在处理当前中断过程中又被其他中断打扰,确保当前中断服务能有序完成。
- 当执行中断返回指令时,处理器会从堆栈中恢复程序状态寄存器(PS)的内容,此时会把中断使能位重新设置为 1(IE = 1),恢复到可以响应中断的状态,以便后续继续正常处理其他可能出现的中断情况。
- 适用场景:这种方式比较适用于只有一条中断请求线的简单处理器,能简单有效地控制中断的启用和禁用。
- 设置程序状态寄存器中的中断使能位:
(3)
- 处理器端的中断控制(续):
- 示例:像 x86 架构中的中断使能标志就是采用类似这样的机制,通过特定的位设置来管控中断的开启与关闭,协调处理器与外部设备间关于中断处理的交互过程。
(4)
- I/O 设备端的中断控制:
- 要确保只有处理器当下愿意处理的那些 I/O 设备才能产生中断请求,这一点很重要。不然过多不必要的中断请求会扰乱处理器正常的工作节奏和程序执行顺序。
- 因此,在各个单独设备的接口电路中需要有相应的机制,用来控制某个设备是否被允许向处理器发送中断请求,以此实现对中断源头的精准管控。
- 通常在设备的控制寄存器中有一个中断使能位,这个位的取值就决定了该设备是否能够生成中断请求,比如为 1 时允许,为 0 时禁止。
(5)
这里给出中断使能位。
Quiz (1)
问题
在中断处理过程中,保存程序计数器(PC)的作用是什么? A. 使 CPU 找到中断服务程序的入口地址 B. 从中断返回时能从程序断点处继续执行 C. 使 CPU 和外设并行工作 D. 实现中断嵌套
答案
B
解释
- 选项A:在中断处理过程中,一般是通过特定的中断向量表等机制来找到中断服务程序的入口地址,而不是依靠保存程序计数器(PC)来实现这一功能,所以A选项错误。
- 选项B:程序计数器(PC)中存放的是下一条要执行指令的地址,也就是程序执行的“轨迹”信息。当中断发生时,保存PC内容,这样在中断服务程序执行完毕后,就能把之前保存的PC值恢复,使得CPU可以从中断发生时的程序断点处继续往下执行程序,保证程序执行的连贯性,所以B选项正确。
- 选项C:CPU和外设能否并行工作主要取决于系统的硬件架构以及相关的控制机制(比如采用DMA等方式实现部分并行操作),与保存PC并无直接关联,所以C选项错误。
- 选项D:中断嵌套指的是在执行一个中断服务程序的过程中,又能响应更高优先级的中断请求并转而执行其对应的中断服务程序,这通常需要有专门的中断优先级判断、中断屏蔽等相关机制来实现,和保存PC的作用无关,所以D选项错误。
Quiz (2)
问题
什么是中断?中断驱动 I/O 相较于程序控制 I/O 有什么优势?
答案
- 中断的定义:中断是一种事件,它会致使处理器停止当前正在执行的程序,转而执行一个中断服务程序。
- 中断驱动 I/O 相较于程序控制 I/O 的优势:中断驱动 I/O 允许计算机在等待 I/O 操作完成期间去处理其他任务。
解释
- 关于中断定义部分:正常情况下处理器按顺序执行程序中的指令,但当中断事件发生时(比如来自外部设备的相关信号触发中断,像键盘有按键按下、磁盘数据读取完成等情况),处理器需要优先去处理这个中断对应的事项,也就是执行专门的中断服务程序来应对,处理完后再视情况返回原来被中断的程序继续执行,所以中断改变了处理器原本执行程序的顺序,使其暂停当前任务转而去做别的与中断相关的操作。
- 关于优势对比部分:
- 程序控制 I/O:在程序控制 I/O 模式下,处理器通常需要不断地主动去查询设备状态(例如通过循环检测设备的状态寄存器等方式),在设备完成操作之前,处理器只能处于等待、反复查询的状态,这段时间内不能去做其他有意义的计算或者处理其他任务,白白消耗时间和算力资源,效率相对较低。
- 中断驱动 I/O:而中断驱动 I/O 则不同,处理器不需要一直去主动查看设备情况,设备在准备好后(比如数据准备好可以读取或者写入完成等情况)会主动向处理器发送中断请求,在等待设备准备的这个时间段里,处理器可以继续执行其他程序任务,充分利用时间去做别的运算等工作,提高了整个计算机系统的资源利用率和运行效率,使得计算机可以并行地兼顾 I/O 操作和其他计算任务,因此具备明显优势。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论