中断处理流程分为两部分的原因:
●异步执行,会打断其他重要代码,避免被打断的代码停止时间过长,应该执行得越快越好
●上半部(中断处理程序)正在执行时,会屏蔽同级的中断甚至所有其他中断。禁止中断后硬件与操作系统无法通信。中断处理程序执行得越快越好。
●不在进程上下文运行,所以不能阻塞。限制了所做的事情。
中断上下文:
处理器总处于以下三种状态之一:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存 器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。
硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的 一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“ 中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。