5
我从实模式切换到保护模式之前,许多许多的操作系统(以及一些引导程序),它们都禁止中断(cli
)看到。为什么我们需要这样做?为什么在从实模式切换到保护模式之前需要禁用中断?
我从实模式切换到保护模式之前,许多许多的操作系统(以及一些引导程序),它们都禁止中断(cli
)看到。为什么我们需要这样做?为什么在从实模式切换到保护模式之前需要禁用中断?
的BIOS使用PIT中断(IRQ0)来跟踪时间。一旦进入保护模式,实模式中断处理不再有效;处于保护模式的CPU需要保护模式IDT(中断描述符表)。在进入保护模式时,IDT(IDT寄存器)中的IDT限制设置为0(任何中断编号都会导致CPU产生一个异常),所以一旦PIT(或其他)产生中断,CPU将产生一个异常,将产生另一个异常,触发#DF(双重故障),并因此导致#TF(三重故障)。
此外,IRQ0在保护模式下发生将触发#DE(除法异常)ISR(中断服务例程),作为中断向量从0到31保留用于在保护模式下的异常。因此,发生的事情的顺序可能是这样(注意:这里假设PIT中断将首先被触发,但正如我之前所说的那样,它可以本质上是任何中断,每个都会导致#DF和三重故障):
谢谢你的好评! – 2013-05-23 11:29:19
IRQ0不会触发#DE - 它会触发#DF,因为默认情况下,PIC的IRQ0由BIOS映射到INT 8。 – Ruslan 2015-08-20 12:46:59
@Ruslan这听起来完全是任意的。任何BIOS都可以以任何想要的方式重新映射它。此外,这里并不完全相关 - 除#DF或#TF以外的任何矢量都将触发#DF,#DF将触发#TF和#TF,以及...将直接跳到7.顺便说一句。什么BIOS重新映射到特定的矢量?对此有任何参考,还是只是通过实验发现的价值? – Griwes 2015-08-20 12:51:04