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