我在许多ose(和一些引导加载程序)中看到,它们都会在从实模式切换到保护模式之前禁用中断(cli
)。为什么我们需要这样做?
答案 0 :(得分:10)
BIOS使用PIT中断(IRQ0)来跟踪时间。一进入保护模式,实模式中断处理就不再有效;处于保护模式的CPU需要保护模式IDT(中断描述符表)。进入保护模式后,IDTR(IDT寄存器)中的IDT限制设置为0(任何中断号使CPU产生异常),因此只要PIT(或其他任何)产生中断,CPU就会产生异常,将产生另一个异常,触发#DF(双重故障),结果是#TF(三重故障)。
此外,在保护模式下发生的IRQ0将触发#DE(除异常)ISR(中断服务程序),因为0到31的中断向量被保留用于保护模式下的异常。
所以,(最可能的,因为除了PIT之外的其他中断也可能发生)发生的事情的顺序是这样的(注意:这假设PIT中断将首先被触发,但是,正如我之前所说,它本质上可以任何中断,每个都会导致#DF和三重故障):