日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内存管理 - 页表的映射过程初步了解

發布時間:2025/4/14 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内存管理 - 页表的映射过程初步了解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux下的頁表映射分為兩種,一是Linux自身的頁表映射,另一種是ARM32 MMU硬件的映射。

為什么會分兩種;看一下什么是MMU;

MMU是Memory Management Unit的縮寫,中文名是內存管理單元,有時稱作分頁內存管理單元(英語:paged memory management unit,縮寫為PMMU)。
它負責處理中央處理器(CPU)的內存訪問請求的計算機硬件。它的功能包括虛擬地址到物理地址的轉換(即虛擬內存管理)、內存保護、中央處理器高速緩存的控制;

MMU位于處理器內核和連接高速緩存以及物理存儲器的總線之間。當處理器內核取指令或者存取數據的時候,都會提供一個有效地址(effective address),或者稱為邏輯地址、虛擬地址。這個地址是可執行代碼在編譯的時候由鏈接器生成的。有效地址不需要和系統的實際硬件物理地址相匹配,而是通過MMU將有效地址映射成對應的物理地址,以訪問指令和數據。

很早時候的電腦有沒有MMU,記不清;很早期還沒虛擬地址的概念;按資料說,實際上MMU是為滿足操作系統越來越復雜的內存管理而產生的;

1. ARM32頁表映射
?由于ARM32和Linux內核維護的頁表項有所不同,所以維護了兩套PTE。

PGD存放在swapper_pd_dir中,一個PGD目錄項其實包含了兩份ARM32 PGD。

所以再分配PTE的時候,共分配了1024個PTE,512個給Linux OS維護用;512個給ARM32 MMU用,對應兩個PGD的頁表數目。

1.1 ARM32處理器查詢頁表

32bit的Linux采用三級映射:PGD-->PMD-->PTE,64bit的Linux采用四級映射:PGD-->PUD-->PMD-->PTE,多了個PUD。

縮寫是PGD:Page Global Directory、PUD:Page Upper Directory、PMD:Page Middle Directory、PTE:Page Table Entry。

1.2 Linux頁表映射相關數據結構

我們知道在map_lowmem()使用create_mapping()創建頁表映射,這個函數的參數結構是struct map_desc。

下面來研究它的相關結構,有助于理解內核是如何處理頁表映射的。

arch\arm\include\asm\mach\map.h:

struct map_desc {
??? unsigned long virtual;------虛擬地址起始地址
??? unsigned long pfn;----------物理地址開始頁幀號
??? unsigned long length;-------內存空間大小
??? unsigned int type;----------mem_types中的序號
};

......

總結

以上是生活随笔為你收集整理的Linux内存管理 - 页表的映射过程初步了解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。