一個段描述符中各欄位和標誌的含義如下:
(1)段限長欄位Limit(Segment limit field):用於指定段的長度。處理器會把段描述符中兩個段限長欄位組合成一個20位的值,並根據顆粒度標誌G來指定段限長Limit值的實際含義。如果G=0,則段長度Limit範圍可從1B~1MB,單位是1B;如果G=1,則段長度Limit範圍可從4KB~4GB,單位是4KB。
根據段類型中的段擴展方向標誌E,處理器以兩種不同方式使用段限長Limit。對於向上擴展的段(簡稱上擴段),邏輯地址中的偏移值範圍可以從0到段限長值Limit。大於段限長Limit的偏移值將產生一般保護性異常。對於向下擴展的段(簡稱下擴段),段限長Limit的含義相反。根據默認棧指針大小標誌B的設定,偏移值範圍可從段限長Limit到0xFFFFFFFF或0xFFFF。而小於段限長Limit的偏移值將產生一般保護性異常。對於下擴段,減小段限長欄位中的值會在該段地址空間底部分配新的記憶體,而不是在頂部分配。80x86的棧總是向下擴展的,因此這種實現方式很適合擴展堆疊。
(2)基地址欄位Base(base address field):該欄位定義在4GB線性地址空間中一個段位元組0所處的位置。處理器會把3個分立的基地址欄位組合形成一個32位的值。段基地址應該對齊16位元組邊界。雖然這不是要求的,但通過把程式的代碼和數據段對齊在16位元組邊界上,可以讓程式具有最佳性能。
(3)段類型欄位TYPE(Type field):用行指定段或門(Gate)的類型、說明段的訪問種類以及段的擴展方向。該欄位的解釋依賴於描述符類型標誌S指明是一個套用(代碼或數據)描述符還是一個系統描述符。TYPE欄位的編碼對代碼、數據或系統描述符都不同,如圖4-14所示。
如圖二所示
(4)描述符類型標誌S(Descriptor type flag):用於指明一個段描述符是系統段描述符(當S=0)還是代碼或數據段描述符(當S=1)。
(5)描述符特權級欄位DPL(Descriptor privilege level):用於指明描述符的特權級。特權級範圍從0到3。0級特權級最高,3級最低。DPL用於控制對段的訪問。
(6)段存在標誌P(Segment present):用於指出一個段是在記憶體中(P=1)還是不在記憶體中(P=0)。當一個段描述符的P標誌為0時,那么把指向這個段描述符的選擇符載入進段暫存器將導致產生一個段不存在異常。記憶體管理軟體可以使用這個標誌來控制在某一給定時間實際需要把那個段載入進記憶體中。這個功能為虛擬存儲提供了除分頁機制以外的控制。圖4-15給出了當P=0時的段描述符格式。當P標誌為0時,作業系統可以自由使用格式中標註為可用(Available)的欄位位置來保存自己的數據,例如有關不存在段實際在什麼地方的信息。
如圖三所示的當存在位P=0時的段描述符格式
(7)D/B(默認操作大小/默認棧指針大小和/或上界限)標誌(Default operation size/default stack pointer size and/or upper bound):根據段描述符描述的是一個可執行代碼段、下擴數據段還是一個堆疊段,這個標誌具有不同的功能。(對於32位代碼和數據段,這個標誌應該總是設定為1;對於16位代碼和數據段,這個標誌被設定為0。)
可執行代碼段。此時這個標誌稱為D標誌並用於指出該段中的指令引用有效地址和運算元的默認長度。如果該標誌置位,則默認值是32位地址和32位或8位的運算元;如果該標誌為0,則默認值是16位地址和16位或8位的運算元。指令前綴0x66可以用來選擇非默認值的運算元大小;前綴0x67可用來選擇非默認值的地址大小。
棧段(由SS暫存器指向的數據段)。此時該標誌稱為B(Big)標誌,用於指明隱含堆疊操作(如PUSH、POP或CALL)時的棧指針大小。如果該標誌置位,則使用32位棧指針並存放在ESP暫存器中;如果該標誌為0,則使用16位棧指針並存放在SP暫存器中。如果堆疊段被設定成一個下擴數據段,這個B標誌也同時指定了堆疊段的上界限。
下擴數據段。此時該標誌稱為B標誌,用於指明堆疊段的上界限。如果設定了該標誌,則堆疊段的上界限是0xFFFFFFFF(4GB);如果沒有設定該標誌,則堆疊段的上界限是0xFFFF(64KB)。
(8)顆粒度標誌G(Granularity):該欄位用於確定段限長欄位Limit值的單位。如果顆粒度標誌為0,則段限長值的單位是位元組;如果設定了顆粒度標誌,則段限長值使用4KB單位。(這個標誌不影響段基地址的顆粒度,基地址的顆粒度總是位元組單位。)若設定了G標誌,那么當使用段限長來檢查偏移值時,並不會去檢查偏移值的12位最低有效位。例如,當G=1時,段限長為0表明有效偏移值為0~4095。
(9)可用和保留位(Available and reserved bits):段描述符第2個雙字的位20可供系統軟體使用;位21是保留位並應該總是設定為0。
相關詞條
-
全局描述符表
全局描述符表 GDT(Global Descriptor Table) 在Protected Mode下,一個重要的必不可少的數據結構就是GDT(Glo...
-
中斷描述符表
中斷描述符表,常見於計算機套用之中,將每個異常或中斷向量分別與它們的處理過程聯繫起來。
-
局部描述符表
局部描述符表,是保護模式下存儲器定址的一種數據表,它包含了與某個任務相關聯的段描述符,在設計作業系統時,通常每個任務有一個獨立的LDT。
-
GDT[放電管終端機型位公差描述符表]
GDT是氣體放電管縮寫詞,(gas discharge tube)實質是一種密封在陶瓷腔體中的放電間隙,腔體中充有惰性氣體以穩定放電管的放電電壓。其主要...
終端機 型位公差 描述符表 -
虛擬地址描述符
被訪問了吧。還有個問題就是,對於程式來講,地址不是連續的,是分段的。代碼段、數據段、堆、棧等等。可是進程的空間是連續的,從0x0000000到0x7FFFFFF。總要有個數據結構描述程式的各個段對應那段地址空間。這兩個...
-
可執行指令
簡介可執行指令(executable instruction)是指機器或系統中可以執行並產生作用的指令。不同的機器或系統的可執行...
簡介 Windows下20個特殊的執行命令 作業系統類可執行指令 -
保護模式
一個段的描述符需要規定對自身的訪問許可權(Access)。所以,在保護模式...,被稱為段描述符。這種情況下,如果我們直接通過一個64-bit段描述符來引用一個段的時候,就必須使用一個64-bit長的段暫存器裝入這個段描述符...
概況 安裝描述 載入描述 其他東西 啟動核心 -
pm[Protected Mode (保護模式)]
,也就說一個段的描述符需要規定對自身的訪問許可權(Access)。所以...的數據結構中,被稱為段描述符。這種情況下,如果我們直接通過一個64-bit段描述符來引用一個段的時候,就必須使用一個64-bit長的段暫存器裝入這個段...
概況 安裝描述 載入描述 其他東西 啟動核心