在中断服务程序中会发生什么?

有人可以请我解释一下,在中断服务程序中发生了什么事情(虽然这取决于具体的例程,一般的解释就足够了)? 对我来说,这一直是个黑盒子。

中断处理程序上有一个很好的维基百科页面。

“中断处理程序(也称为中断服务程序(ISR))是操作系统或设备驱动程序中的回调子程序,其执行由接收中断触发。中断处理程序具有多种功能,这些功能根据中断产生的原因以及中断处理程序完成任务的速度。“

基本上当一个硬件(一个硬件中断)或某个OS任务(软件中断)需要运行时,触发一个中断。 如果这些中断没有被屏蔽(忽略),操作系统将停止它正在做的事情,并调用一些特殊的代码来处理这个新事件。

一个很好的例子是从硬盘读取。 驱动器很慢,你不希望你的操作系统等待数据回来; 你想要操作系统去做其他事情。 所以你建立系统,以便当磁盘有请求的数据时,引发一个中断。 在磁盘的中断服务程序中,CPU将取得现在已准备好的数据并将其返回给请求者。

ISR经常需要快速发生,因为硬件可能有一个有限的缓冲区,如果现在已经足够快地被拉下来,它将被新数据覆盖。 当CPU正在服务一个ISR时,让ISR快速完成也很重要,否则其他中断将被屏蔽,这意味着如果CPU无法及时获得足够的数据,则可能会丢失足够的数据。

理解最好的方法是自己做一些简单的例子。

最小的16位示例

首先学习如何创建一个最小的bootloader操作系统,并在QEMU和真正的硬件上运行它,正如我在这里解释的: https : //stackoverflow.com/a/32483545/895245

现在你可以运行在16位实模式下:

movw $handler0, 0x00 mov %cs, 0x02 movw $handler1, 0x04 mov %cs, 0x06 int $0 int $1 hlt handler0: /* Do 0. */ iret handler1: /* Do 1. */ iret 

这将按顺序进行:

  • Do 0.
  • Do 1.
  • hlt :停止执行

注意处理器如何查找第一个地址为0处理程序,第二个处理程序是4 :这是一个称为IVT的处理程序表,每个条目有4个字节。

最小的例子,做一些IO使处理程序可见。

保护模式

现代操作系统以所谓的保护模式运行。

在这种模式下处理有更多的选择,所以更复杂,但精神是一样的。

最小的例子

也可以看看

相关问题: “int 0x80”在汇编代码中是什么意思?