門描述符

桀溺。發表於2020-11-04

門,顧名思義,是通往某處的入口。在計算機中,用門來表示一段程式的入口。拿它和段描述符對比
一下就容易理解了,段描述符中描述的是一片記憶體區域,而門描述符中描述的是一段程式碼。
在這裡插入圖片描述
在這裡插入圖片描述
門描述符中的各屬性位與段描述符中的屬性意義相同,大夥可以參考全域性描述符表部分的介紹。下面
簡要說下這幾種門描述符,這裡我們們只討論 32 位保護模式

任務門

任務門和任務狀態段TSS是 Intel 處理器在硬體一級提供的任務切換機制,所以任務門需要和 TSS 配合在一起使用,在任務門中記錄的是 TSS 選擇子,偏移量未使用。任務門可以存在於全域性描述符表 GDT、區域性描述符表 LDT、中斷描述符表 IDT 中。描述符中任務門的 type 值為二進位制 0101 ,順便說一句大多數作業系統包括 Linux 都未用 TSS 實現任務切換,我們們這裡也不討論啦。

中斷門

中斷門包含了中斷處理程式所在段的段選擇子和段內偏移地址. 當通過此方式進入中斷後, 標誌暫存器eflags 中的IF位自動置0, 也就是在進入中斷後, 自動把中斷關閉,避免中斷巢狀. Linux 就是利用中斷門實現的系統呼叫, 就是那個著名的 int 0x80 . 中斷門只允許存在於 IDT 中。描述符中中斷門的 type為二進位制 1110 .

陷阱門

陷阱門和中斷門非常相似,區別是由陷阱門進入中斷後,標誌暫存器 eflags 中的 位不會自動置0. 陷阱門只允許存在於 IDT 中。描述符中陸阱門的 type 值為二進位制 1111 .

呼叫門

呼叫門是提供給使用者程式進入特權級的方式,其 DPL = 3 。呼叫門中記錄例程的地址,它不能用int 指令呼叫,只能用 call jmp 指令。呼叫門可以安裝在 GDT LDT 中。描述符中呼叫門的 type 值為二進位制 1100 。

除呼叫門外,另外的任務門、中斷門、陷阱門都可以存在於中斷描述符表中
現代作業系統為了簡化開發、提升效能和移植性等原因,很少用到呼叫門和任務門

注: 本節摘自作業系統真象還原7.4節

相關文章