ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

计算机组成原理:中断系统与程序中断方式核心机制详解

计算机组成原理:中断系统与程序中断方式核心机制详解 1. 为什么中断系统是程序中断方式的“地基”很多同学复习到I/O方式这一章时看到“程序中断方式”这五个字第一反应就是“CPU在执行程序的过程中遇到I/O请求就暂停一下转去处理I/O处理完再回来”。这个理解不能说错但如果你只停在这个层面那遇到408真题里关于中断隐指令、中断向量、中断屏蔽字、多重中断的题目基本就是靠蒙。我在带考研学生的时候发现一个规律凡是程序中断方式学得吃力的几乎无一例外都是中断系统这一块的前置知识没打牢。打个比方程序中断方式就像是一家公司的前台接待流程。CPU是公司里唯一能拍板做事的总经理I/O设备是来访的客户。客户来了不能直接冲进总经理办公室得先在前台登记中断请求前台把客户的诉求整理好中断判优然后总经理手头的工作做到一个合适的断点中断响应条件放下手头的活去接待客户中断服务接待完了再回到刚才断掉的地方继续干活中断返回。而“中断系统”就是这套前台接待制度的全套规章制度——谁有资格来登记、来了之后先接待谁、总经理什么时候可以放下手头的活、接待过程中能不能被更重要的客户打断、接待完了怎么找回原来的进度。这些规章制度不清楚程序中断方式就是空中楼阁。这篇文章我打算把中断系统从头到尾拆一遍不光是讲概念更重要的是讲清楚每个机制背后的“为什么”。比如为什么中断响应必须在一条指令执行完毕之后为什么中断隐指令不是真正的指令为什么中断屏蔽字能实现多重中断的优先级控制这些“为什么”才是408考试里拉开差距的地方。文章会覆盖中断的基本概念、中断请求的分类与判优、中断响应的条件与过程、中断隐指令、中断向量与向量地址、中断服务程序、多重中断与中断屏蔽最后落到程序中断方式的完整工作流程和典型真题分析。适合正在复习408计算机组成原理的同学也适合想真正搞懂中断机制而不是死记硬背的读者。2. 中断系统核心概念拆解与底层逻辑2.1 中断到底是什么从“轮询”的痛点说起要理解中断最好的方式是先理解没有中断的世界有多痛苦。在程序查询方式下CPU要不断地去读I/O设备的状态寄存器看看设备有没有准备好。这就好比你点了一份外卖然后每隔30秒就跑到楼下看外卖到了没有。你什么别的事都干不了因为你的全部精力都花在“查看”这个动作上了。CPU也是一样程序查询方式下CPU的效率被极大地浪费在无效的轮询上。中断机制的本质就是把“主动查看”变成“被动通知”。I/O设备在准备好数据之后主动给CPU发一个信号告诉CPU“我这边好了你来处理一下”。CPU收到这个信号之后暂停当前正在执行的程序转去执行一段专门处理这个I/O事件的代码处理完毕再回到原来的程序继续执行。这个“暂停-转去-处理-返回”的完整过程就是中断。这里有一个关键点很多人容易忽略中断不仅仅是I/O设备在用。实际上中断源可以是多种多样的——I/O设备、时钟、硬件故障比如电源掉电、存储器校验错、以及软件中断比如系统调用、断点调试。408考试里主要聚焦在I/O设备引发的中断但你需要知道中断系统的设计是通用的它不只为I/O服务。理解这一点你才能明白为什么中断系统的很多机制设计得比较“重”——因为它要应对各种不同类型的中断源。2.2 中断请求的分类内中断与外中断中断请求按照来源可以分为两大类内中断和外中断。这个分类在408选择题里出现的频率非常高而且经常和“异常”“陷阱”“故障”这些概念混在一起考。内中断也叫异常是来自CPU内部的中断。比如执行除法指令时除数为零、执行了一条非法指令、访问了不存在的内存地址、或者程序主动执行了一条陷入指令trap指令请求系统服务。内中断的特点是它和当前执行的指令直接相关通常是在指令执行过程中检测到的。外中断也叫中断是来自CPU外部的中断。I/O设备的中断请求、时钟中断、电源故障中断都属于外中断。外中断的特点是它和当前执行的指令无关是异步发生的。这个分类为什么重要因为内中断和外中断在中断响应的时机上有一个关键区别。外中断必须在一条指令执行完毕之后才能被响应因为外中断和当前指令无关CPU需要在一个“干净的边界”上响应它。而内中断是在指令执行过程中产生的它可能在指令执行的中间就被检测到并处理。408考试里经常考这个区别比如“以下哪种情况可以在指令执行过程中被响应”——答案就是内中断。还有一个容易混淆的点内中断的“内”指的是CPU内部不是“内存”。有些同学看到“内”就以为是内存相关的中断这是不对的。内存校验错属于硬件故障通常被归类为外中断因为它是来自CPU外部的存储系统。这个细节在选择题里经常设坑。2.3 中断判优谁先来不一定谁先被服务中断源可能同时有多个。比如你正在用键盘打字同时网卡收到了一个数据包同时硬盘完成了上一次的读写操作。这三个设备可能在同一时刻都发出了中断请求。CPU只有一个它必须先处理一个。那么先处理谁这就是中断判优要解决的问题。中断判优的核心原则是优先级高的中断源先被服务。优先级的设定通常遵循几个原则速度快的设备优先级高因为如果不及时处理数据可能丢失、实时性要求高的设备优先级高比如故障中断、以及某些情况下人为设定的优先级。判优的实现方式有两种硬件判优和软件判优。硬件判优通常用中断控制器比如经典的8259芯片来实现它通过硬件电路对多个中断请求线进行优先级编码选出当前优先级最高的中断请求向CPU发出一个统一的中断请求信号同时在中断响应周期把对应的中断类型号发给CPU。软件判优则是CPU在响应中断后通过执行一段查询程序依次检查各个中断源的状态找到优先级最高的那个。硬件判优速度快软件判优灵活但慢。408考试里更常考的是硬件判优的逻辑。你需要理解中断屏蔽字在判优中的作用。每个中断源都有一个屏蔽字通过设置屏蔽位可以屏蔽掉某些优先级较低的中断请求。这样做的目的是为了实现多重中断——当CPU正在处理一个中断时如果来了一个优先级更高的中断CPU应该暂停当前的中断服务先去处理更高优先级的中断。而如果来的是优先级更低的中断CPU应该屏蔽它等当前中断处理完再说。中断屏蔽字就是实现这个“允许高优先级打断、屏蔽低优先级”的关键机制。2.4 中断响应的条件不是想响应就能响应CPU响应中断是有条件的不是中断请求一来就立刻响应。408考试里经常考“以下哪种情况下CPU不会响应中断请求”你需要记住几个关键条件。第一个条件是中断请求没有被屏蔽。如果某个中断源的屏蔽位被置为1屏蔽状态那么即使它发出了中断请求CPU也不会响应。这个屏蔽可能是硬件屏蔽比如中断控制器上的屏蔽字也可能是软件屏蔽比如CPU的中断允许标志位IF被清零。第二个条件是CPU处于开中断状态。CPU内部有一个中断允许触发器通常叫IFInterrupt Flag只有当IF1时CPU才会响应外中断。如果IF0CPU处于关中断状态任何外中断请求都会被忽略。这个机制用于实现临界区的保护——在修改关键数据结构时关中断可以防止中断服务程序打断当前操作。第三个条件是当前指令执行完毕。对于外中断CPU必须在一条指令执行完毕之后才能响应。这是因为外中断和当前指令无关CPU需要在一个指令边界上保存完整的现场。如果CPU在指令执行到一半时响应中断那么保存的断点信息可能不完整中断返回后无法正确恢复执行。第四个条件是没有更高优先级的中断正在被处理。如果CPU正在处理一个高优先级的中断那么低优先级的中断请求会被屏蔽直到高优先级中断处理完毕。这四个条件缺一不可。408考试里经常把几个条件混在一起考比如“CPU在关中断状态下能否响应内中断”——答案是内中断不受IF标志的影响因为内中断是同步的它和当前指令直接相关不需要通过中断允许标志来控制。3. 中断系统的核心机制与实操要点3.1 中断隐指令一条“不存在”的指令中断隐指令是408考试里一个非常高频的考点也是很多同学理解上的一个难点。首先明确一点中断隐指令不是一条真正的指令。它不在指令系统中定义没有操作码程序员也不能在程序中直接使用它。它是由硬件在中断响应周期自动执行的一系列操作因为它的功能类似于一条指令所以被称为“隐指令”。中断隐指令主要完成三件事关中断、保存断点、引出中断服务程序。关中断的目的是防止在保存断点的过程中被新的中断打断。如果保存断点的时候来了一个新中断CPU又去响应新中断那么原来的断点信息可能被覆盖中断返回后就找不到正确的返回地址了。所以中断隐指令的第一步就是关中断把IF置为0。保存断点是把当前程序的断点信息主要是程序计数器PC的值也就是下一条要执行的指令的地址保存到某个地方。保存的位置通常是堆栈也可能是特定的内存单元。保存断点的目的是为了中断返回时能够找到原来的执行位置。引出中断服务程序是根据中断源找到对应的中断服务程序的入口地址。这个入口地址通常通过中断向量来获取。每个中断源都有一个对应的中断向量中断向量里存放着中断服务程序的入口地址。CPU根据中断类型号或者中断号去中断向量表中查找对应的中断向量然后跳转到中断服务程序的入口地址开始执行。这里有一个容易混淆的点中断隐指令保存的断点是PC的值而不是通用寄存器的值。通用寄存器的保存是由中断服务程序自己完成的通常是在服务程序的开头用push指令把寄存器压栈。为什么中断隐指令不保存通用寄存器因为中断隐指令是硬件自动执行的硬件不知道中断服务程序会用到哪些寄存器所以通用寄存器的保存必须由软件中断服务程序来完成。这个分工在408考试里经常考。3.2 中断向量与中断向量表中断服务程序的“导航系统”中断向量是中断服务程序的入口地址。中断向量表是所有中断向量的集合通常存放在内存的固定区域比如x86实模式下是0x00000到0x003FF共1KB存放256个中断向量每个4字节。这里需要区分两个概念中断向量和中断向量地址。中断向量是中断服务程序的入口地址而中断向量地址是中断向量在中断向量表中的存储地址。比如假设中断类型号为n每个中断向量占4字节中断向量表的起始地址为BASE那么中断向量地址 BASE n × 4。CPU通过中断类型号计算出中断向量地址然后从该地址中取出中断向量即服务程序入口地址跳转过去执行。408考试里经常考这个计算。比如“某系统中断向量表起始地址为0000H每个中断向量占4字节中断类型号为08H的中断源对应的中断向量地址是多少”答案是0000H 08H × 4 0020H。然后从0020H开始的4个字节中取出中断服务程序的入口地址。还有一个容易混淆的点中断向量和中断向量地址的区别。有些题目会问“中断向量地址中存放的是什么”答案是“中断服务程序的入口地址”。而“中断向量”本身指的就是那个入口地址。这个文字游戏在选择题里经常出现需要仔细读题。3.3 中断服务程序的完整流程中断服务程序是CPU响应中断后执行的一段代码它的结构比普通的子程序要复杂一些因为它需要处理现场保存、中断嵌套、中断返回等特殊问题。一个完整的中断服务程序通常包含以下几个部分第一步保护现场。在服务程序的开头用push指令把CPU中可能被用到的通用寄存器的值压入堆栈。注意中断隐指令已经保存了PC的值但通用寄存器的值需要由服务程序自己保存。保护现场的顺序通常和后面恢复现场的顺序相反这是堆栈的后进先出特性决定的。第二步开中断如果需要多重中断。在保护完现场之后如果希望允许更高优先级的中断打断当前的中断服务需要执行开中断指令比如sti。如果不需要多重中断则保持关中断状态。第三步中断服务。这是服务程序的核心部分根据中断源的不同执行不同的处理逻辑。比如键盘中断的服务程序会从键盘接口读取扫描码并转换成字符网卡中断的服务程序会从网卡缓冲区读取数据包。第四步关中断如果之前开了中断。在恢复现场之前需要再次关中断防止恢复现场的过程中被新的中断打断。第五步恢复现场。用pop指令把之前保存的通用寄存器的值从堆栈中弹出恢复CPU的寄存器状态。第六步中断返回。执行中断返回指令比如iret这条指令会从堆栈中弹出之前保存的PC值以及可能的标志寄存器值恢复到中断前的执行位置继续执行。这个流程里有一个细节需要注意保护现场和恢复现场的顺序。因为堆栈是后进先出的所以保护现场时先push的寄存器在恢复现场时要后pop。如果顺序搞反了寄存器的值就会错乱。这个细节在408考试里可能不会直接考但在实际编程中非常重要。3.4 多重中断与中断屏蔽字让高优先级中断能够“插队”多重中断是指CPU在处理一个中断的过程中如果来了一个优先级更高的中断请求CPU暂停当前的中断服务转去处理更高优先级的中断处理完再回到原来的中断服务继续执行。这个机制也叫中断嵌套。多重中断的实现依赖于中断屏蔽字。每个中断源都有一个屏蔽字屏蔽字中的每一位对应一个中断源。当某一位为1时表示屏蔽对应的中断源为0时表示允许对应的中断源。通过设置不同的屏蔽字可以实现不同中断源之间的优先级控制。举个例子假设有四个中断源A、B、C、D优先级从高到低为A B C D。当CPU正在处理C的中断服务时如果希望A和B的中断能够打断C而D的中断不能打断C那么C的屏蔽字应该设置为屏蔽D允许A和B。具体来说如果屏蔽字的位从高到低对应A、B、C、D那么C的屏蔽字可以是“1101”屏蔽D允许A、B、C自己——通常自己也屏蔽掉防止同一中断源重复触发。这里有一个关键点屏蔽字中的“1”表示屏蔽“0”表示允许。这个约定和很多同学的直觉相反容易记反。我在复习的时候用了一个口诀“一屏蔽零放行”。每次做题之前默念一遍能有效避免这个低级错误。多重中断的另一个关键点是开中断的时机。在中断服务程序中开中断的指令通常放在保护现场之后。为什么不在保护现场之前开中断因为保护现场的过程中如果被新的中断打断那么新中断的服务程序可能会覆盖当前正在保存的寄存器值导致现场信息丢失。所以必须先保护现场再开中断。4. 程序中断方式的完整工作流程与真题实战4.1 从I/O请求到中断返回一次完整的中断过程现在把前面讲的所有知识点串起来走一遍程序中断方式的完整流程。假设CPU正在执行一个计算程序此时键盘按下一个键键盘接口向CPU发出中断请求。阶段一中断请求。键盘接口把中断请求信号送到中断控制器的某一条中断请求线上。中断控制器记录下这个请求并根据优先级判断是否向CPU发出中断请求信号。阶段二中断判优。中断控制器检查当前是否有更高优先级的中断正在被处理以及该中断是否被屏蔽。如果该中断没有被屏蔽且优先级足够高中断控制器向CPU发出中断请求信号同时在中断响应周期把对应的中断类型号准备好。阶段三中断响应。CPU在执行完当前指令后检查IF标志是否为1是否开中断以及是否有未屏蔽的中断请求。如果条件满足CPU进入中断响应周期。在这个周期里CPU完成中断隐指令的操作关中断、保存断点PC压栈、从中断控制器读取中断类型号、根据中断类型号计算中断向量地址、从中断向量地址中取出中断服务程序的入口地址、跳转到入口地址开始执行。阶段四中断服务。中断服务程序开始执行。首先保护现场push通用寄存器然后开中断如果需要多重中断接着执行具体的键盘中断处理逻辑读取扫描码、转换成字符、存入缓冲区然后关中断恢复现场pop通用寄存器最后执行iret指令返回。阶段五中断返回。iret指令从堆栈中弹出之前保存的PC值以及可能的标志寄存器值CPU回到中断前的执行位置继续执行原来的计算程序。这个流程里每一个阶段都有408的考点。比如中断请求阶段考中断源的分类中断判优阶段考优先级和屏蔽字中断响应阶段考中断隐指令和中断向量中断服务阶段考保护现场和多重中断中断返回阶段考iret指令的功能。4.2 典型真题分析2024年408第45题2024年408第45题考的是中断系统的综合应用题目大意是某系统采用程序中断方式进行I/O传输中断响应优先级为A B C中断处理优先级为B A C。要求画出中断屏蔽字并分析在特定中断请求序列下的中断服务顺序。这道题的关键在于区分中断响应优先级和中断处理优先级。中断响应优先级是中断控制器判优时使用的优先级决定了哪个中断请求先被CPU响应。中断处理优先级是中断服务程序执行时的优先级决定了哪个中断可以打断哪个中断的服务。这两个优先级可以不同。题目中响应优先级为A B C处理优先级为B A C。这意味着当A和B同时请求时A先被响应但在A的中断服务过程中B的中断请求可以打断A的服务因为B的处理优先级高于A。而C的处理优先级最低它不能打断A或B的服务。根据处理优先级可以确定各个中断源的屏蔽字。以A为例A的处理优先级低于B但高于C所以A的屏蔽字应该屏蔽A自己和C允许B。假设屏蔽字的位从高到低对应A、B、C那么A的屏蔽字为“101”屏蔽A和C允许B。B的处理优先级最高它的屏蔽字应该屏蔽所有其他中断源即“111”屏蔽A、B、C。C的处理优先级最低它的屏蔽字应该允许所有中断源即“000”允许A、B、C。这道题还要求分析一个具体的中断请求序列。假设CPU正在执行主程序此时A和B同时发出中断请求然后C发出中断请求然后A再次发出中断请求。分析中断服务的顺序。按照响应优先级A先被响应。A的服务程序开始执行保护现场后开中断。此时B的中断请求还在等待由于B的处理优先级高于AB可以打断A的服务。所以A的服务程序被暂停转去执行B的服务程序。B的服务程序执行期间C的中断请求到达但C的处理优先级低于B所以C被屏蔽等待。B的服务程序执行完毕后返回到A的服务程序继续执行。A的服务程序执行期间C的中断请求仍然在等待但C的处理优先级低于A所以C继续等待。A的服务程序执行完毕后返回到主程序。此时C的中断请求被响应C的服务程序开始执行。C的服务程序执行期间A再次发出中断请求由于A的处理优先级高于CA可以打断C的服务。所以C的服务程序被暂停转去执行A的服务程序。A的服务程序执行完毕后返回到C的服务程序继续执行。C的服务程序执行完毕后返回到主程序。这个分析过程看起来复杂但只要掌握了“响应优先级决定谁先被响应处理优先级决定谁能打断谁”这个核心原则一步一步推演就不会出错。我在做题的时候习惯画一个时间轴把每个中断请求的到达时间、响应时间、服务时间都标出来这样不容易乱。4.3 常见问题与排查技巧实录在复习中断系统的过程中有几个问题是几乎每个同学都会遇到的。我把它们整理成了一张速查表方便你对照排查。常见问题错误理解正确理解中断隐指令是一条指令吗认为它是一条特殊的指令有操作码它不是真正的指令是硬件自动执行的一系列操作中断隐指令保存通用寄存器吗认为它保存所有现场信息它只保存PC断点通用寄存器由中断服务程序保存内中断受IF标志控制吗认为所有中断都受IF控制内中断不受IF控制它是同步的和当前指令直接相关中断向量和中断向量地址是一回事吗混为一谈中断向量是服务程序入口地址中断向量地址是它在向量表中的存储地址屏蔽字中1表示允许还是屏蔽容易记反1表示屏蔽0表示允许多重中断的开中断指令放在哪里放在服务程序最开头放在保护现场之后防止现场信息被覆盖中断响应发生在指令执行的哪个阶段认为可以在指令执行中响应外中断必须在指令执行完毕后响应内中断可以在指令执行中响应除了这张表里的问题还有几个实操层面的技巧值得分享。第一个技巧是画时间轴。遇到多重中断的题目不要试图在脑子里推演一定要画时间轴。横轴是时间纵轴是中断源把每个中断请求的到达、响应、服务、返回都标出来一目了然。第二个技巧是先确定屏蔽字再分析嵌套。多重中断的题目第一步永远是确定每个中断源的屏蔽字屏蔽字确定了谁能打断谁就确定了后面的分析就是顺水推舟。第三个技巧是注意“同时”和“先后”的区别。题目里说“A和B同时发出中断请求”和“A发出中断请求后B发出中断请求”是两种不同的情况前者需要判优后者可能不需要。读题的时候一定要仔细。还有一个我踩过的坑中断返回指令iret和普通返回指令ret的区别。ret只是从堆栈中弹出返回地址而iret除了弹出返回地址还会恢复标志寄存器的值包括IF标志。这意味着如果中断服务程序中关了中断但没有开中断iret执行后IF会被恢复为中断前的值。这个细节在分析多重中断的返回过程时很重要但很容易被忽略。5. 程序中断方式与其他I/O方式的对比及适用场景5.1 程序中断方式 vs 程序查询方式程序查询方式和程序中断方式是两种最基本的I/O控制方式它们的核心区别在于CPU是否主动等待。程序查询方式下CPU不断轮询设备状态直到设备准备好才进行数据传输。这个过程中CPU完全被I/O操作占用无法执行其他程序。程序中断方式下CPU不需要轮询设备准备好后主动通知CPUCPU在等待期间可以执行其他程序。从效率上看程序中断方式明显优于程序查询方式。但程序中断方式也有它的开销每次中断都需要保存现场、恢复现场、执行中断服务程序这些操作本身也要消耗CPU时间。如果I/O设备非常频繁地发出中断请求比如高速设备那么CPU可能大部分时间都在处理中断反而降低了效率。所以程序中断方式适合中低速设备比如键盘、鼠标、打印机等。对于高速设备比如磁盘、网卡通常采用DMA方式。408考试里经常考这两种方式的对比。比如“程序中断方式下CPU和I/O设备是并行工作的吗”答案是在数据传送阶段是并行的CPU执行主程序I/O设备准备数据但在中断服务阶段是串行的CPU暂停主程序执行中断服务程序。这个“部分并行”的特点是程序中断方式的一个重要特征。5.2 程序中断方式 vs DMA方式DMA方式是另一种重要的I/O控制方式它的核心思想是让DMA控制器直接控制内存和I/O设备之间的数据传输不需要CPU的干预。在DMA方式下CPU只需要在传输开始前初始化DMA控制器设置传输方向、传输长度、内存起始地址等传输完成后DMA控制器向CPU发出一个中断请求通知CPU传输完成。程序中断方式和DMA方式的主要区别在于数据传送的控制者。程序中断方式下数据传送由CPU执行中断服务程序来完成每个数据字的传送都需要CPU参与。DMA方式下数据传送由DMA控制器完成CPU不参与具体的数据传送只在传输开始和结束时介入。从效率上看DMA方式明显优于程序中断方式因为DMA方式下CPU不需要为每个数据字执行指令。但DMA方式的硬件复杂度更高需要专门的DMA控制器。所以DMA方式适合高速、大批量数据传送的场景比如磁盘读写、网络数据包接收等。408考试里经常考这两种方式的对比特别是中断请求的时机。程序中断方式下每个数据字传送完成后都会发出中断请求。DMA方式下只有整个数据块传送完成后才发出中断请求。这个区别在选择题里经常出现。5.3 中断系统在实际系统中的应用虽然408考试主要聚焦在I/O设备的中断但中断系统在实际计算机系统中的应用远不止于此。时钟中断用于操作系统的进程调度和时间管理故障中断用于处理硬件错误和异常情况软件中断用于实现系统调用和调试功能。以时钟中断为例操作系统通过时钟中断来实现时间片轮转调度。每个进程被分配一个时间片当时钟中断发生时操作系统检查当前进程的时间片是否用完如果用完就切换到下一个进程。这个机制使得多个进程可以“同时”运行实际上是CPU在它们之间快速切换。时钟中断的频率通常在100Hz到1000Hz之间也就是说每1ms到10ms发生一次。这个频率的选择需要在调度精度和中断开销之间权衡频率太高中断开销大频率太低调度精度不够。这个实际应用的例子说明中断系统不仅仅是I/O控制的一部分它是整个计算机系统实现并发和实时响应的基础。理解了中断系统你才能理解操作系统为什么能同时运行多个程序为什么能及时响应外部事件。6. 复习中断系统的几个实用建议中断系统这一块的知识点比较碎而且很多概念容易混淆。我在复习的时候总结了几条经验分享出来供参考。第一条经验是先搭框架再填细节。中断系统的核心框架就是“请求-判优-响应-服务-返回”这五个阶段。先把这五个阶段的顺序和每个阶段的核心任务搞清楚然后再往里面填细节。比如响应阶段的核心任务是中断隐指令隐指令的三个操作是关中断、保存断点、引出服务程序。这样一层一层往下拆知识点就不会乱。第二条经验是用对比的方式记忆易混淆的概念。中断向量和中断向量地址、中断隐指令和普通指令、内中断和外中断、程序中断方式和DMA方式这些成对的概念放在一起对比记忆比单独记忆效果好得多。我习惯用表格来整理这些对比左边一列是概念A右边一列是概念B中间是区别点。每次复习的时候先看表格回忆每个区别点的具体内容想不起来的再翻书。第三条经验是多做真题特别是综合题。中断系统的选择题主要考概念辨析综合题主要考多重中断的分析。选择题做多了概念自然就清楚了。综合题做多了分析流程自然就熟练了。2024年第45题就是一个很好的综合题例子它把中断响应优先级、中断处理优先级、中断屏蔽字、多重中断分析都串在一起考做一遍就能把整个中断系统的核心逻辑过一遍。第四条经验是注意细节特别是那些“反直觉”的细节。比如屏蔽字中1表示屏蔽而不是允许中断隐指令不保存通用寄存器内中断不受IF标志控制这些细节和很多同学的直觉相反但恰恰是考试喜欢考的地方。我在复习的时候专门准备了一个“反直觉知识点”清单把这些容易记反的点都记下来考前重点看。最后说一个我自己的体会中断系统这一块死记硬背的效果很差因为知识点太多太碎而且很多概念之间有关联。真正有效的方法是理解每个机制背后的“为什么”。为什么需要中断判优因为多个中断源可能同时请求。为什么需要中断屏蔽字因为需要实现多重中断的优先级控制。为什么中断隐指令要关中断因为保存断点的过程中不能被新的中断打断。理解了这些“为什么”知识点就不再是孤立的而是相互关联的记忆起来也牢固得多。
返回列表