段描述符
在作業系統中,分段是一種記憶體管理技術,其中記憶體被分成可以分配給程序的段。這些段的長度可能不是固定的,並且不以連續的方式儲存。這種方法是在分頁過程之後開發的,分頁過程需要多個頁面才能將程序載入到主記憶體中,而分段則將程式碼分成段,其相關的程式碼可以合併形成一個塊。
段表儲存與段和程序相關的所有詳細資訊。生成邏輯地址,CPU 透過參考段表將其轉換為物理地址。該表包含關於段的兩個欄位,它們是基地址和限制。基地址或段基地址表示段的基地址,其中包含段的初始物理地址,限制表示段的長度。根據程序如何劃分成段以及它們在記憶體區域中的位置,分段可以分為虛擬分段和簡單分段。
段描述符
段描述符用於分段過程中將邏輯地址轉換為線性地址。被劃分的記憶體段具有特權、初始地址或基地址、段限制和使用情況等屬性。所有這些資訊都儲存在段描述符中。它們包含全域性和區域性描述符表,這些表使用段選擇器進行標識。
在 80286 架構及更高版本中,段描述符具有 8 位元組長的結構,具有 32 位基地址、20 位限制和訪問許可權,系統描述符的以下欄位列在下面:
段的基地址。
段限制表示段的大小
訪問許可權位元組,表示用於訪問資訊的使用者的保護機制。
段的控制位

段描述符的結構
上圖表示段描述符格式的結構,下面列出了其中存在的欄位或元件。
段基地址 - 這由線性地址空間中段的 32 位基地址組成。它位於下部,範圍從 16 到 31,上部從 0 到 7,然後是位 24 到 31。
段限制 - 它定義了 20 位欄位,它是最大的偏移量,可以根據粒度位 G=0 或 1 進行解釋。
粒度 - 這表示如果 G=0,則限制是位元組;如果 G=1,則限制是頁面(4 千位元組)。限制支援高達 220 位元組,對於頁面,它是 4096 位元組,最大為 232 位元組。
預設值 - 此欄位表示運算元的預設大小。它將段描述為 32 位或 64 位,其值為 D=0 和 D=1。
大(Big) - 它用於資料段,當位設定為 1 時,最大偏移量為 32 位 0xffffffff,對於 16 位為 0x0000ffff。
長(Long) - 它用於具有指令編碼的 64 位段,當 L 設定為 1 時,D 欄位應為 0。
可用/使用者位 - 它可供使用者使用,x86 忽略它,它旨在用於軟體,並且未由硬體定義。
存在位 - 當它設定為 1 時,程序的當前段被載入到記憶體中,當欄位為 0 時,訪問它將導致找不到異常。
描述符級別特權 - 它表示段的特權級別,用數字 0、1、2 和 3 表示,其中級別 0(資料欄位為 00)是核心部分中最特權的級別,管理員可以訪問它,級別 1(01)、級別 2(10)和級別 3(11)賦予使用者最低的特權。
系統位 - 當 S 為 1 時,它表示程式碼段或資料段;如果 S 為 0,則表示段或門描述符。
型別 - 它具有幾種型別的訪問許可權,例如:可讀,R=1 或 R=0,指示段是否處於可讀模式。
可寫,W=1 或 W=0,指示段是否處於可寫模式或僅用於讀取。
一致性,C=1 或 C=0,從較低的特權級別呼叫程式碼段。
已訪問位,A=0 或 A=1,指示段未被訪問或已載入到暫存器中。
結論
分段技術用於將程序劃分為稱為段的較小模組,並將相關資料組合起來形成單個段以載入到記憶體中。劃分模組的大小取決於輸入程序的長度和型別。維護段表以儲存有關段及其任務的資訊。CPU 使用段描述符和全域性描述符表來檢索有關段型別及其記憶體的資訊。此過程可最大限度地利用 CPU,因為段的類似資料可以同時作為一個段載入。