Linux 記憶體管理

2021-08-21 21:00:28 字數 1945 閱讀 3819

物理記憶體總是有限的,linux中引入了虛擬記憶體的概念。物理記憶體是系統硬體提供的記憶體的大小,是進**實活動使用的記憶體。虛擬記憶體則是為了彌補物理記憶體的不足而提出的策略,它是利用磁碟空間虛擬出一塊記憶體區域,將暫時用不到的記憶體塊資訊寫入到虛擬記憶體中,用作虛擬記憶體的磁碟空間成為交換空間(swap space)。

作為物理記憶體的擴充套件,系統會將暫時不用的記憶體塊資料寫入到虛擬記憶體中,當需要這部分資料的時候再就從虛擬記憶體中排程取,而經常使用的資訊保留在記憶體中。這樣空餘的物理記憶體就可以進行其他的資料儲存。linux採取的是分頁訪問機制。

note:需要注意一下幾個點:

1、系統會不時的進行頁面交換操作,以保持盡可能多的物理記憶體。即使並沒有什麼事情需要記憶體,系統還是會將暫時不用的記憶體頁面換出,這樣就可以避免等待交換的時間,提高系統的效率。

2、進行頁面交換是有條件的,也就是如何決定乙個頁面該不該被調換到虛擬記憶體中??在《作業系統》中大家可能了解到有很多的演算法被提出來,包括先進先出、基於優先順序、最近最經常使用等演算法。我們經常可以碰到一種現象:及時物理記憶體占用不高,但是交換空間占用比較高。這種在一定條件是合理的。兩者的大小關係並沒有直接的關係。可能乙個程序占用了大量物理記憶體,途中交換到了虛擬記憶體大量頁面,程序執行完畢後物理程序被清理,但是虛擬記憶體還沒來得及清理。

3、交換空間的頁面被調取到物理記憶體時,如果沒有足夠的空間,那麼物理空間還會調換出部分頁的資料到虛擬記憶體,如果此時虛擬記憶體沒有空間了,那麼linux可能會出現假死機、服務異常等狀況,但是過段時間後將會恢復正常。因此合理的設定交換區(虛擬記憶體)的大小至關重要!

檢視記憶體的使用情況:free

1)從核心的角度檢視記憶體使用情況

1899384 kb - 511088 kb = 1388296 kb,當時這個空閒的free量並不包含快取和緩衝區的大小;

2)從應用程式的角度檢視記憶體的使用情況

21912 kb + 187628 kb + 1388296 kb = 1597836 kb。也就是應用程式可用的記憶體為剩餘的free+緩衝區buffer+快取cache的總和量。

3)緩衝區buffer和快取cache的異同

如果有大量的資料進行訪問操作,不管是從磁碟到記憶體還是從記憶體到磁碟,兩者由於硬體速度的差異,將會導致系統效能的下降,因此在llinux中引入了緩衝區buffer和快取cache的概念。兩者的具體使用和概念不同。

緩衝區是用來緩衝塊裝置的,它只記錄檔案系統的元資料(metadata)以及跟蹤瞬時頁面(tracking in-flight pages),而快取用來給檔案做緩衝。通俗一點說:緩衝區主要用來存放目錄裡面有什麼內容,檔案的屬性以及許可權等。而快取直接用來記憶開啟過的檔案和程式。

比如:用vi開啟乙個比較大的檔案,第一次開啟比較慢,第二次開啟就比較快了,用到了快取cache;查詢大量檔案時,第一次比較慢,而第二次則比較快,用到了緩衝區buffer。

1)建立交換空間(只是建立乙個空的空間來使用):

2)啟用交換空間

3)使用交換空間

可以看到交換空間增多,但是如果此時重啟機器,交換空間將會恢復原始狀態。需要將系統的配置檔案修改才可以永久的保持這個交換空間有效。具體的檔案為/etc/fstab,所有的交換空間檔案均是在此定義的。如果需要刪除掛載的檔案,只需要執行:

具體檢視程序記憶體可以分為兩部分:

檢視程式的pid

ps aux | grep filename

然後根據pid,通過top命令實時檢視cpu和mem的情況。

top -p pid

示例

Linux記憶體管理

本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...

Linux記憶體管理

本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心,...

Linux記憶體管理

首先我要說,我這是轉貼,轉的cu論壇上 nonameboy 的帖子,你可以連線過去看看。今天因為要解釋系統中可用記憶體的大小,用google看了半天,還有在cu上找了關天,竞然沒有發現有比較好的章,估計很多人都沒有注意到,懂了以後又沒有整理出來。在cu上看了很多文章說什麼memory leak和li...