中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。
中断通常分为同步(synchronous)中断和异步(asynchronous)中断:
同步中断是当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。
异步中断是由其他硬件设备依照CPU时钟信号随机产生的。
在intel微处理器中,把同步和异步中断分别称为异常(exception)和中断(interrupt)。
中断是由间隔定时器和I/O设备产生的,例如用户的一次按键引起一个中断
异常是由程序的错误产生的,或者是由内核必须处理的异常条件产生的。
中断信号的作用
当一个中断信号达到时,CPU必须停止它当前正在做的事情,并且切换到一个新的活动。为了做到这一点,就要在内核态堆栈保存程序计数器的当前值(即eip和cs寄存器的内容),并把与中断类型相关的一个地址放进程序计数器。
中断处理程序对比进程切换有一个明显的差异:由中断或异常处理程序执行的代码不是一个进程。更确切地说时,它是一个内核控制路径,代表中断发生时正在运行的进程执行。作为一个内核控制路径,中断处理程序比一个进程要”轻“。(中断的上下文很少,建立或终止中断处理需要的时间很少)。
中断处理是由内核执行的最敏感的任务之一,因为它必须满足下列约束:
内核响应中断后需要进行的操作分为两部分:关键而紧急的部分,内核立即执行;其余的部分,内核随后执行。
中断处理程序必须编写成使相应的内核控制路径能以嵌套的方式执行,当最后一个内核控制路径终止时,内核必须能恢复被中断进程的执行。
尽管内核在处理前一个中断时可以接受一个新的中断,但在内核代码中还是存在一些临界区,在临界区中,中断必须被禁止。
中断和异常
中断:
可屏蔽中断(maskable interrput)
I/O设备发出的所有中断请求(IRQ)都产生可屏蔽中断。可屏蔽中断可以处于两种状态:屏蔽的或非屏蔽的;一个屏蔽的中断只要还是屏蔽的,控制单元就忽略它。
要根据中断允许标志的设置来判断CPU是否能响应中断请求。
非屏蔽中断(nonmaskable interrupt)
只有几个危机事件(如硬件故障)才引起非屏蔽中断,非屏蔽中断由CPU辨认。
不受中断允许标志的影响,不能用软件进行屏蔽。
异常:
处理器探测异常
当CPU执行指令时探测到的一个反常条件产生的异常。客园进一步分为三组,这取决与CPU控制单元产生异常时保存在内核态堆栈eip寄存器中的值。
故障(fault)
通常可以修正,修正后程序重新开始。保存在eip中的值是引起故障的指令地址,因此,当异常处理程序终止时,那条指令会被重新执行。
陷阱(trap)
在陷阱指令执行后立即报告,内核把控制权返回程序后就可以继续。保存在eip中的值是一个随后要执行的指令地址。只有当没必要执行已中止的指令时,才触发陷阱,陷阱的主要用途是为了调试程序。
异常终止(abort)
发生一个严重的错误,控制单元出了问题,不能在eip寄存器中保存异常指令的确切位置。如硬件故障或系统表中的无效值。
编程异常(programmed exception)
编程异常也通常叫做软中断,如into(检查溢出)和bound(检查地址出界),用途:执行系统调用及给调试程序通报一个特定的事件。
IRQ和中断
每个能发出中断请求的硬件设备控制器都有一条名为IRQ(Interrupt ReQuest)的输出线。所有现有的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连。
异常
80x86微处理器发布了大约20种不同的异常,内核必须为每种异常提供一个专门的异常程序。对于某些异常,CPU控制单元在开始执行异常处理程序前会产生一个硬件出错码,并且压入内核堆栈。
一个中断处理程序既可以抢占其他的中断处理程序,也可以抢占异常处理程序。相反,异常处理程序从不抢占中断处理程序。
标签:中断,屏蔽,处理程序,内核,异常,CPU From: https://www.cnblogs.com/wxk1213/p/17359505.html