中斷描述符表 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段的選擇符,該任務用於處理異常和/或中斷。

中斷門、陷阱門和任務門描述符格式如下圖所示:

 

 

以上的圖例和描述,都是參考網上的,非原創,只是為了方便看書和讀代碼時候查看各個描述符的結構

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM