很多人接觸Linux的內(nèi)存管理是從malloc()這個(gè)C語言庫函數(shù)開始,也是從那時(shí)開始就知道了虛擬內(nèi)存的概念。但很多人可能并不知道虛擬地址是如何轉(zhuǎn)換成物理地址的,今天帶你搞懂虛擬地址到物理地址的轉(zhuǎn)換過程,這其實(shí)也是MMU的工作原理。
我們知道,在Linux中,每個(gè)進(jìn)程都有自己獨(dú)立的地址空間,且互不干擾。每個(gè)進(jìn)程的地址空間又分為用戶空間和內(nèi)核空間,但這些地址空間使用的都是虛擬地址,它們和物理地址空間關(guān)系是怎樣的呢?虛擬地址空間和物理地址空間的關(guān)系如下:
對于不同的進(jìn)程,面對的都是同一個(gè)內(nèi)核,其內(nèi)核空間的地址對應(yīng)的物理地址都是一樣的,因此進(jìn)程1和進(jìn)程2中內(nèi)核空間都映射到了相同的物理內(nèi)存PA1上。
而不同進(jìn)程的用戶空間是不一樣的,即便相同的虛擬地址,也會(huì)被映射到不同的物理地址上。如圖中兩個(gè)進(jìn)程相同用戶空間的地址0x123456分別被映射到了PA2和PA3物理地址上。
那么如何完成上述虛擬地址到物理地址的轉(zhuǎn)換呢?
完成虛擬地址到物理地址的轉(zhuǎn)換,我們需要借助一個(gè)硬件——MMU。
MMU: Memory manager unit,內(nèi)存管理單元,負(fù)責(zé)將虛擬地址(VA)轉(zhuǎn)為物理地址(PA)。
分頁機(jī)制
在Linux系統(tǒng)上,現(xiàn)在用到的內(nèi)存管理機(jī)制,大部分是分頁機(jī)制。在分頁機(jī)制出現(xiàn)之前,還出現(xiàn)過動(dòng)態(tài)分區(qū)法、分段機(jī)制。
動(dòng)態(tài)分區(qū)法是還沒用引入虛擬地址之前使用的,使用的都是物理內(nèi)存,屬于非常早期的機(jī)制。分段機(jī)制則引入了虛擬地址的概念,而分頁機(jī)制在分段機(jī)制后出現(xiàn),主要解決分段機(jī)制內(nèi)存碎片的問題。本篇以分頁機(jī)制講解虛擬地址到物理地址的轉(zhuǎn)換,下面介紹分頁機(jī)制的一些基本概念。
分頁機(jī)制的基本概念:
分頁:將內(nèi)存劃分為固定長度的單元,每個(gè)單元就是一頁
頁:對于虛擬地址空間,將地址空間劃分為固定大小單元的單元,每個(gè)單元稱為一頁
頁幀:對于物理地址空間,將地址空間分為固定大小的單元,每個(gè)單元稱為頁幀
VPN:Virtual Page Number,虛擬頁面號
PFN:Physical Frame Number,物理頁幀號
分頁管理內(nèi)存的核心問題就是虛擬地址頁到物理地址頁幀的映射關(guān)系
-
Linux
+關(guān)注
關(guān)注
87文章
11432瀏覽量
212466 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3103瀏覽量
74917 -
C語言
+關(guān)注
關(guān)注
180文章
7628瀏覽量
139949 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4365瀏覽量
63945
發(fā)布評論請先 登錄
鴻蒙內(nèi)核源碼分析:物理地址的映射
操作系統(tǒng)中的邏輯地址和物理地址
請問ARM虛擬地址 物理地址 加載地址 運(yùn)行地址的聯(lián)系是什么?
為什么MMU的地址映射中物理地址會(huì)跳變?
【HarmonyOS】虛擬地址<->物理地址是如何映射的
物理地址到虛擬地址的轉(zhuǎn)換步驟
linux kernel實(shí)現(xiàn)物理地址到虛擬地址空間的切換方法
用戶態(tài)得到虛擬地址對應(yīng)的物理地址

鴻蒙內(nèi)核中虛擬地址與物理地址之間是如何映射的

虛擬地址物理地址等眾多地址及MMU相關(guān)知識(shí)

虛擬地址翻譯物理地址的流程有哪些呢?

Linux系統(tǒng)為什么需要引入虛擬地址

評論