我們在linux用free -m 檢視linux記憶體使用情況。-m 引數就是用 m顯示內容使用情況。這時回顯會出現幾個結果。
mem 是 記憶體的使用情況總覽表。
totel:機器總的物理記憶體 單位為:m
used:用掉的記憶體。這裡是從系統的層面看到的。
free:空閒的物理記憶體。這個也是從系統的層面看到的。
物理記憶體=系統看到的用掉的記憶體+系統看到空閒的記憶體。
我們平時看記憶體的使用也就看這些。
shared:多個程序共享的記憶體總和,當前廢棄不用。
buffers:系統分配但未被使用的buffers 數量。
cached: 系統分配但未被使用的cached數量。
先給出公式:
total = used + free ;total = |+ buffers/cache|+|- buffers/cache| 這裡指是絕對值;
給程式預留的記憶體空間 = buffers+cached 。
記憶體使用上來說,linux 系統會把物理記憶體占用一部分,也就是used的大小,然後在這裡記憶體裡面分一部分來供所有的程式實際使用。就如同現在有個10畝地地的大田(總記憶體),我買個5畝準備蓋房子,我宣告我圈到院子裡的都是我的了,並且我蓋上了圍牆,我圈起來,這5畝地就是used的大小,;別管我咋使用了,然後我拿出1畝地來蓋房子。蓋房子的這些地就是系統程式實際使用的,這部分就是:- buffers/cache,然後我還會預留
出來一部分在房子外開闢臨時停車棚、臨時菜園等之類的,buffers和cached就是這些除了房子之外圍牆之內的所有的可以供我臨時使用所占用地了,,buffers和cached可以理解為 5畝地-蓋房子的1畝 剩下的都是可以供我使用的。所以看來,我占用的就是5畝地。但實際上只有1畝地用於住房,剩下的地就是供我隨意支配使用了。
所以得出來:我實際占用的地=用於住房的地(- buffers/cache)= 圍牆內的5畝地(used)-可以供我臨時使用的地 (buffers+cached)
而這個- buffers/cache 不是僅僅是系統占用的,是系統和系統中的程式共同占用的實際用到的記憶體空間!
-/+ buffers/cache:可以分為兩部分 + buffers/cache;- buffers/cache。這兩部分的關係是:
總的物理記憶體=|+ buffers/cache|+|- buffers/cache|;總的物理記憶體=兩個buffers/cache的物理值相加的和。
這個是從程式的角度上來看的。
- buffers/cache:程式角度上看已經使用的記憶體數,這才是程式實實在在用掉的記憶體數。
+ buffers/cache:程式角度上看未使用、可用的記憶體數。
實際上來說,程式占用的真正記憶體就是:- buffers/cache 的數值。
所以看系統,真正已經用的記憶體數:used-(buffers+cached)的值。
真正未用到的記憶體數:free+buffers+cached 的值。
Linux系統記憶體管理簡介
linux記憶體管理之物理空間 linux核心中有個全域性變數mem map,指向乙個page資料結構的陣列,每個page資料結構代表著乙個物理頁面,整個資料就代表著系統中的全部物理頁面。頁表項的高20位對於軟體和mmu硬體有著不同的意義。對於軟體,這是乙個物理頁面的序號,將這個序號用作下標就可以從...
Linux程序虛擬記憶體簡介
使用者態和核心態 程序在執行時一般存在兩種狀態 使用者態 核心態。使用者態是指程序在執行使用者 核心態時指程序在執行核心 所以在linux中每個程序都存在兩個棧分別使用者使用者態和核心態的執行。使用者空間和核心空間 在32位系統中linux程序的虛擬記憶體為4gb,linux核心將這4g位元組的空間...
Linux 記憶體管理之highmem簡介
一 linux核心位址空間 一般來說linux 核心按照 3 1 的比率來劃分虛擬記憶體 x86等 3 gb 的虛擬記憶體用於使用者空間,1gb 的記憶體用於核心空間。當然有些體系結構如mips使用2 2 的比率來劃分虛擬記憶體 2 gb 的虛擬記憶體用於使用者空間,2 gb 的記憶體用於核心空間,...