Linux核心管理 記憶體(三)

2021-09-20 18:20:11 字數 925 閱讀 7429

首先明確一點,mmu的主要工作只有乙個,就是把虛擬位址對映到實體地址。

mmu是memory management unit的縮寫,中文名是

記憶體管理

單元,它是

**處理器

(cpu)中用來管理

虛擬儲存器

、物理儲存器的控制線路,同時也負責

虛擬位址

對映為實體地址

,是乙個硬體,

mmu工作原理也就是cpu訪問記憶體的時的操作順序:

1,核心發出發出va(虛擬位址)讀取指令,tlb(mmu中的一塊快取記憶體)首先接到,去cache裡找,裡面儲存了va對應的頁表,如果有直接讀取,如果沒有就去mmu轉換後的pa(物理記憶體位址)去讀,如果再沒有就發生了缺頁,正常的話就是被交換到swap去了,交換回來,當然缺頁還有別的原因,例如va讀取許可權不夠,或者va與pa的對映關係沒有建立。

這一篇把分頁和分段的基本原理介紹的極其透徹。但是分頁具體實現的方法,例如頁目錄,頁表還要再細看。

乙個頁目錄有1024項,虛擬位址最高的10bit剛好可以索引1024項(2的10次方等於1024)。乙個頁表也有1024項,虛擬位址中間部分的10bit,剛好索引1024項。虛擬位址最低的12bit(2的12次方等於4096),作為頁內偏移,剛好可以索引4kb,也就是乙個物理頁中的每個位元組。

乙個虛擬位址轉換成實體地址的計算過程就是,處理器通過cr3找到當前頁目錄所在物理頁,取虛擬位址的高10bit,然後把這10bit右移2bit(因為每個頁目錄項4個位元組長,右移2bit相當於乘4)得到在該頁中的位址,取出該位址處pde(4個位元組),就找到了該虛擬位址對應頁表所在物理頁,取虛擬位址第12位到第21位這10位,然後把這10bit右移2bit(因為每個頁表項4個位元組長,右移2bit相當於乘4)得到在該頁中的位址,取出該位址處的pte(4個位元組),就找到了該虛擬位址對應物理頁的位址,最後加上12bit的頁內偏移得到了實體地址。

linux核心記憶體管理

整個linux虛擬記憶體發布如下 3g以上是核心位址,0 3g是程序位址空間。在x86結構中,核心位址分為三種,這三種型別的區域如下 zone dma 記憶體開始的16mb zone normal 16mb 896mb zone highmem 896mb 結束 程序位址空間的3g,通過mmu,隨機...

Linux 核心開發 記憶體管理

記憶體管理是對計算機記憶體進行分配和使用的技術。記憶體管理主要存在於多工的作業系統中,因為記憶體資源極其有限。須要在不同的任務之間共享記憶體,記憶體管理的存在就是要高效 高速的非配記憶體,並在適當的時候 和釋放記憶體。以保各個任務正常的執行。最常見的記憶體管理機制有 段式記憶體管理和頁式記憶體管理。...

Linux核心之記憶體管理

1 核心把物理頁作為記憶體管理的基本單位 處理器的最小可定址單位一般為字 記憶體管理單元 mmu,管理記憶體並把虛擬位址轉換為實體地址的硬體 通常以頁為單位進行處理 2 不同體系結構支援的頁大小不盡相同,有些還支援多種,大多數32體系結構支援4kb的頁,64位體系結構一般支援8kb頁 3 核心用st...