Linux cache受記憶體保護嗎?瘋語者書夫碼字先生2021-11-04 05:04:28

受記憶體保護。

平常當我們使用free 檢視記憶體使用的情況,看到cache佔比很大,一般都認為cache的都是可被系統使用的。事實上,cache的部分記憶體是不會被自動釋放的。

以下所列是Linux系統記憶體cache的幾種不會被釋放的情況。

當cache作為檔案快取被釋放的時候會引發IO變高,這是cache加快檔案訪問速度所要付出的成本。

tmpfs(Linux提供一種“臨時”檔案系統)中儲存的檔案會佔用cache空間,除非檔案刪除否則這個cache不會被自動釋放。

使用shmget方式申請的共享記憶體會佔用cache空間,除非共享記憶體被ipcrm或者shmdt,否則相關的cache空間都不會被自動釋放。

使用mmap(將一個檔案對映進程序的虛擬記憶體地址,之後就可以透過操作記憶體的方式對檔案的內容進行操作)方法申請的MAP_SHARED標誌的記憶體會佔用cache空間,除非程序將這段記憶體munmap,否則相關的cache空間都不會被自動釋放。

實際上shmget、mmap的共享記憶體,在核心層都是透過tmpfs實現的,tmpfs實現的儲存用的都是cache。

記憶體的使用是一件很複雜的事情,cache是不能當做空閒空間使用的,深究記憶體之道,任重而道遠。