linux的記憶體管理
linux的記憶體分為:物理記憶體和虛擬記憶體。
物理記憶體就是系統硬體提供的記憶體大小,是真正的記憶體。
虛擬記憶體:虛擬記憶體就是為了滿足物理記憶體的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯記憶體,用作虛擬記憶體的磁碟空間被稱為交換空間(swap space)。
使用場景:物理記憶體不足,linux核心將暫時不用的記憶體資料寫入交換空間,則物理記憶體得到釋放;當需要用到那些資料時,則從交換空間讀入物理記憶體。
常用記憶體監控命令:top free
total: 物理記憶體總大小
used:已經使用的物理記憶體大小
free:空閒的物理記憶體大小
shared:多個程序共享的記憶體大小
buffers/cached:磁碟快取的大小
men:代表物理記憶體使用情況
buffers/cache:代表磁碟快取使用情況
swap:代表交換空間使用情況。
從核心的角度看記憶體的狀態:
物理記憶體大小7820m,空閒記憶體大小824m。已經使用的記憶體為7820-824=6996m。可用記憶體824並不包含buffers和cached。
核心完全控制著記憶體的使用情況,linux會在需要記憶體的時候,或在系統執行逐步推進時,將buffers和cached狀態的記憶體變為free狀態的記憶體,以供系統使用。
從應用層的角度看記憶體的狀態:
已經使用4093m,可用空間大小3727m。3727=190+2712+824
應用程式可用的物理記憶體值是mem項的free值加上buffers和cached值之和,也就是說,這個free值是包括buffers和cached項大小的,對於應用程式來說,buffers/cached占有的記憶體是可用的,因為buffers/cached是為了提高檔案讀取的效能,當應用程式需要用到記憶體的時候,buffers/cached會很快地被**,以**用程式使用。
為了降低磁碟讀取資料對時間和資源的消耗,linux引入了buffer/cache機制
buffers與cached都是記憶體操作,用來儲存系統曾經開啟過的檔案以及檔案屬性資訊,這樣當作業系統需要讀取某些檔案時,會首先在buffers 與cached記憶體區查詢,如果找到,直接讀出發送給應用程式,如果沒有找到需要資料,才從磁碟讀取,這就是作業系統的快取機制,通過快取,大大提高了操 作系統的效能。但buffers與cached緩衝的內容卻是不同的
buffers主要用來存放目錄裡面有什麼內容,檔案的屬性以及許可權等等。而cached直接用來記憶我們開啟過的檔案和程式。
Linux記憶體 記憶體管理的實質
1.核心初始化 核心建立好核心頁目錄頁表資料庫,假設物理記憶體大小為len,則建立了 3g 3g len 0 len 這樣的虛位址vaddr和實體地址paddr的線性對應關係 核心建立乙個page陣列,page陣列和物理頁面系列完全是線性對應,page用來管理該物理頁面狀態,每個物理頁面的虛位址儲存...
Linux記憶體 記憶體管理的實質
1.核心初始化 核心建立好核心頁目錄頁表資料庫,假設物理記憶體大小為len,則建立了 3g 3g len 0 len 這樣的虛位址vaddr和實體地址paddr的線性對應關係 核心建立乙個page陣列,page陣列和物理頁面系列完全是線性對應,page用來管理該物理頁面狀態,每個物理頁面的虛位址儲存...
Linux記憶體 記憶體管理的實質
1.核心初始化 核心建立好核心頁目錄頁表資料庫,假設物理記憶體大小為len,則建立了 3g 3g len 0 len 這樣的虛位址vaddr和實體地址paddr的線性對應關係 核心建立乙個page陣列,page陣列和物理頁面系列完全是線性對應,page用來管理該物理頁面狀態,每個物理頁面的虛位址儲存...