linux記憶體機制

weixin_34377065發表於2014-04-12

~# free -m
         total used  free shared buffers cached
Mem: 16086 8579 7507    0      152      8009
-/+ buffers/cache: 417 15669  系統分配但未被使用的buffers/cache 數量。
Swap: 30514 3 30510  表示硬碟上交換分割槽的使用情況。只有mem被當前程式實際佔用完,即沒有了bufferscache時,才會使用到swap

一、在linux的記憶體分配機制中,優先使用實體記憶體,當實體記憶體還有空閒時(還夠用),不會釋放其佔用記憶體,就算佔用記憶體的程式已經被關閉了,該程式所佔用的記憶體用來做快取使用,對於開啟過的程式、或是讀取剛存取過得資料會比較快。
1. 實際可用記憶體大小:
Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);
2. 已經分配的記憶體大小:
Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)
3. 實體記憶體總大小
total(Mem) = used(-/+ buffers/cache) + free(-/+ buffers/cache)

二. buffer 與cache 的區別
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use.
2.1 Cache
Cache:快取記憶體,是位於CPU與主記憶體間的一種容量較小但速度很高的儲存器。
由於CPU的速度遠高於主記憶體,CPU直接從記憶體中存取資料要等待一定時間週期,Cache中儲存著CPU剛用過或迴圈使用的一部分資料,當CPU再次使用該部分資料時可從Cache中直接呼叫,這樣就減少了CPU的等待時間,提高了系統的效率。
Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache整合在CPU內部,L2 Cache早期一般是焊在主機板上,現在也都整合在CPU內部,常見的容量有256KB或512KB L2 Cache。

2.2 Buffer
Buffer:緩衝區,一個用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料的區域。通過緩衝區,可以使程式之間的相互等待變少,從而使從速度慢的裝置讀入資料時,速度快的裝置的操作程式不發生間斷。
在Free命令中顯示的buffer和cache,它們都是佔用記憶體:
buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩衝區,更靠近儲存裝置,或者直接就是disk的緩衝區。
cache: 作為page cache的記憶體, 檔案系統的cache,是memory的緩衝區

相關文章