中斷處理特權級轉換



中斷處理得特權級轉換是通過門描述符(gate descriptor)和相關指令來完成的。一個門描述符就是一個系統類型的段描述符,一共有4個子類型:調用門描述符(call-gate descriptor),中斷門描述符(interrupt-gate descriptor),陷阱門描述符(trap-gate descriptor)和任務門描述符(task-gate descriptor)。與中斷處理相關的是中斷門描述符和陷阱門描述符。這些門描述符被存儲在中斷門描述符表(Interrupt Descriptor Table,簡稱IDT)當中。CPU把中斷向量作爲IDT表項的索引,用來指出當中斷髮生時使用哪一個門描述符來處理中斷。中斷門描述符和陷阱門描述符幾乎是一樣的。中斷髮生時實施特權檢查的過程如下圖所示:

3.4.3.5

門中的DPL和段選擇符一起控制着訪問,同時,段選擇符結合偏移量(Offset)指出了中斷處理例程的入口點。內核一般在門描述符中填入內核代碼段的段選擇索引。產生中斷後,CPU一定不會將運行控制從高特權級轉向低特權級,特權級必須要麼保持不變(當操作系統內核自己被中斷的時候),或被提升(當用戶態程序被中斷的時候)。無論哪一種情況,作爲結果的CPL必須等於目的代碼段的DPL。如果CPL發生了改變(比如從用戶態到內核態),一個棧切換操作(通過TSS完成)就會發生。如果中斷是被用戶態程序中的指令所觸發的(比如軟件執行INT n生產的中斷),還會增加一個額外的檢查:門的DPL必須具有與CPL相同或更低的特權。這就防止了用戶代碼隨意觸發中斷。如果這些檢查失敗,就會產生一個一般保護異常(general-protection exception)。


發佈了40 篇原創文章 · 獲贊 42 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章