保護模式下的中斷 80386在實模式下的中斷處理和8086基本相同。存儲器的最低1 KB為中斷向量表,存放中斷類型0~255的中斷服務程序的入口地址。每個中斷類型碼對應4個字節,分別為中斷服務程序所在段的段地址以及中斷服務程序入口在該段內的偏移量。 1.中斷門/陷阱門描述符 在保護模式下,80386用IDT代替中斷向量表。IDT是一種特殊的系統表,在IDT中最多可以登錄256個中斷門或陷阱門描述符。IDT是由IDTR建立或定義的(見前面的圖7.9)。 表7.12表示了中斷門/陷阱門描述符的格式。和其他描述符一樣,每個中斷門/陷阱門描述符也佔用8個字節,其中包含了中斷服務程序的代碼段描述符的選擇器以及中斷服務程序入口在段中的偏移量。另外還有一個字節未使用,一個字節作訪問權字節,該字節最低位(*)為0表示是中斷門描述符,為1表示是陷阱門描述符。中斷門和陷阱門的區別在于:通過中斷門進行中斷處理時,EFLAGS的中斷允許位IF被清0(關中斷),而通過陷阱門IF位則不變。因此中斷門是面向硬中斷的門(在響應一個硬中斷的過程中應將IF位清0,以禁止響應另一個硬中斷),而陷阱門是面向軟中斷的門。

2.通過中斷門/陷阱門的中斷處理 和8086一樣,每種中斷都分配一個中斷類型號。圖7.39表示了80386保護模式下通過中斷門/陷阱門的中斷處理過程。CPU在獲得中斷類型號後,將其乘以8並將結果和IDTR中的基地址相加,所得結果指向了IDT中對應的中斷門/陷阱門。CPU將門描述符中的選擇器數值自動地加載到CS的段選擇器字段,根據選擇器的TI位,從GDT或LDT中選擇一個段描述符(由索引號決定),將其加載到CS的描述符寄存器中。這時cs描述符寄存器的基地址字段給出的就是中斷服務程序所在段的基地址,而中斷服務程序在該段中的偏移量由門描述符直接給出,二者相加便形成中斷服務程序的入口地址,從而進入相應的中斷處理。

下面一段話可以幫助讀者理解保護模式下的中斷: 中斷服務程序位于某一個段中,該段需要描述,其描述符放在GDT或LDT中。而選擇該段描述符的選擇器存放在IDT中由中斷類型號決定的中斷門/陷阱門裡。所以,CPU獲取中斷類型號後先從IDT中找到對應的中斷門/陷阱門,取出選擇器,再從GDT或LDT中取出中斷服務程序所在段的段描述符,從而找到中斷服務程序所在段的基地址,而段內偏移就在中斷門/陷阱門中。二者相加便可形成中斷服務程序的入口地址。 需要指出,在保護模式下,還可以通過任務門進行中斷處理。使用任務門進行中斷處理比使用中斷門/陷阱門靈活,但對中斷的響應不如使用中斷門/陷阱門快。通過任務門的中斷處理涉及一些細節,這裡就不介紹了。讀者如有需要,可查閱有關文獻。 3.中斷處理時的特權級保護 CPU的中斷處理過程也是一次控制權轉移的過程,因此對中斷服務程序的代碼段也要進行保護。總的原則是中斷服務程序代碼段的特權級應高于或等于被中斷的程序的特權級。對于使用中斷門/陷阱門的中斷處理,具體情況見表7.13。

|