Linux.ChinaUnix.net
ChinaUnix | Linux首页 | 新闻 | 博客 | 文章 | 专栏 | 新手 | 方案 | 图书 | 下载 | 人才 | 手册 | wiki | 搜索     
Linux论坛
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


x86下dma映射以及页面锁页换页的问题
首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
duanius
风云使者



UID:471810
注册:2006-10-1
最后登录: 2008-07-04
帖子:407
精华:1

可用积分:363
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
41楼 发表于 2008-5-7 21:13 
鉴于从第二页就开始走题  还是改下名字吧



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
motalelf
风云使者



UID:384785
注册:2006-3-11
最后登录: 2008-06-22
帖子:431
精华:0

可用积分:202
信誉积分:105
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
42楼 发表于 2008-5-7 22:58 
kernel分配一个page后,
只有page为有名页时,才加入pagecache和LRU。
而page为匿名页时,kernel并不将page加入pagecache和LRU。首先没有(inode,index)这个标识,就没办法加入pagecache;加入LRU的话,也没有意义,因为kswapd对LRU中的匿名页完全是特殊处理。


kswap有两个相反的功能

甲: 扫描0~3G的各vm_area的过程,在这个过程中
      a) 将各匿名页变有名(仅限脏的匿名页,非脏匿名页是另外一套处理)
             1. 分配一个(SwapDevice_Inode,SwapDevice_Index),另page变有名
             2. page加入pagecache和LRU
             3. 再以后的处理,以有名页来对待这个page。
      b)遇到有名页
             1. pte从引用page,变为引用(inode,Index),因此page->count--。

乙: 扫描LRU中的过程,这个过程中。
      a) 将各有名页变匿名(前提是这么做有意义,变匿名时count--将导致page释放到buddy)
         b) 遇到匿名页,是另外一套处理。page关联buffer_head则留在LRU;否则丛LRU删除


既甲从(0,3G)中,挑选出来匿名页,将他们变有名,并另他们都在pagecache和LRU中;
同时从(0,3G)中,挑选出来有名页,另pte不再引用这些page,count--。
同时还有个兼职,非脏匿名页只可能是empty_zero_page,直接解除影射,真缺页的时候再补上。

而乙从LRU中,挑选出来有名页,将他们变匿名。前提是(非脏) && (不关联buffer_head) && (匿名后count==0),
同时还有几个兼职,有名页因脏而无法释放的,根据(inode,index),进行回写。
                  有名页因关联buffer_head无法释放的,尝试解除buffer_head与page的关联。
                  匿名页关联buffer_head的,尝试解除buffer_head与page的关联。若成功则将page从LRU剔除。
                  匿名页不关联buffer_head的,直接从LRU剔除



swapout的过程大概如此,
第一步扫描[0,3G]是为的:
     1)page均关联(inode,index),脏的话有地方可以回写,否则匿名写都没地方写。
     2)page均关联(inode,index),pte若不引用page后,可以引用(inode,index)。
真正的关键还是在第二步。



另外,mmap影射内存而非文件时,
如果只是读,那么都是读的empty_zero_page,和LRU扯不上关系。

但是一旦写,马上COW出来一个匿名的脏页,
随后kswapd在扫描[0,3G]时,马上将它关联一个(SwapDevice_Inode,SwapDevice_Index),并加入到pagecache和LRU;然后pte不再引用这个新产生的有名脏页,而是引用(SwapDevice_Inode,SwapDevice_Index)。
随后kswapd在扫描LRU时,将这个有名脏页,回写到(SwapDevice_Inode,SwapDevice_Index),变为有名干净页;然后再变匿名,变为匿名干净页,从而count==0,释放至buddy。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三个代表,吾党所宗。
以杜八耻,以进八荣。
咨尔多士,为民先锋。
夙夜匪懈,和谐是从。
   
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
motalelf
风云使者



UID:384785
注册:2006-3-11
最后登录: 2008-06-22
帖子:431
精华:0

可用积分:202
信誉积分:105
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
43楼 发表于 2008-5-7 23:10 


QUOTE:
原帖由 zx_wing 于 2008-5-7 18:23 发表
塑料袋讲的太细了,我有点看不懂了

恐怕不是太细。面对一个涵盖广,关节多的话题,我觉得自己要么说出来颠三倒四,要么说的不够精确。

上个月我去一个地方面试,人家让我自己谈内存管理,也是这么一个大题目,我觉得实在说不清,说了两句,直接说不懂。最后被pass了。



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

三个代表,吾党所宗。
以杜八耻,以进八荣。
咨尔多士,为民先锋。
夙夜匪懈,和谐是从。
   
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
dragchan
侠客




UID:423115
注册:2006-5-28
最后登录: 2008-06-28
帖子:23
精华:0

可用积分:59
信誉积分:100
专家积分:62 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
44楼 发表于 2008-5-8 10:49 
motalelf 解释的够详细!

不过kernel 2.6的MM进行了相当大的修改。例如引入了reverse mapping,kswap中扫描所有process的mm_struct这样耗时的工作,已经不需要了。



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者



UID:471810
注册:2006-10-1
最后登录: 2008-07-04
帖子:407
精华:1

可用积分:363
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
45楼 发表于 2008-5-8 15:19 


QUOTE:
原帖由 motalelf 于 2008-5-7 22:58 发表
另外,mmap影射内存而非文件时,
如果只是读,那么都是读的empty_zero_page,和LRU扯不上关系。

但是一旦写,马上COW出来一个匿名的脏页,

这应该是针对私有的情况吧  如果是共享映射应该不存在cow的情况吧



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者



UID:471810
注册:2006-10-1
最后登录: 2008-07-04
帖子:407
精华:1

可用积分:363
信誉积分:100
专家积分:0 (本版)

状态:...保密...

[资料] [站内短信] [Blog]


顶部
46楼 发表于 2008-5-8 15:23 


QUOTE:
原帖由 motalelf 于 2008-5-7 22:58 发表
kernel分配一个page后,
只有page为有名页时,才加入pagecache和LRU。
而page为匿名页时,kernel并不将page加入pagecache和LRU。首先没有(inode,index)这个标识,就没办法加入pagecache;加入LRU的话,也没有 ...

非常清楚 万分感谢



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布

首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »

 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - Linux时代 - Archiver - WAP - TOP

Processed in 0.045203 second(s), 5 queries , Gzip enabled