在程式設計中我們(編譯器)為各種資料分配的記憶體均為邏輯位址,邏輯位址通過作業系統轉換為實體地址,也就是晶元級物理記憶體的位址。在使用intel 80x86微處理器時,應當分清以下三種「位址」:
cpu控制單元通過一種稱為分段單元(segmentation unit)的硬體電路把乙個邏輯位址轉換成線性位址;
接著,第二個稱為分頁單元(paging unit)的硬體電路把乙個線性位址轉換成實體地址。
最早記憶體沒有抽象,程式直接讀寫物理記憶體。在這種情況下,通常同時執行兩個程式是不可能的,因為它們很可能同時訪問同乙個實體地址導致程式崩潰。
當intel 8086處理器出現時,記憶體定址迎來第一次飛躍,它引入了乙個重要的概念——段,段式記憶體使得程式位址不再需要靜態重定位,支援了更大的位址。
8086處理器的資料匯流排是16位的,但其目標是定址1mb的記憶體,這意味著需要20位的位址匯流排。為了解決這個問題,當時引入了分段的方法。
乙個邏輯位址由兩部分組成:乙個段識別符號和乙個指定段內相對位址的偏移量。段識別符號是乙個16 位長的字段,稱為段選擇符(segment selector),而偏移量是乙個32 位長的字段。
為了方便找到段選擇符,處理器提供6個段暫存器專門用來存放段選擇符。它們是cs、ss、ds、es、fs和gs。
每個段由乙個8位元組的段描述符(segment descriptor)來具體描述。段描述符放在全域性描述符表(global descriptor table ,gdt)或區域性描述符表(local descriptor table, ldt)中。段描述符標被存在乙個非程式設計cpu暫存器中,非程式設計暫存器對程式設計師不可見,僅供6個可程式設計的段暫存器使用。**
b31 ~ b24 和 b23 ~ b16分別為基位址的 bit16 ~ bit23 和 bit24 ~ bit31;
l19 ~ l16和l15 ~ l0為段limit的 bit10 ~ bit15 和 bit16 ~ bit19。
4位type域描述了段的型別特徵和訪問許可權,廣泛使用如下幾種:
1.**段描述符(描述符代表乙個**段,可以放在gdt或ldt中,s標誌位為1)
2.資料段描述符(描述符代表乙個資料段,可以放在gdt或ldt中,s標誌位為1)
3.任務狀態段描述符(代表乙個任務狀態段(tss),只能存放在gdt中,s標誌位為9或11)
4.區域性描述符表描述符(代表乙個ldt段,只能存放在gdt中,s標誌位為0)
之前提到16位的段選擇符存放在段暫存器中,它直接指向段描述符。每當乙個段選擇符被裝入段暫存器,相應的段描述符就被裝入非程式設計暫存器。*此時cpu只需直接引用段描述符所在暫存器即可,不需訪問主存中的gdt或ldt。*僅當段暫存器的內容改變時,才有必要訪問gdt或ldt。
段選擇符包含以下域:
分段單元(segmentationunit)執行以下操作:
先檢查段選擇符的ti欄位,以決定段描述符儲存在哪乙個描述符表中。ti欄位指明描述符是在gdt中(在這種情況下,分段單元從gdtr暫存器中得到gdt的線性基位址)還是在ldt中(在這種情況下,分段單元從ldtr暫存器中得到ldt的線性基位址)。
從段選擇符的 index 索引字段計算段描述符的位址,index欄位的值乘以8(乙個段描述符的大小),這個結果與gdtr或ldtr暫存器中的內容相加。
把邏輯位址的偏移量與段描述符基位址域(base)相加,就得到了線性位址。
分頁單元在分段之後執行,把線性位址轉換成實體地址。
為了效率起見,線性位址被分成以固定長度為單位的組,稱為頁(page)。頁內部連續的線性位址被對映到連續的實體地址中。這樣,核心可以指定乙個頁的實體地址和其訪問許可權,而不用指定頁所包含的全部線性位址的訪問許可權。
分頁單元把所有的ram 分成固定長度的頁框(page frame)。每乙個頁框包含乙個頁,也就是說乙個頁框的長度與乙個頁的長度一致。頁框是主存的一部分,因此也是乙個儲存區域。
區分一頁和乙個頁框是很重要的,前者只是乙個資料塊,可以存放在任何頁框或磁碟中。
把線性位址對映到實體地址的資料結構稱為頁表(page table)。頁表存放在主存中,並在啟用分頁單元之前必須由核心對頁表進行適當的初始化。
directory域和table域都是10位,它們擁有相同的結構,均包含以下的域:
線性位址的轉換分兩步完成,每一步都基於一種轉換表,第一種轉換表稱為頁目錄表,第二種轉換表稱為頁表。
正在使用的頁目錄的實體地址存放在控制暫存器 cr3中。線性位址內的directory 字段決定頁目錄中的目錄項,而目錄項指向適當的頁表。位址的table 字段依次又決定頁表中的表項,而表項含有頁所在頁框的實體地址。offset 字段決定頁框內的相對位置。
一 基本概念
資料 程式的操作物件,用於描述客觀事物 資料元素 組成資料的基本單位 資料項 乙個資料元素由若干個資料項組成 資料物件 性質相同的資料元素的集合 陣列,鍊錶 struct person 一種資料型別 int main void 資料項 p1.age 0 資料項 線性結構 元素之間的關係為一對一 圖形...
虛擬記憶體基本概念
傳統儲存管理分為連續分配與非連續分配。連續分配分為單一連續分配 固定分割槽分配 動態分割槽分配 非連續分配包括基本分頁儲存管理 基本分段儲存管理 基本段頁式儲存管理。傳統儲存管理由於暫時用不到的資料也長期占用記憶體所以導致記憶體利用率不高。傳統儲存管理的特點就是一次性與駐留性。時間區域性性 如果執行...
Linux記憶體管理之基本概念介紹(一)
linux記憶體管理之基本概念介紹 一 linux記憶體管理之物理記憶體管理 二 linux記憶體管理之記憶體管理單元 mmu 三 linux記憶體管理之分配掩碼 四 linux記憶體管理之夥伴系統 五 linux記憶體管理之slab機制 六 linux記憶體管理之紅黑樹 七 linux記憶體管理之...