logic of 2.4 Linux MM - schemes and sketches

本文详细解释了Linux 2.4内核中内存管理的重要概念,包括active_list、inactive_clean_list和inactive_dirty_list等链表的作用及页面状态转换机制。探讨了这些链表如何维护内存的有效利用。

Hi,MM !

刺猬@http://blog.youkuaiyun.com/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()

 

 

refill_inactive() -

 

 

basic idea

 

 

 

do_try_to_free_pages() - basic idea

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值