Cache
虛擬記憶體和頁面記憶體如何工作?
我知道:
虛擬記憶體分為使用者空間和核心空間,並映射到物理記憶體。當使用者程序訪問文件時,核心將在授予程序訪問權限(頁面記憶體)之前將該文件記憶體到記憶體中。
然而
頁面記憶體的記憶體空間會受到核心空間的限制嗎?或者除了linux中的配置之外,還有哪些東西會限制頁面記憶體大小?
頁面記憶體儲存在 RAM 中。原則上,它可以填滿整個物理記憶體。它沒有的原因是記憶體也用於其他目的。
“匿名”(交換支持)記憶體分配與頁面記憶體的文件支持分配競爭。兩者通過記憶體管理程式碼來平衡。記憶體管理的確切行為非常複雜。當沒有用於新頁面分配的空閒 RAM 時,Linux 將選擇是驅逐舊的交換支持頁面還是舊的文件支持頁面。可以使用
vm.swappiness
配置值調整此選擇的平衡。Linux 支持的一些體系結構缺乏虛擬地址空間(只有 32 位甚至 31 位 :-)。這不會限制頁面記憶體的大小。頁面記憶體被顯式寫入以支持使用臨時虛擬映射。查看主要來源:https ://www.kernel.org/doc/html/latest/vm/highmem.html
記憶體的其他用途是
- 不可撤銷的非記憶體分配。例如核心程式碼。這些分配還包括使用 進行的核心分配
kmalloc()
,它們(大部分?)顯示為“slab”分配。還有其他類型。核心網路緩衝區是一個整體上會變得非常大的不可撤銷記憶體分配的範例。 2. “水印”記憶。這是保留的,以便在壓力下在記憶體管理方面取得進展。例如,我相信當達到水印時可能會使用這些保留,並且需要一些記憶體來寫入舊的匿名頁面以進行交換,以便為其他內容騰出空間。通常,保留可能是記憶體的 1-3%(在更大的系統上更少)。 我係統上的“水印”記憶體預留有多大? 這在小型系統上可能顯示為 3% 的原因與“透明大頁面”有關。