Linux記憶體術語小記

2021-09-23 19:19:30 字數 1621 閱讀 2206

整理一下記憶體的一些術語。

記憶體(memory)也被稱為記憶體儲器,其作用是用於暫時存放cpu中的運算資料,以及與硬碟等外部儲存器交換的資料。它的訪問速度慢於cpu快取,但快於硬碟。算是儲存結構中的第二層。

我們的程式要執行,都需要先讀取到記憶體中。我們所說的記憶體,通常指的就是物理記憶體,也就是記憶體條

linux使用虛擬儲存器來管理記憶體。通過將對記憶體進行抽象,將其作為儲存在硬碟上資料的快取記憶體,只將當前程序部分**快取到主存中(當前程序的程式較少時,可以全部快取在主存中),從而提高了主存的利用率,使其同時可以容納更多的程序同時執行。

虛擬儲存器是對主存的的一種抽象,基本思想:利用硬碟來充當記憶體,用記憶體作硬碟的快取。即虛擬位址空間維護的是硬碟中的資料,通過將要使用的資料快取在記憶體中,使應用程式誤以為資料一直在記憶體中。

如圖所示,頁表中有的位址指向的是物理儲存器,有的指向虛擬儲存器(磁碟)。如果訪問的記憶體沒有載入物理記憶體,則會引發缺頁。作業系統就會把磁碟中對應的頁調入記憶體。

檔案對映頁指的是記憶體中能對應到檔案的頁(也叫有名頁),比如我們讀取乙個txt檔案,這個檔案在記憶體中的映像就是乙個檔案對映頁。載入記憶體的程式**也都是檔案對映頁。

檔案對映頁如果被改寫,就被稱為髒頁。在記憶體不足或者程式呼叫刷盤指令時,髒頁會被刷回磁碟。因此,通常情況下,記憶體不足時最先釋放檔案對映頁。

並不是所有的記憶體都能對應到檔案,比如程式中的一些中間資料,malloc申請的記憶體空間。它們沒有對應的檔案,所以被稱之為匿名頁

作業系統劃了乙個專門的空間來給匿名頁做交換。稱之為交換分割槽(swap),windows中稱之為虛擬記憶體。當物理記憶體緊張時,髒頁被刷回磁碟檔案,而匿名頁則被交換到swap中。

但,因為使用swap會消耗大量io,而且也會大量浪費記憶體(記錄位址等),加上目前記憶體容量越來越大。所以大多情況下,swap都不啟用。

頁高速緩衝儲存器,簡稱頁高緩。page cache的大小為一頁,通常為4k。在linux讀寫檔案時,它用於快取檔案的邏輯內容,從而加快對磁碟上映像和資料的訪問。顯然,這是檔案對映頁。

page cache是vfs檔案系統層的cache,例如 對於乙個ext3檔案系統而言,每個檔案都會有一棵radix樹管理檔案的快取頁,這些被管理的快取頁被稱之為page cache。所以,page cache是針對檔案系統而言的。

其中文名稱為緩衝器高速緩衝儲存器,buffer cache是對裝置資料的快取。

在有檔案系統的情況下,對檔案操作,那麼資料會快取到page cache,如果直接採用dd等工具對磁碟block進行讀寫,那麼資料會快取到buffer cache。

這裡給人一種重複快取的感覺,buffer cache快取了一次,page cache又快取了一次,這顯然是沒必要的。所以,在linux 2.6的核心中page cache和buffer cache進一步結合,buffer pages其實也是page cache裡面的頁。所以,如果資料既在buffer cache快取又在page cache快取,那就直接用page cache儲存,不會存兩份。當然,一些磁碟的資訊,依然是buffer cache儲存的。

記憶體概念 術語

主存 物理記憶體,計算機的高速數儲存區域,動態隨機訪問記憶體 dram 常駐記憶體 當前處於主存中的記憶體。虛擬記憶體 乙個抽象的主存概念,它幾乎是無限的和非競爭性的。虛擬記憶體不是真實的記憶體。他向每個程序和核心提供巨大的 線性的而且私有的位址空間。它簡化了軟體開發,把物理記憶體的分配交給作業系統...

術語 堆 記憶體 ,棧 記憶體

堆表示程式可用的記憶體區,也叫動態記憶體區。堆記憶體的分配與釋放次序是隨機的,這就是說,如果你按次序分配三塊記憶體,那麼到時並不按分配時的次序釋放記憶體。堆管理器會負責所有操作,你只需簡單地使用getmem 函式請求新記憶體或呼叫constructor 建立物件,delphi 會返回乙個新的記憶體塊...

記憶體洩漏小記

記憶體託管語言中的記憶體洩漏產生的主要原因 保留下來卻永遠不再使用的物件引用。典型的演算法是 1 檢查結果是否在快取中,如果在,就返回結果。2 如果結果不在快取中,就進行計算。3 將計算出來的結果新增到快取中,以便以後對該操作的呼叫可以使用。注意 該演算法的問題 或者說是潛在的記憶體洩漏 出在最後一...