記憶體管理之記憶體定址

2022-09-17 14:51:16 字數 1142 閱讀 2065

記憶體定址

三種記憶體位址

邏輯位址(logical address): 包含機器語言指令中用來指定乙個運算元或一條指令的位址;

線性位址(linear address): 線性位址也稱為虛擬位址(virtual address)

實體地址(physical address): 用於記憶體晶元級記憶體單元定址, 他們與從微處理器的位址引腳傳送到記憶體匯流排上的電訊號相對應, 實體地址由32位或64位無符號整數表示;

記憶體控制單元: 記憶體控制單元(mmu)通過一種稱為分段單元(segmentation unit)的硬體電路把乙個邏輯位址轉換成線性位址;

記憶體仲裁器(memory arbiter)的硬體電路插在匯流排和每個ram晶元之間;

dma控制器與cpu併發操作;

硬體中的分段

段選擇符和段暫存器

段描述符: 每個段由乙個8位元組的段描述符(segment descriptor)表示, 段描述符顧名思義, 它描述了段的特徵;

快速訪問段描述符: 邏輯位址由16位段選擇符和32位偏移位址組成, 段暫存器僅僅存放段選擇符;

分段單元: 分段單元講乙個邏輯位址轉換為相對應的線性位址;

linux中的分段

linux gdt: 單處理器只有乙個gdt表, 而多處理器系統中每個cpu對應乙個gdt, 放在cpu_gdt_table陣列中;

linux ldt: 大多數使用者態下的linux程式不使用區域性描述符表, 這樣核心就定義了乙個預設的ldt供大多數程序共享, 預設的區域性描述符表擋在default_ldt陣列中;

硬體中的分頁

為了效率起見, 線性位址唄分成以固定長度為單位的組, 稱為頁(page);

分頁單元把所有的ram分成固定長度的頁框(page frame, 也叫作物理頁);

把線性位址對映到實體地址的資料結構稱為頁表(page table);

常規分頁

實體地址擴充套件(pae)分頁機制: 頁的大小可以改變;

64位系統中的分頁

4級分頁模式中的4種頁表:

每個程序都有自己的頁全域性目錄和自己的頁表集;

從0x0000 0000 到0xbfff ffff的線性位址, 無論是程序執行在使用者態還是核心態, 都可以定址; 從0xc000 0000到0xffff ffff的線性位址, 只有在核心態的程序才能定址;

核心筆記之記憶體定址

記憶體定址其實硬體已經幫我們解決了很多了,我們常常說的分段分頁機制硬體也有配套的實現,因此這部分內容還是比較容易了解乙個大概的。記憶體定址的幾個要點 1.分段機制中的段選擇符和段描述符的基本內容,這部分在網上大多都有描述。3.與程序的儲存分布相對應的乙個可執行檔案的內部組織,感興趣的可以看看,懂這部...

Linux記憶體管理1 記憶體定址

本文將主要以x86架構為例來介紹linux記憶體管理的記憶體定址。作業系統是橫跨軟體和硬體的橋梁,作業系統設計者必須在硬體相關 和硬體無關 之間劃分清晰的界限,以便作業系統很容易的移植到不同的平台 時代 處理器資料 匯流排寬度 是否有段 位址匯流排 寬度訪存 空間備註 石器時代 80808位無 16...

c 之記憶體管理

c 使用3 種不同解決方案儲存資料,區別是資料保留在記憶體中的時間 兩種儲存持續性為自動 自動變數和暫存器變數 register 沒有記憶體位址 堆疊 在函式外定義的變數和使用關鍵字static定義的變數的儲存持續性都為靜態.分為 3 外部鏈結性,內部鏈結性和無鏈結性 所有靜態變數都有下面的兩個初始...