1.段的定義
2.段描述符表
3.段選擇符
4.段描述符
5.直達底部
分段機制就是把虛擬位址空間中的虛擬記憶體組織成一些長度可變的稱為段的記憶體單元。 80386虛擬位址空間中的虛擬位址(邏輯位址)由乙個段部分和乙個偏移部分構成。段是虛擬位址到線性位址轉化的基礎。每個段有三個引數定義:
段限長,是虛擬位址空間中段內最大可用偏移位址。定義了段的長度。
段屬性,指定段的特性。如該段是否可讀、可寫或可作為乙個程式執行,段的特權級等。
多個段對映到線性位址中的範圍可以部分重疊或覆蓋,甚至完全重疊,如下圖所示
段的基位址、段限長以及段的保護屬性儲存在乙個稱為段描述符
的結構項中。在邏輯位址到線性位址的轉換對映過程中會使用這個段描述符。段描述符儲存在記憶體中的段描述符表
中。
段描述符表是包含段描述符項的乙個簡單陣列。 使用段選擇符
來指定段描述符表中乙個段描述符的位置來指定相應的段。
即使是使用段的最小功能,使用邏輯位址也能訪問處理器位址空間中的每乙個位元組。邏輯位址由 16 位的段選擇符合 32 位的偏移量組成。
當需要訪問處理器位址空間中的某個位元組時。段選擇符指定了該位元組所在的段,偏移量指定了該位元組在段中相對於段基址的位置。處理器會吧每個邏輯位址轉換成線性位址。線性位址是處理器線性位址空間中的 32 位位址。也是平坦的 4gb 位址空間,位址範圍從 0 到 0xffffffff。線性位址空間中含有系統定義的所有段和系統表。
使用段選擇符中的偏移值(段索引,我感覺這個偏移值應該是相對於段描述符表其實位址的偏移)在gdt(全域性描述符表) 或 ldt(區域性描述符表)中定位相應的段描述符。(僅當乙個新的段選擇符載入到段暫存器中時才需要 ??)
利用段描述符校驗段的訪問許可權和範圍,以確保該段是可以訪問的並且偏移量位於段界限內。
利用段描述符中取得的段基位址加上偏移量,形成乙個線性位址。
返回目錄
段描述符表示存放段描述符的乙個陣列。 它的長度可變,最多可以包含 8192 個段描述符,每個段描述符長度為 8 個位元組。段描述符表有兩種:全域性描述符表gdt和區域性描述符表ldt。段描述符表結構如下圖所示。
段描述符表儲存在由作業系統維護著的特殊資料結構中,由處理器的記憶體管理硬體來引用。 這些特殊的資料結構儲存在只有作業系統能夠訪問的受保護的記憶體區域,防止被應用程式修改。
虛擬位址空間被分割成大小相等的兩半。一半由gdt來對映變換到線性位址,另一半由ldt來對映。整個虛擬位址空間共含有 2^14 個段: 一般空間(2^13)是由gdt對映的全域性虛擬位址空間,另一半是由ldt對映的區域性虛擬位址空間。 指定乙個描述符表(gdt或ldt)和表中的描述符號,就可以定位到乙個段描述符(通過段描述符就可以定位到段)。
當任務切換時,ldt會更換成新任務的ldt,gdt不會改變,因為gdt所對映的一半虛擬位址空間是系統中所有任務公有的,ldt所對映的另一半則在任務切換時被改變。系統中所有任務共享的段有gdt來對映。
系統中每個應用程式對應乙個任務,並且每個任務都有自己的ldt,如下圖所示,應用程式a在任務a中執行,擁有ldta ,用來對映段codea和dataa。類似地,應用程式b在任務b中執行,使用ldtb來對映codeb和datab。作業系統核心的兩個段codeos和dataos 使用gdt來對映,這樣它可以被像個人物所共享。 ldta和ldtb兩個段也使用 gdt來對映。
當任務a在執行時,可以訪問 ldta對映的codea 和dataa段,以及gdt對映的作業系統段codeos和dataos。當任務b在執行時,可以訪問的段包括ldtb對映的codeb和datab段,以及gdt對映的作業系統段codeos和dataos。
通過讓每個任務使用不同的ldt,演示了虛擬位址空間如何隔離每個任務。當任務a在執行時,任務b的段不是虛擬位址空間的部分。因此,任務a無法訪問任務b的記憶體。同樣的,當任務b執行時,任務a的段也不能被任務b訪問。這種使用ldt來隔離每個應用程式任務的方法,正式關鍵保護的需求之一。
每個系統必須定義乙個gdt,並可用於系統中所有程式或任務。可以選定義乙個或多個ldt。可以為每個執行任務定義乙個ldt,或者某些任務共享乙個ldt。
gdt本身並不是乙個段,而是線性位址空間的乙個資料結構。gdt的基線性位址和長度必須載入進 gdtr 暫存器中。處理器並不使用 gdt中的第乙個描述符。把這個"空描述符"載入到段暫存器中並不會產生乙個異常。但是,如果使用這些載入了空描述符的段選擇符來訪問記憶體就會引發一般保護性異常。通過使用這個段選擇符初始化段暫存器,就會引發異常。
ldt表存放在ldt型別的系統段中。此時gdt必須含有ldt的段描述符。如果系統支援多ldt,那麼每個ldt都必須在gdt中有乙個段描述和段選擇符。乙個ldt的段描述符可以存放在gdt表的任何地方。 訪問ldt需使用其段選擇符。為了在訪問ldt是減少位址轉換次數,ldt的段選擇符、段基址、段限長以及訪問許可權需要存放在ldtr暫存器中。
返回目錄
段選擇符(或稱段選擇子)是段的乙個十六位標誌符,如下圖所示。段選擇符並不直接指向段,而是指向段描述符表中定義段的段描述符。 段選擇符包括 3 個字段的內容:
下面是一些段選擇符的示例:
段描述符通用格式如下:
返回目錄
作業系統學習(二) 分段機制
1.段的定義 1 2.段描述符表 3.段選擇符 4.段描述符 5.直達底部 分段機制就是把虛擬位址空間中的虛擬記憶體組織成一些長度可變的稱為段的記憶體單元。80386虛擬位址空間中的虛擬位址 邏輯位址 由乙個段部分和乙個偏移部分構成。段是虛擬位址到線性位址轉化的基礎。每個段有三個引數定義 段限長,是...
作業系統學習(二)
程式的可併發執行 程序的定義與特徵 程序的狀態 程序的掛起狀態 程序控制塊 程序的組織形式 程序控制 程序的建立 程序終止 程序的終止過程 引起程序阻塞和喚醒的事件 中斷型別分為如下兩大類 按中斷功能分類 引入,前驅圖 定義 前驅圖是乙個又向無迴圈圖,可用來描述程式段或程序之間的先後次序關係。前趨圖...
作業系統學習筆記(二)
命令方式 作業系統外殼 互動性的介面 系統呼叫方式 作業系統核心 管理物件 1 硬體資源 處理器 儲存器 記憶體 外存 外圍裝置 鍵盤 滑鼠 印表機 顯示器等 2 資訊 資料和軟體 是以檔案的方式來進行管理,作業系統是通過檔案系統模組具體來對軟體 資料 實施管理。管理內容 1 資源的分配 和訪問操作...