2010-08-03 66 views
15

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

回答

16

interrupt handlers上有很好的维基百科页面。

“中断处理程序,也称为一个中断服务例程(ISR),是在一个操作系统或它们的执行是通过一个中断的接收触发的设备驱动程序的回调子例程。中断处理程序具有的多个函数,这些函数根据中断产生的原因以及中断处理程序完成其任务的速度而有所不同。“

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

一个很好的例子是从硬盘读取数据。驱动器速度很慢,您不希望操作系统等待数据恢复;你希望操作系统去做其他事情。因此,您设置了系统,以便在磁盘有请求的数据时引发中断。在磁盘的中断服务程序中,CPU将获取现在已准备好的数据并将其返回给请求者。

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

0

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

最小的16位例如

首先学习如何创建一个最小的bootloader OS和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个字节。

Minimal example that does some IO使处理程序可见。

保护模式

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

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

Minimal example

参见

相关问题:What does "int 0x80" mean in assembly code?

相关问题