一. 前言(回顾世界观)
很久很久以前,有这样一个世界,这个世界有着现实世界一样的元素:那里的人又有一个别的名字叫做“数据”,人有0有1;人们也有住房,这些住房在这个世界叫做“存储器”;地上有路,这些路叫做“数据总线”(相比于第一篇进行修正);这里也有行政部门,比如公安局之类的,又有个名字叫“寄存器”;有中央政府,政府又叫做“中央处理器”等。关于存储器和总线的相关问题可见我前两篇文章,这篇文章来详细聊一下中断。微机世界里我们对中断的设定是自然灾害(内部中断)和人为活动(外部中断)。
二. 中断(自然灾害和人为活动)
内部中断类似于不可预测的自然灾害,需要系统内部紧急响应;而外部中断则像是由人为活动引起的事件,有些是不可避免的紧急情况,有些则可以被控制或预防。
一.分类
(1)内部中断(自然灾害)
1]除数为0(塌方,地基不稳): 将尝试使用除数为0来进行计算的情况比喻为建筑物发生塌方,原因是地基(分母)不坚固或不存在。这种突然的内部结构失败需要立即响应和解决,以避免更大的损失。
2]指令中断(政府改造环境): 当执行一条无效或错误的指令时,比喻为政府(CPU)试图对环境进行重大改造,但计划不当导致中断常规流程,需要特别处理。
3]溢出中断(人口过多,污染超标): 数据溢出可以比喻为城市(系统)中人口过多(数据量过大),超出了城市能够支持的范围,造成“污染超标”,需要采取措施来减少负荷。
4]单步中断(政府一步一步测试环境,核试验): 单步执行通常用于调试目的,可以比喻为政府(CPU)在实施新政策或进行重大活动(比如核试验)之前,一步步地小范围测试,以确保不会对整个系统产生不利影响。
(2)外部中断(人为活动)
1]非屏蔽中断(疫情,封城): 无法被屏蔽的中断,如电源故障或关键硬件错误,可以比喻为突发的疫情,迫使城市封锁,不得不立即处理,以防止问题蔓延。
2]可屏蔽中断(国庆阅兵,开演唱会): 类似于大型活动(如国庆阅兵或演唱会)可能会暂时改变城市的正常运作,但这种改变是可控的,如果需要,可以推迟或取消。如果突发事件发生(类似疫情),这些活动可以被叫停,而城市的其他部分还可以继续他们的活动。
二.中断处理过程
中断处理过程类似于城市政府如何高效地管理突发事件,确保影响最小化,同时保持城市的正常运作。在计算机系统中,CPU和寄存器的协同工作,以及中断机制的存在,使得系统能够管理和处理多种任务和紧急情况,确保系统稳定、高效运行。
1]中断请求(紧急事件通知): 当一个“住房”(存储器单元)或“人”(设备)遇到紧急情况,如塌方或政策执行误差,他们会发出一个紧急请求(中断信号)到城市的政府(CPU),再由政府决定是否需要立即采取行动。
2]中断排队(紧急事件评估与排序): 政府(CPU)接收到紧急请求后,会通过一个中央评估部门(中断控制器)评估各个请求的紧急程度,并根据优先级进行排序。这就像是一个调度中心决定先处理哪个紧急事件,而其他事件则排队等待。
3]中断响应(紧急响应组织): 政府(CPU)根据优先级响应一个中断请求,决定派遣哪个紧急服务部门去处理某个紧急事件。在此期间,政府可能需要将当前处理的事务暂存到行政部门的文件柜(寄存器)中,以便在紧急事件处理完毕后可以恢复正常工作。
4]中断处理(紧急事件应对): 政府派遣紧急服务部门(中断服务例程)处理紧急事件,比如修补道路或调整政策。这个过程需要高效、迅速,确保事件得到妥善解决,并且影响最小。
5]中断返回(事务恢复): 一旦紧急事件被处理完毕,政府会指示紧急服务部门返回(中断返回),并从行政部门的文件柜(寄存器)中取回之前暂存的事务资料,继续之前的工作。这就像是紧急事件结束后,城市恢复到正常运作状态。
三.考研面试常问问题
1]试述中断处理过程?
(同上第二点)
2]CPU响应中断的条件和时间是什么?
条件:政府(CPU)的联系电话(允许中断触发器)打得通(为"1"),政府准备好了随时接受紧急情况的报告。
时间:政府在当前事务处理完后(指令执行周期结束后),再处理这些紧急事件(响应任何中断源的请求)。如果在指令执行的中途接受中断,政府在处理事件的中途突然转移注意力,可能会导致当前事件处理不完整,从而影响整体的效率和效果。
3]请写出中断断点恢复的工作过程?
中断断点恢复的工作过程就是紧急服务处理一个突发事件后原状恢复城市秩序的步骤。当紧急服务人员(中断服务例程)被召唤处理紧急事件(中断)时,他们必须确保一旦事件处理完成,所有的设施和服务可以恢复到紧急事件发生前的状态。这保证了城市的连续运作和居民的生活不会受到长期影响。
(1)保护时的动作:将寄存器的内容压入堆栈
当紧急事件通知(中断请求)到达政府(CPU)时,政府工作人员(当前执行的程序或任务)必须迅速将他们正在处理的文件(寄存器内容)安全存放在机密的保险柜里(压入堆栈),以便他们能够去处理紧急事件。
(2) 恢复时的动作:按顺序将这些寄存器的内容由堆栈弹回原来的寄存器中
一旦紧急事件(中断)被处理完毕,政府工作人员(中断服务例程)必须确保存在保险柜里的所有文件和记录被下发回原来的行政部门处,这样城市(计算机系统)的正常运作就可以恢复。之前保存在堆栈中的寄存器内容必须被取出,恢复到各自的寄存器中。
4]解释一下STM32的抢占优先级和响应优先级?
抢占优先级可以比作紧急事件的重要等级,它决定了哪个紧急事件更重要,需要优先调配资源(比如哪场火灾更大,就需要更快派出消防队)。在STM32中,当两个中断同时发生时,CPU(政府)会检查它们的抢占优先级。
响应优先级(也称为子优先级)如果有几个紧急事件拥有相同的重要等级(抢占优先级相同),响应优先级将决定哪个事件将首先得到响应。这在城市管理中相当于决定哪个相同等级的事件更先处理,比如两个火灾哪个更靠近水源或人群。
5]MCS-51有哪些中断源?
MCS-51 微控制器也称为8051微控制器,是一个较流行的单片机,它有多个中断源如下:
-
外部中断请求(INT0 和 INT1):
- INT0 (外部中断0):它是来自于城市边界的警卫的紧急电话,告知政府(CPU)有重要访客到来或者出现了紧急状况,需要立即处理。
- INT1 (外部中断1):又是一个警报,可能是来自于另一处城市的入口,告诉政府需要注意另一项即将发生的事件。
-
定时器/计数器中断(T0 和 T1):
- 定时器0 溢出中断(TF0):比如城市中的大钟(定时器0),当大钟的指针完成一轮回到12点时(溢出),就会敲响钟声(中断),提醒市政府(CPU)一些定时活动应该开始或结束了。
- 定时器1 溢出中断(TF1):与定时器0类似,这是城市中的另一座大钟(定时器1),它的钟声也提醒市政府进行其他预定的活动。
-
串行通信中断(RI/TI):
- 接收完成中断(RI):比作一个快递中心(串行接口),当一个包裹(数据)被成功接收时,中心会发送通知给市政府。
- 发送完成中断(TI):同样地,当快递中心顺利发送出一个包裹,会告诉市政府任务完成,可以准备下一次发送。
6]MCS-51的外部中断的触发方式有哪两种?他们对触发脉冲或电平有什么要求?
在MCS-51微控制器中,外部中断可以通过两种方式触发:
-
低电平触发:想象这个城市的某个入口处有一个警卫,他的任务是监视一个指示灯。只要这个指示灯持续亮着(即电平保持在低电平状态),警卫就需要持续向市政府(CPU)报告一个事件正在发生,此时中断信号一直被激活,直到指示灯熄灭(电平变高)。这种触发方式要求触发信号在整个事件期间保持一个稳定的低电平状态。
-
负沿触发:这个警卫监视的指示灯通常是熄灭的。当他看到指示灯从亮转暗(即电平从高到低的下降沿),他就会立刻向市政府报告一次性事件发生了。这种触发方式对指示灯的变化非常敏感,只要有从高电平到低电平的变化,就会触发一次中断。之后,即使指示灯保持在低电平,警卫也不会再次报告,除非指示灯重新恢复到高电平然后再次转到低电平。
7]单片机对中断优先级的处理原则是什么?
-
低级不能打断高级,高级能够打断低级:
在城市中,有不同级别的紧急情况。比如,“火灾”(高级中断)比“交通拥堵”(低级中断)更紧急,所以消防车(高级响应)可以穿过堵塞的路段,而普通车辆则不能。这个原则确保了一个高级紧急事件的响应不会被一个低级事件干扰。 -
一个中断已被响应,同级的被禁止:
如果有一个特定级别的事件正在被处理,政府(CPU)会暂时对同等级别的其他事件“视而不见”,直到当前事件处理完毕。这是为了防止资源被分散,确保响应队伍可以集中处理一个事件,不被不断出现的同类事件干扰。 -
同级,按查询顺序:
在同级别的中断中,有一个明确的响应顺序,即城市有一个明确的事件响应顺序。INT0、T0、INT1、T1 和串行接口,这个顺序意味着如果多个同级事件同时发生,它们会按照这个顺序得到处理。就像是城市的紧急服务部门有一个处理呼叫的顺序,首先响应第一个电话,即便第二个电话几乎是同时拨入的。
8]单片机对中断优先级的处理原则是什么?
外部中断源请求得到CPU响应的条件类似于一个人(数据)要求进入市政府大楼(中央处理器)并得到官员(处理器核心)的注意。为了确保官员能够有效地处理这些请求,并且不会被不必要的干扰所分心,以下条件必须得到满足:
-
置位了中断请求触发器:
这就像是一个人想要进入市政府必须先按响门铃(中断请求触发器)。如果没人按铃,官员就不会知道外面有人需要进来。 -
中断屏蔽触发器处于非屏蔽状态:
即使门铃响了,如果官员正在忙于一个不能打扰的重要会议(屏蔽状态),他们就不会回应。非屏蔽状态意味着官员没有在忙碌于不可打扰的任务,所以门铃(中断请求)可以得到注意。 -
CPU内部是中断开放的:
官员必须是准备好接待访客的状态。如果官员已经在与其他人会面,或者指示门卫不要打扰,那么即使门铃响了,也不会有人去开门。 -
没有更高优先级别的中断请求正在被响应或者正发出、正挂起:
如果市长(高优先级中断)也在敲门,那么其他人的要求就必须等待。只有市长的要求被满足后,官员才会考虑其他人的请求。 -
CPU没有现行指令后才能采样INTR线而响应可能提出的外中断请求:
官员必须处理完他们手头的工作,才能去看门口的情况。他们不会在写文件的中途跑去开门,只有在完成手头的任务(当前指令)之后,他们才会检查门铃(INTR线)是否有新的访客(中断请求)。
这样的协议确保了市政府的官员可以有效地管理他们的时间和资源,优先考虑最紧急和重要的事务,同时也能处理其他的日常要求。这些原则确保中断处理既高效又按照既定的优先级秩序进行。
9]中断服务程序的执行过程?
中断服务程序(Interrupt Service Routine, ISR)的执行过程可以想象成应急响应团队处理紧急事件的一系列行动。下面是这个过程的逐步解释,以及为什么要按照这个顺序执行:
-
开始,保护现场:
就像紧急响应团队到达现场后首先要做的是确保现场安全,以便可以开始紧急操作。在单片机中,“保护现场”意味着保存当前任务的状态,这通常涉及将寄存器中的值推入栈中。这确保了一旦中断服务例程完成,之前被打断的程序可以恢复其执行而不会丢失任何重要的信息。 -
完成中断源申请的任务:
这相当于紧急服务人员处理紧急事件,如扑灭火灾、修理损坏的基础设施等。对于单片机来说,这个阶段是中断服务程序的核心部分,它执行必要的操作来响应中断,例如读取或写入数据,或清除中断标志。 -
发中断结束命令EOI:
在现实世界中的紧急情况得到处理后,紧急响应团队会向调度中心报告任务完成。在单片机中,发送结束中断命令(End of Interrupt, EOI)到中断控制器表明中断已经被处理。这样做告诉中断控制器可以继续监听其他的中断请求。 -
恢复现场:
紧急响应团队在离开之前需要确保现场恢复到安全状态,以便日常活动可以继续进行。在单片机的上下文中,“恢复现场”涉及从栈中恢复寄存器的值,以便恢复被中断的程序的状态。 -
IRET中断返回:
最后,紧急响应团队会离开现场,返回基地,准备响应下一个紧急情况。在单片机中,IRET(中断返回)指令完成中断处理,它从栈中取出程序计数器和程序状态字,然后返回到中断之前的程序中继续执行。
这个过程保证了中断能够快速、有效地被处理,同时确保了系统的稳定性和程序的可继续性,城市的紧急服务机构在处理紧急事件时需要迅速响应又得确保事件处理后可以迅速恢复正常运转。
10]中断返回(RETI)和子程序返回(RETI)的异同是什么?
(1)相似之处:(都暂停、返回)
- 中断主程序:无论是中断返回还是子程序返回,两者都涉及暂停当前正在执行的主程序(城市中的常规活动),以应对紧急事件(中断)或特定任务(子程序)。
- 返回断点继续执行主程序:两者完成它们的任务后,都会让主程序从暂停的地方(断点)继续执行,就像城市在处理完紧急事件或特定任务后恢复常规活动。
(2)不同之处:(RETI处理后要清空文件柜,且分配急救物资的地址固定,可以随时安排,RET相反)
- 清除中断优先级寄存器的状态:RETI除了将压栈的内容出栈外(即从文件柜中取出之前的事务资料),还会清除中断优先级寄存器的状态,这可以看作是重新评估紧急事件处理优先级的过程,以便系统准备好响应下一个可能发生的紧急事件。
- 入口地址的固定与可变:中断服务程序的入口地址是固定的,就像城市里为特定紧急服务划分的固定响应中心。而子程序(城市中的特定任务)的入口地址是用户在程序中事先安排好的,可以在城市的任何地方。
- 调用时机的不同:中断服务程序是在满足中断申请的条件下,随时发生的,就像城市中随时可能发生的紧急事件。而子程序的调用是事先安排好的,类似于城市中计划好的活动或项目,它们是预定的并且按计划执行。