免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: platinum
打印 上一主题 下一主题

关于 vmalloc 的几点疑惑…… [复制链接]

论坛徽章:
0
41 [报告]
发表于 2009-05-21 09:01 |只看该作者
原帖由 Solaris12 于 2009-5-20 17:53 发表


wired memory不是Solaris独有的概念。所有OS设计都有这种概念,叫法不同罢了。

内核里的wired memory, 占大多数,是不需要page fault的,是non-pagable的,决定是不是wired memory和内存是否连续没多大关 ...


你说的就是LINUX里面的固定映射内核地址。不需要page_fault. 因为早已经映射好了。就没有fault了。

论坛徽章:
0
42 [报告]
发表于 2009-05-21 09:35 |只看该作者

回复 #40 思一克 的帖子

感谢Solaris12的解释! 的确,"内核里的wired memory, 占大多数",用Linux的方言说,应该还包括reserved pages吧,我想。

论坛徽章:
0
43 [报告]
发表于 2009-05-21 12:22 |只看该作者
原帖由 raise_sail 于 2009-5-21 09:35 发表
感谢Solaris12的解释! 的确,"内核里的wired memory, 占大多数",用Linux的方言说,应该还包括reserved pages吧,我想。


但要澄清的是,wired memory被分配了也不是一定不需要page_fault.
32位LINUX上,如果安装的物理内存条小于1024-128M, 那么全部都是wired memroy. 但很多时候一样要page_fault的。

论坛徽章:
0
44 [报告]
发表于 2009-05-21 12:25 |只看该作者
原帖由 思一克 于 2009-5-21 12:22 发表


但要澄清的是,wired memory被分配了也不是一定不需要page_fault.
32位LINUX上,如果安装的物理内存条小于1024-128M, 那么全部都是wired memroy. 但很多时候一样要page_fault的。


那应该就不是wired memroy,内核内存只要是wired memroy,没理由需要page fualt,因为不能page out,而且都提前影射好了。

[ 本帖最后由 Solaris12 于 2009-5-21 12:30 编辑 ]

论坛徽章:
0
45 [报告]
发表于 2009-05-21 12:30 |只看该作者
原帖由 Solaris12 于 2009-5-21 12:23 发表


不大清楚你说的东西,但是和映射无关,wired memory应该是指不能换出page out的内存, non-pagebale。

因为只有wired and non-wired的两种情况,所以和物理内存连续不连续无关。


wired and non-wire ...


那你说的wired m 和LINUX的固定映射还不是一回事。

论坛徽章:
0
46 [报告]
发表于 2009-05-21 12:32 |只看该作者
原帖由 思一克 于 2009-5-21 12:30 发表


那你说的wired m 和LINUX的固定映射还不是一回事。


固定影射是只非Zone_highmem的内存吗?

64位Linux有没有非固定影射?

论坛徽章:
0
47 [报告]
发表于 2009-05-21 12:36 |只看该作者
好像wired memory就是LINUX中的固定映射的内核使用的不能交换出的那部分内存。

论坛徽章:
0
48 [报告]
发表于 2009-05-21 13:27 |只看该作者
原帖由 思一克 于 2009-5-21 12:36 发表
好像wired memory就是LINUX中的固定映射的内核使用的不能交换出的那部分内存。



嗯,就是这样。

论坛徽章:
0
49 [报告]
发表于 2009-05-21 14:28 |只看该作者
原帖由 Solaris12 于 2009-5-21 12:32 发表


固定影射是只非Zone_highmem的内存吗?

64位Linux有没有非固定影射?


32位的系统,最大固定映射896M物理内存。
64为的,应该就很大了。多大我不知道。如果插入的条不多,应该都是固定映射的。比如你有2G, 应该都固定了(具体数字不详)。

固定映射不代表不换出。这是两回事。内核中的一些固定映射的页不换出。但为了用户使用的其他页要换出(也是内核固定映射的)。

论坛徽章:
0
50 [报告]
发表于 2009-05-21 15:00 |只看该作者
vmalloc的申请是以alloc_page来按页申请的 所以它不是完全连续的 这一点eexplorer讲的很清楚,kmalloc只是申请一些相关信息
但注意 alloc_page参数是 GFP_KERNEL|__GFP_HIGHMEM,这意味着vmalloc有可能会阻塞进程,因此不能用在中断和延时函数中,具体其他的能不能用 不了解。不过spin_lock是禁止抢断的,因此意味着其保护的互斥段是不希望被阻塞打断掉,从这个角度来看 最好不要在spin_lock保护的互斥段做

更新的页表在init_mm也就是进程0的页表,他要通过do_page_fault处理各进程内核态的同步问题,把新增vmalloc地址同步到其他进程(注意 这时的do_page_fault 不会引起阻塞 与 用户态引起的pagefault 处理不一样)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP