linux中內存使用原理,swap,cache,buffer的含義

Swap分區在系統的物理內存不夠用的時候,把物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的物理內存被臨時保存到Swap分區中,等到那些程序要運行時,再從Swap分區中恢復保存的數據到內存中。

需要說明一點,並不是所有從物理內存中交換出來的數據都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當一部分數據被直接交換到文件系統。例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當需要將這些程序的內存空間交換出去時,就沒有必要將文件部分的數據放到Swap空間中了,而可以直接將其放到文件裏去。如果是讀文件操作,那麼內存數據被直接釋放,不需要交換出來,因爲下次需要時,可直接從文件系統恢復;如果是寫文件,只需要將變化的數據保存到文件中,以便恢復。但是那些用malloc和new函數生成的對象的數據則不同,它們需要Swap空間,因爲它們在文件系統中沒有相應的“儲備”文件,因此被稱作“匿名”(Anonymous)內存數據。這類數據還包括堆棧中的一些狀態和變量數據等。所以說,Swap空間是“匿名”數據的交換空間。


如果給所有應用分配足夠內存後,物理內存還有剩餘,linux會盡量再利用這些剩餘的空閒內存,以提高整體I/O效率,其方法是把這部分剩餘內存再劃分爲cache及buffer兩部分加以利用。
從磁盤讀取到內存的數據在被相關應用程序讀取後,如果有剩餘內存,則這部分數據會存入cache,以備第2次讀取時,避免重新讀取磁盤。當一個應用程序在內存中修改過數據後,因爲寫入磁盤速度相對較低,在有空閒內存的情況下,這些數據先存入buffer,在以後某個時間再寫入磁盤,從而應用程序可以繼續後面的操作,而不必等待這些數據寫入磁盤的操作完成。
如果在某個時刻,系統需要更多的內存,則會把cache部分擦除,並把buffer中的內容寫入磁盤,從而把這兩部分內存釋放給系統使用,這樣再次讀取cache中的內容時,就需要重新從磁盤讀取了。
通過以上分析可以得知,空閒物理內存不多,不一定表示系統運行狀態很差,因爲內存的cache及buffer部分可以隨時被重用,在某種意義上,這兩部分內存也可以看作詩額外的空閒內存。swap如果被頻繁調用,bi,bo長時間不爲0,則纔是內存資源是否緊張的依據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章