这是我们疯狂内核系列的中断处理专题开山之作,中断,广义的来说通常被定义为一个事件,该事件触发改变处理器执行指令的顺序。狭义地来说,针对80x86体系,中断被分为中断和异常,又叫同步中断和异步中断。注意广义的中断和狭义的中断千万不要混淆,以后我的博文中所有所谓的“中断”二字,就是指狭义的中断,即Linux处理80x86异步中断的细节。我们首先必须好好理清一下80x86体系中,中断和异常的区别:
中断:由其他硬件依照CPU时钟信号随机产生。
异常:由CPU本身执行指令时,CPU控制单元在一条指令终止之后产生。
更进一步,Intel文档中又把中断和异常继续进行了细分:
中断:
1. 可屏蔽中断:当中断被屏蔽,则CPU控制单元就忽略它。这里提一下,所有的IRQ中断都是可屏蔽中断。
2. 非可屏蔽中断:总由CPU辨认并处理。所以,其为非常紧急的硬件故障。
异常:
1. 处理器探测到得异常
(1)故障(fault)
通常可以纠正,所谓的“纠正”,就是在执行一条指令时发现故障,转而执行对应的异常处理程序;一旦纠正完毕,即异常处理程序完成,程序就可以在不失连贯性的情况下,重新执行刚才那条发现故障的指令。保存在eip寄存器中的值是引起故障的指令地址,因此,当异常处理程序终止时,那条指令会被重新执行。
(2)陷阱(trap)
陷阱的主要用途是为了调试程序。在这种情况下,eip中存放的不是引起陷阱的指令,而是下一个即将执行的指令。陷阱的中断信号的作用是通知调试程序一条特殊指令已被执行。一旦用户检查到调试程序所提供的数据,他就可能要求被调试程序从下一条指令重新开始执行。
(3)异常终止(abort)
发生一个严重错误;CPU控制单元出了问题,不能在eip寄存器中保存引起异常指令所在的确切位置。所以,除了强制终止受影响的进程外,别无选择。
2. &nbs
中断的分类
最新推荐文章于 2025-05-25 00:56:20 发布