2013-05-14 28 views

回答

9

的BIOS使用PIT中断(IRQ0)来跟踪时间。一旦进入保护模式,实模式中断处理不再有效;处于保护模式的CPU需要保护模式IDT(中断描述符表)。在进入保护模式时,IDT(IDT寄存器)中的IDT限制设置为0(任何中断编号都会导致CPU产生一个异常),所以一旦PIT(或其他)产生中断,CPU将产生一个异常,将产生另一个异常,触发#DF(双重故障),并因此导致#TF(三重故障)。

此外,IRQ0在保护模式下发生将触发#DE(除法异常)ISR(中断服务例程),作为中断向量从0到31保留用于在保护模式下的异常。因此,发生的事情的顺序可能是这样(注意:这里假设PIT中断将首先被触发,但正如我之前所说的那样,它可以本质上是任何中断,每个都会导致#DF和三重故障):

  1. PE位在CR0中设置。
  2. PIT中断发生,PIC(可编程中断控制器)获得在其上的销#0的信号。
  3. PIC重新映射未设置,所以它触发CPU上IRQ0。
  4. IRQ0(= #DE)尝试执行中断处理程序,但IDT的限制为0,因此会生成(IIRC)#GP(常规保护错误)。
  5. IDT的限制为0,因此会生成#DF。
  6. IDT的下限为0,从而产生#TF。
  7. CPU停止或重新启动。
+0

谢谢你的好评! – 2013-05-23 11:29:19

+0

IRQ0不会触发#DE - 它会触发#DF,因为默认情况下,PIC的IRQ0由BIOS映射到INT 8。 – Ruslan 2015-08-20 12:46:59

+0

@Ruslan这听起来完全是任意的。任何BIOS都可以以任何想要的方式重新映射它。此外,这里并不完全相关 - 除#DF或#TF以外的任何矢量都将触发#DF,#DF将触发#TF和#TF,以及...将直接跳到7.顺便说一句。什么BIOS重新映射到特定的矢量?对此有任何参考,还是只是通过实验发现的价值? – Griwes 2015-08-20 12:51:04

相关问题