我有一個關於Linux內存以下問題:關於Linux內存類型問題
我知道主動存儲器是最頻繁訪問的內存部分。但是,有人能夠解釋我如何將Linux視爲一個內存位置用於活動內存或非活動內存。
所有組件的活動內存是由什麼組成的?磁盤/文件緩存是否被視爲活動內存的一部分。
Buffers
和Cached
內存有什麼區別?
我有一個關於Linux內存以下問題:關於Linux內存類型問題
我知道主動存儲器是最頻繁訪問的內存部分。但是,有人能夠解釋我如何將Linux視爲一個內存位置用於活動內存或非活動內存。
所有組件的活動內存是由什麼組成的?磁盤/文件緩存是否被視爲活動內存的一部分。
Buffers
和Cached
內存有什麼區別?
我試着回答你的問題:
(1)從根本上說,你的想法是正確的。但是Linux內核中的頁面緩存實現很複雜。 Linux內核使用LRU(最近最少使用)算法來管理頁面緩存列表。在一個Linux系統中可能有不同的內存區域,每個區域都維護着多個LRU列表,例如LRU_INACTIVE_ANON,LRU_ACTIVE_ANON(這兩個列表用於匿名頁面緩存),LRU_INACTIVE_FILE,LRU_ACTIVE_FILE(這兩個列表用於文件頁面緩存),LRU_UNEVICTABLE。這些列表使用LRU算法進行維護(添加到尾部,從頭部刪除)。根據訪問頻率,頁面在活動列表和非活動列表之間轉換。僅當頁面被訪問並且它位於不活動列表中時,纔會將頁面添加到活動列表尾部。如果活動列表變得太大,活動列表頭部的頁面將移動到非活動列表尾部。頁面回收發生在非活動列表上,從非活動列表的開頭開始。 (2)常規文件讀/寫,塊設計文件訪問和內存映射文件都可以觸發Linux內核生成活動或非活動頁面緩存。此外,用戶空間進程和用戶空間堆棧中使用的malloc可以觸發Linux內核生成頁面緩存。 (3)也許我誤解了你的問題,我想你是指緩衝區緩存和頁面緩存之間的區別:較舊的版本內核使用緩衝區緩存和頁面緩存。頁面緩存用於文件訪問(如常規文件訪問,存儲器映射文件,塊設備文件訪問)和緩衝區緩存用於物理磁盤塊訪問(通常,物理磁盤塊的大小小於一頁,因此多個物理磁盤塊可以填充到一個頁面中)。儘管新版本內核仍在使用緩衝區緩存概念,但新內核基於頁面緩存實現緩衝區緩存。
或者你指的是內存緩衝區和cpu緩存之間的區別,如果是的話,內存緩衝區是加速磁盤/外設訪問,而cpu緩存是加速內存訪問。
你是什麼意思? 「用戶空間進程和用戶空間堆棧中使用的malloc也可以觸發Linux內核生成頁面緩存。」 – 2015-01-13 12:29:50