Linux.ChinaUnix.net
ChinaUnix
|
Linux首页
|
新闻
|
博客
|
文章
|
专栏
|
新手
|
方案
|
图书
|
下载
|
人才
|
手册
|
wiki
|
搜索
会员:
密码:
免费注册
|
忘记密码
|
会员登录
|
搜索
|
帮助
x86下dma映射以及页面锁页换页的问题
‹‹
1
2
3
4
5
››
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
最近访问的论坛 ...
时代域名主机托管全面特惠
|
CU积分兑换详情
|
参加调查赠100积分+《Ubuntu官方指南》
|
100积分:谈谈您对校园网建设的体会
|
‹‹ 上一主题
|
下一主题 ››
[
打印
] [
订阅
] [
收藏
] [
推荐给朋友
] [
本帖文本页
]
motalelf
风云使者
UID:384785
注册:2006-3-11
最后登录: 2008-06-22
帖子:
431
精华:0
可用积分:202
信誉积分:
105
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
31楼
发表于 2008-5-7 16:43
当alloc_page的时候,page上确实多余一个引用。
但是如果你马上以(inode,index)来标识这个page,对这种非anonymous的page,它本身就需要一个固有的引用。在变anonymous后,才--这个固有引用。
所以alloc_page后,要想不被swapout:
1)不加入LRU链,则kswapd在尝试释放page时,根本看不到这个page,所以不会swapout
2)加入LRU链,但不以(inode,index)来标识这个page,则count==1,既page上多余一个引用。
a)如果page未被影射至0~3G。则kswapd在扫描mm_struct时,也看不到这个page,既page永远作为anonymous而存在,而且其count==1。kswapd没办法释放这样的页,它只是将不关联buffer_head的anonymous page从LRU中剔除。
b) 如果page被影射至0~3G。则kswapd在扫描mm_struct时,可以看到这个page。于是以( SwapDevice_inode,SwapDevice_index)来标识这个page,既变成 非anonymous,同时count++,既count==2。随后kswapd在释放page至buddy时,发现这个page->count==2,既使变anonymous后,仍然count==1,所以kswapd也不会释放这样的page。
3)加入LRU链,而且以(inode,index)来标识这个page,然后再次count++,令count上多余一个莫名其妙的引用。则kernel无论使使什么手段,这个page在非anonymous时,count至少是2;anonymous时,至少是1。kswapd也没办法释放这样的page。
4)加入LRU链,而且以(inode,index)来标识这个page,同时记PG_Lock。则kswapd见到PG_Lock的页时,马上忽略过去,不会做任何释放page至buddy的尝试,也不会做任何解除pte对page的引用的尝试(如果page被影射至0~3G)。
您对本贴的看法:
鲜花[1]
臭蛋[0]
__________________________________
三个代表,吾党所宗。
以杜八耻,以进八荣。
咨尔多士,为民先锋。
夙夜匪懈,和谐是从。
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者
UID:471810
注册:2006-10-1
最后登录: 2008-07-05
帖子:
407
精华:
1
可用积分:363
信誉积分:
100
专家积分:
0
(本版)
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
32楼
发表于 2008-5-7 16:50
谢谢楼上 仔细学习一下先
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者
UID:471810
注册:2006-10-1
最后登录: 2008-07-05
帖子:
407
精华:
1
可用积分:363
信誉积分:
100
专家积分:
0
(本版)
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
33楼
发表于 2008-5-7 17:03
我想我明白了 对你的耐心万分感谢 不知道最近a版到哪里去了 不然看到这么精彩的回复恐怕要加个保留吧 (哈那我就有2个精华了 虽然都和我没啥关系 全靠cu论坛牛牛们的精彩回复 )
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zhzhl555
侠客
UID:207093
注册:2004-12-12
最后登录: 2008-07-04
帖子:
15
精华:0
可用积分:26
信誉积分:
100
专家积分:
0
(本版)
状态:
...离线...
[
资料
] [
站内短信
] [
Blog
]
34楼
发表于 2008-5-7 18:06
牛人的总结。 需要牢记。。
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-05
帖子:
1691
精华:
3
可用积分:2342
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
35楼
发表于 2008-5-7 18:23
QUOTE:
原帖由
duanius
于 2008-5-7 17:03 发表
我想我明白了 对你的耐心万分感谢 不知道最近a版到哪里去了 不然看到这么精彩的回复恐怕要加个保留吧 (哈那我就有2个精华了 虽然都和我没啥关系 全靠cu论坛牛牛们的精彩回复 )
讲一讲,总结一下。
塑料袋讲的太细了,我有点看不懂了
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者
UID:471810
注册:2006-10-1
最后登录: 2008-07-05
帖子:
407
精华:
1
可用积分:363
信誉积分:
100
专家积分:
0
(本版)
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
36楼
发表于 2008-5-7 19:06
QUOTE:
原帖由
zx_wing
于 2008-5-7 18:23 发表
讲一讲,总结一下。
塑料袋讲的太细了,我有点看不懂了
晕 你不要这么谦虚 给我们这些菜鸟一些活路好不好 压力很大的。。。
看了motalelf 兄的讲解 我的理解是 一个页是否被换出 就是看两个 一个是这个页是否在lru队列中 还有一个就是它的引用记数在一次解除引用后是否降为0 (( 匿名后count==0) && ( 非脏) 的page) 如果同时满足 就有被换出的可能 所以 只要这两个条件没有被同时满足 页就不会被换出
我们关心内核中分配的页是否会被换出 根据30楼 在sys_read/write或者sys_mmap2都会将页加入lru队列 所以即使是内核页也有被换出的可能 就看页的引用记数是否满足被换出的标准了 (下面例子纯属猜测)比如我们在内核态分配了一块内存 如果我们什么都不做 就不会被换出 (可能就是31楼的第一种方法 避免加入lru链) 但如果定义了mmap使其映射到用户空间 就有被换出的可能(因为有mmap的系统调用)
这时候就关注引用记数了 就像31楼所说 有几种方法 目的就是使它多一个引用 采用的方法就是避免被(inode,index)表识 (2a) 凭空给它加一次引用 (2b 3) 或者干脆就设置pg_locked(4)
也就是说
1.可能是被swapout的页是在lru里面的页 不管是内核页还是用户态分配的页
2.在加入lru的情况下 如果不被映射到0-3g 也不被标识 一直做为匿名页的存在 是不会被换出的(被映射肯定被标识 反之不一定)
3.如果被映射 或者被标识 那么增加一次count引用 也是不会被换出的
4.或者干脆设pg_locked
不清楚是不是真的理解了 有错误大家挑挑吧。。。 想想感觉差不多 一写出来果然就不那么自信了。
ps 原来他就是传说中的塑料袋阿。。。 果然很不一般 很特别 很厉害。。。
[
本帖最后由 duanius 于 2008-5-7 19:13 编辑
]
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-05
帖子:
1691
精华:
3
可用积分:2342
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
37楼
发表于 2008-5-7 19:35
QUOTE:
原帖由
duanius
于 2008-5-7 19:06 发表
晕 你不要这么谦虚 给我们这些菜鸟一些活路好不好 压力很大的。。。
看了motalelf 兄的讲解 我的理解是 一个页是否被换出 就是看两个 一个是这个页是否在lru队列中 还有一个就是它的引用记数在一次解除引 ...
我还有点小白问题,塑料袋兄也帮忙看看哈。
这里提到了LRU,LRU不是只是和page cache有关系吗?page cache在我印象中只和disk I/O有关系。
如果是单独分配一些页面,这些页面不用于disk I/O,那还会和page cache扯上关系,加入到LRU中吗?
另外是mmap,还是和上面问题一样的,如果是map文件会和LRU扯上关系,如果不map文件,只用于映射内存,会和LRU扯上关系吗?
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者
UID:471810
注册:2006-10-1
最后登录: 2008-07-05
帖子:
407
精华:
1
可用积分:363
信誉积分:
100
专家积分:
0
(本版)
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
38楼
发表于 2008-5-7 20:03
所以说叫你不要谦虚了 你一小白 我就大白了。。。
我这里有个大白问题 : 原来刚才说的mmap不是映射内存阿。。 我以为字符驱动里分配一块内存映射出去就是映射内存了 (不会因为用户态用描述符打开这个字符设备所以就是文件映射了吧) 那啥叫映射内存阿
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
zx_wing
(骑着猪的青蛙)
大天使
学徒
UID:499746
注册:2006-12-4
最后登录: 2008-07-05
帖子:
1691
精华:
3
可用积分:2342
信誉积分:
100
专家积分:
1
(本版)
来自:成都
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
39楼
发表于 2008-5-7 20:11
QUOTE:
原帖由
duanius
于 2008-5-7 20:03 发表
所以说叫你不要谦虚了 你一小白 我就大白了。。。
我这里有个大白问题 : 原来刚才说的mmap不是映射内存阿。。 我以为字符驱动里分配一块内存映射出去就是映射内存了 (不会因为用户态用描述符打开这个字符 ...
“我以为字符驱动里分配一块内存映射出去就是映射内存了”这个就是我说的映射内存哈。
映射文件上是做disk I/O一种方式,细节就不说了,最后和read/write差别也不大。我认为只有映射文件的时候才会把内存页(实际上这个时候的页面属于page cache)和LRU扯上关系,映射内存的时候不会。
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
C调 ---- C语言
都是最喜欢的
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
duanius
风云使者
UID:471810
注册:2006-10-1
最后登录: 2008-07-05
帖子:
407
精华:
1
可用积分:363
信誉积分:
100
专家积分:
0
(本版)
状态:...保密...
[
资料
] [
站内短信
] [
Blog
]
40楼
发表于 2008-5-7 20:29
我觉得映射内存还是会的吧 不然很多字符驱动里面为啥要锁页呢 比如下面一个字符驱动
在主函数里面分配并逐页锁页
vmalloc_area = vmalloc(MAPLEN);
if (!vmalloc_area)
goto fail4;
for (virt_addr = (unsigned long)vmalloc_area;
virt_addr < (unsigned long)(&(vmalloc_area[MAPLEN / sizeof(int)]));
virt_addr += PAGE_SIZE) {
SetPageReserved(virt_to_page
(vaddr_to_kaddr((void *)virt_addr)));
}
在mmap里面再次把vma锁住
int mapdrv_mmap(struct file *file, struct vm_area_struct *vma)
{
。。。。
/* do not want to have this area swapped out, lock it */
vma->vm_flags |= VM_LOCKED;
。。。。
return 0;
}
对于用一page 锁了两次 不知道能不能说明问题
您对本贴的看法:
鲜花[0]
臭蛋[0]
CU可用积分兑换Linux/Unix精品图书
|
《Ubuntu标准教程》书评获奖名单公布
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
‹‹
1
2
3
4
5
››
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
Copyright © 2001-2008 ChinaUnix.net All Rights Reserved 联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处
京ICP证041476号
清除 Cookies
-
Linux时代
-
Archiver
-
WAP
-
TOP
Processed in 0.045437 second(s), 5 queries , Gzip enabled