logic of 2.4 Linux MM - schemes and sketches

Hi,MM !

刺猬@http://blog.csdn.net/littlehedgehog

 

 

 

 

 

 

 在看有关Linux 2.4 kernel MM管理时一直对于内核中active_list、inactive_clean_list、inactive_dirty_list不甚理解,翻遍了有关书籍都未找到更为详细的介绍。今天无意中翻到国外有篇文章是专门介绍有关内容,比较精炼。

 

注: 为了简化,我们假定物理内存是UMA

 

 

先来看看这几个链表中页面的相互转化:

 

 

active list  

1、包含age>0的页面

2、页面可能被映射入进程空间中了

3、这些页面都在"老化"

 

inactive_dirty list

1、包含的是脏的、并且age==0的页面

2、这些页面没有映射到任何进程中去

 

inactive_clean list

1、每个页面管理区都设置了一个inactive_clean_list

2、包含的是干净的、并且age==0的页面

3、可以被__alloc_page当作是free_page  回收使用

4、同样这些页面也没有映射到任何进程中去

 

free_list

1、每个管理区都设置了free_list链表

2、这些页面中的数据都是没用的 (也就是我们可以直接放心用这个页面,不用管页面swap_out之类的)

3、我们需要维持free_list中的页面数量,这样保证我们的分配不至于失败

 

 

1) 只有作为页高速缓存的物理页面才会存在于list中。(我想这里原作者是指除free_list的链表)

2) 如果一个页面是匿名(指匿名映射)页面,那么不会存在任何list中。

3) 如果一个被加入page cache和swap cache 的页面不来自于任何list,那么它将被添加到active_list中去。

4) 以下列举的函数都是把page添加到active_list:

    age_page_up()     add_to_page_cache()

 

 

swap_cache

1、swap_cache属于页高速缓存(page cache)的一部分

2、只有那些在swap_cache中脏的页面才会被交换出去(swap out)

 

 

kswapd()

 

 

logic of 2.4 Linux MM - schemes and sketches_第1张图片refill_inactive() -

 

 

basic idea

 

 

 

do_try_to_free_pages() - basic idea

 

 

 

 

 

你可能感兴趣的:(linux,cache,list,basic,UP,idea)