保護模式下三個重要的系統表——GDT、LDT和IDT 這裡主要是解釋中斷描述符表 中斷描述符表IDT將每個異常或中斷向量分別與它們的處理過程聯繫起來。與GDT和LDT表類似,IDT也是由8位元組長描述符組成的一個數組。與GDT不同的是,表中第一項可以包含描述符。為了構成IDT表中的一個索引值,處理器把 ...
保護模式下三個重要的系統表——GDT、LDT和IDT
這裡主要是解釋中斷描述符表
中斷描述符表IDT將每個異常或中斷向量分別與它們的處理過程聯繫起來。與GDT和LDT表類似,IDT也是由8位元組長描述符組成的一個數組。與GDT不同的是,表中第一項可以包含描述符。為了構成IDT表中的一個索引值,處理器把異常或中斷的向量號*8。因為最多只有256個中斷或異常向量,所以IDT無需包含多於256個描述符。IDT中可以含有少於256個描述符,因為只有可能發生的異常或中斷才需要描述符。不過IDT中所有空描述符項應該設置其存在位標誌為0。
IDT表可以駐留線上性地址空間的任何地方,處理器使用IDTR寄存器來定位IDT表的位置。這個寄存器中含有IDT表32位的基地址和16位的長度(限長)值。IDT表基地址應該對其在8位元組邊界上以提高處理器的訪問效率。限長值是以位元組為單位的IDT表的長度。
IDTR寄存器是6個位元組, [一個簡單的多任務內核實例]里, boot.s中, 有
lidt idt_48 ; 載入IDTR。6位元組操作數:2位元組表長度,4位元組線性基地址 idt_48: .word 0 ; idt 從零開始, 限長也是0,跟沒有一樣,不用在意 .word 0,0 ; idt基地址 , 0開始
IDT 表中可以存放三種類型的門描述符:
- 中斷門描述符
- 陷阱門描述符
- 任務門描述符
中斷門和陷阱門含有一個長指針(即段選擇符和偏移值),處理器使用這個長指針把程式執行權轉移到代碼段中的異常或中斷的處理程式中。這兩個段的主要區別在於處理器操作EFLAGS寄存器IF標誌上。IDT中任務門描述符的格式與GDT和LDT中任務門的格式相同。
任務門描述符中含有一個任務TSS段的選擇符,該任務用於處理異常和/或中斷。
中斷門、陷阱門和任務門描述符格式如下圖所示:
以上的圖例和描述,都是參考網上的,非原創,只是為了方便看書和讀代碼時候查看各個描述符的結構