中斷和異常 中斷描述符表的初始化

2021-09-26 05:53:35 字數 605 閱讀 9140

一、中斷描述符表的初始化

從作業系統角度描述中斷描述符表的初始化。

linux核心在系統的初始化階段需要進行大量的初始化工作,與中斷相關的工作有:初始化可程式設計控制器(中斷控制器)8259a;將中斷描述符表的起始位址載入idtr暫存器,並初始化表中的每一項。

使用者程序通過int指令發出乙個中斷請求,其中斷請求向量在0~255之間。為防止使用者使用int指令模擬非法的中斷和異常,必須對中斷描述符表進行謹慎的初始化。其措施之一是將中斷門或陷阱門中的請求特權級dpl域置為0。如果使用者程序發出這樣乙個中斷請求,cpu會檢查出其當前特權級cpl(3)與所請求的特權級dpl(0)衝突,產生乙個通用保護異常。

但有時必須讓使用者程序能夠使用核心提供的功能(系統呼叫),從使用者態進入核心態,通過把中斷門或陷阱門的dpl域置為3。

當計算機執行在實模式時,中斷描述符表被初始化,由bios使用。一旦真正進入linux核心,中斷描述符表被移到記憶體的另乙個區域,並為進入保護模式進行預初始化:用lidt指令對中斷描述符表暫存器idtr初始化,即把idtr置為0。把中斷描述符表idt的起始位址載入idtr。

用setup_idt()填充中斷描述符表中的256個表項。填充這個表時,使用乙個空的中斷處理程式。理由因為處於初始化階段&#

初始化中斷描述表

現在,我們知道了 80x86 微處理器在硬體級對中斷和異常做了些什麼,接下來,我們可以繼續描述如何初始化中斷描述表。核心啟用中斷以前,必須把 idt表的初始位址裝到 idtr 暫存器,並初始化表中的每項。這項工作是在初始化系統時完成的。int指令允許使用者態程序發出乙個中斷訊號,其值可以是 0 25...

中斷描述符表

中斷描述表是乙個系統表,它與每乙個中斷或異常向量相聯絡,每乙個向量在表中有相應的中斷或異常處理程式的入口位址。核心在允許中斷發生前,必須適當地初始化idt。在第二章中,我們介紹了gdt和ldt,idt的格式與這兩種表的格式非常相似,表中的每一項對應乙個中斷或異常微量,每個向量由8個位元組組成。因此,...

中斷向量表 和 中斷描述符 關係

在實模式下,從位址 0 開始的 1kb 大小記憶體構成乙個中斷向量表,表中每一項包括 4 個位元組,對應一 個中斷向量,儲存了該中斷向量所對應中斷處理程式的入口位址,如圖 6.4 所示。進入保護模式後,中斷向量表改名為中斷描述符表 interrupt descriptor table,idt 並允許...