2013-05-14 55 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

相關問題