1. 程式人生 > >Linux記憶體回收機制總結

Linux記憶體回收機制總結

1.當vma flag中標記VM_LOCKED時,表示這段記憶體不能被回收,要常駐記憶體中.

 2.   當ZONE的空閒頁面數大於WMARK_HIGH時,這個ZONE就可認為是balanced(由函式zoen_balanced()判斷)

 3.    當ZONE的水位低於WMARK_LOW時,觸發核心啟動記憶體回收,當ZONE的水位高於WMARK_LOW時,停止記憶體回收.

4.Page相關標誌位

PageWriteback(page)檢查page是否設定PG_PageWriteback標誌位,表示頁面正在回寫磁碟:

 PG_writeback:  is set before writeback starts and cleared when it finishes

PG_locked :     This bit is set before I/O and cleared when writeback _starts_ or when read _completes_.

PG_uptodate : tells whether the page's contents is valid.  When a read  completes, the page becomes uptodate

PG_referenced/PG_reclaim :are used for page reclaim for anonymous and file-backed pagecache

PG_head: 表示這個頁是head page

PG_unevictable:表示頁面不可回收.

PG_PageReclaim:如果頁面是Dirty或者處於writeback狀態,那麼這種頁面會放到不活躍連結串列頭,並設定PG_PageReclaim.

PG_swapcache:表示頁面是否分配了swap空間 PageSwapCache(page)

PageSwapBacked(page):檢查page是否為匿名頁面,Page is backed by RAM/swap

對PG_swapcache和PG_SwapBacked的一點理解,swapcache表示匿名頁面已經交換(swap)到磁碟,

而SwapBacked,表示匿名頁面的內容已經從磁碟換回(backed)到記憶體中.

5 共享匿名對映記憶體實現時,雖然關聯到/dev/zero結點,當分配的記憶體page,掛接到lrulist的匿名非活躍連結串列。

6. 核心分配的記憶體kmalloc/alloc_page/vmalloc等等,不會掛接到zone的lrulist