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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux内存管理 之 内存节点和内存分区(Zone)

發(fā)布時間:2023/11/27 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内存管理 之 内存节点和内存分区(Zone) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://www.cnblogs.com/youngerchina/p/5624516.html

Linux支持多種硬件體系結(jié)構(gòu),因此Linux必須采用通用的方法來描述內(nèi)存,以方便對內(nèi)存進行管理。為此,Linux有了內(nèi)存節(jié)點、內(nèi)存區(qū)、頁框的概念,這些概念也是一目了然的。

內(nèi)存節(jié)點(Node):主要依據(jù)CPU訪問代價的不同而劃分。多CPU下環(huán)境下,本地內(nèi)存和遠端內(nèi)存就是不同的節(jié)點。即使在單CPU環(huán)境下,訪問所有內(nèi)存的代價都是一樣的,Linux內(nèi)核依然存在內(nèi)存節(jié)點的概念,只不過只有一個內(nèi)存節(jié)點而已。內(nèi)核以struct? pg_data_t來描述內(nèi)存節(jié)點。
內(nèi)存分區(qū)(Zone):Linux對內(nèi)存節(jié)點再進行劃分,分為不同的分區(qū)。內(nèi)核以struct zone來描述內(nèi)存分區(qū)。通常一個節(jié)點分為DMA、Normal和High Memory內(nèi)存區(qū),具體下面再介紹。
頁框(Page Frame):Linux采用頁式內(nèi)存管理,頁是物理內(nèi)存管理的基本單位,每個內(nèi)存分區(qū)又由大量的頁框組成。內(nèi)核以struct page來描述頁框。頁框有很多屬性,這些屬性描述了這個頁框的狀態(tài)、用途等,例如是否被分配。


上圖中的zone_mem_map是一個頁框的數(shù)組,它記錄了一個內(nèi)存分區(qū)的所有頁框的使用情況。

DMA內(nèi)存區(qū):即直接內(nèi)存訪問分區(qū),通常為物理內(nèi)存的起始16M。主要是供一些外設使用,外設和內(nèi)存直接訪問數(shù)據(jù)訪問,而無需系統(tǒng)CPU的參與。
Normal內(nèi)存區(qū):從16M到896M內(nèi)存區(qū)。
HighMemory內(nèi)存區(qū):896M以后的內(nèi)存區(qū)。

為什么高端內(nèi)存的邊界是896M?這是因為,32位Linux虛擬內(nèi)存空間為0-4G,其中0-3G用于用戶態(tài),3G-4G用于內(nèi)核態(tài)。這意味著內(nèi)核只有1G的虛擬地址空間,如果物理內(nèi)存超過1G,內(nèi)核就無法映射了。Linux采取的策略是,內(nèi)核地址空間的前896M采用固定映射,映射方法是:虛擬地址-3G = 物理地址,只能映射到物理地址的前896M。也就是說內(nèi)核虛擬地址空間的3G到3G+896M這部分,頁表的映射是固定的,系統(tǒng)初始化時就建立起來。而虛擬地址空間的最后128M,也就是3G+896M到4G部分采用動態(tài)映射,也就是說頁表映射的物理地址可變的。在系統(tǒng)運行過程中,通過更新頁表,就可以映射到不同的物理地址,當然也包括高端物理內(nèi)存。

這主要解決了兩個問題:第一,這可以使內(nèi)核地址空間映射到高端物理內(nèi)存;第二,虛擬地址空間的3G+896M到4G部分,連續(xù)的虛擬地址空間可以映射到非連續(xù)的物理內(nèi)存,只要通過更新頁表就可以做到,這和用戶態(tài)的虛擬內(nèi)存映射采用了同樣這種方法。這在沒有大段連續(xù)的空閑物理地址時,是非常重要的。

備用內(nèi)存區(qū):
在一個內(nèi)存區(qū)分配頁時,如果這個內(nèi)存區(qū)沒有滿足條件的內(nèi)存頁,則需要從其它內(nèi)存區(qū)或從其它內(nèi)存節(jié)點分配。Linux為每個內(nèi)存區(qū)都建立了備用內(nèi)存區(qū)列表,當前內(nèi)存區(qū)沒有滿足條件的內(nèi)存時,就從備用內(nèi)存區(qū)分配。比如,系統(tǒng)中有4個內(nèi)存節(jié)點A,B,C,D,每個內(nèi)存節(jié)點又分為DMA、Normal、HighMemory內(nèi)存區(qū)。對節(jié)點B來說,內(nèi)存區(qū)分配列表可能是B(HighMemory)、B(Normal)、B(DMA)、A(HighMemory)、A(Normal)、A(DMA)、C(HighMemory)、C(Normal)、C(DMA)、D(HighMemory)、D(Normal)、D(DMA)。
分配內(nèi)存時,優(yōu)先從本地內(nèi)存節(jié)點分配,再從其它內(nèi)存節(jié)點分配。對一個內(nèi)存節(jié)點,優(yōu)先從HighMemory分配,再從Normal或DMA分配。

總結(jié)

以上是生活随笔為你收集整理的linux内存管理 之 内存节点和内存分区(Zone)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。