免费注册 查看新帖 |

Chinaunix

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

一个关于进程地址空间的疑问 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-09-28 17:49 |只看该作者

回复 #16 peimichael 的帖子

赞一个.说的很有道理.
不过我感觉还是有些不对劲的地方.可能就是你说的那种情况之外的一些情况.你说的可能仅仅在堆栈扩展的时候.
比如动态加载一个so文件.应该不是"用户这时候真的使用这个地址,那么会产生缺页异常".
还有其他一些情况,暂时

论坛徽章:
0
22 [报告]
发表于 2009-09-29 10:33 |只看该作者

回复 #11 peimichael 的帖子

这个,我查了下,brk不仅仅是分配了虚存空间,而且确实保证了物理页面的映射,<情景分析>中有讲到.而ULK3没有明确说清楚.
当然可以想见应该是这样的,应该做物理页面映射,并且把不能映射的错误通知给应用程序,由应用程序来决定不能malloc成功将做什么事,而不是等到应用程序读写缺页而崩溃.
也就是我们malloc的内存都是做了映射的,所以要节约使用.

论坛徽章:
0
23 [报告]
发表于 2009-09-29 11:10 |只看该作者
原帖由 epegasus 于 2009-9-29 10:33 发表
这个,我查了下,brk不仅仅是分配了虚存空间,而且确实保证了物理页面的映射,中有讲到.而ULK3没有明确说清楚.
当然可以想见应该是这样的,应该做物理页面映射,并且把不能映射的错误通知给应用程序,由应用程序来决定 ...


情景分析那一节我不记得了,刚刚查了下2.6.28的内核,sys_brk及其掉用的do_brk只在一个地方分配了物理页面

  1.         if (flags & VM_LOCKED) {
  2.                 if (!mlock_vma_pages_range(vma, addr, addr + len))
  3.                         mm->locked_vm += (len >> PAGE_SHIFT);
  4.         }
复制代码

就是说只有在vm_area_struct包含了VM_LOCKED属性时才会立即分配物理页面,这个属性的意思好像是不允许页面换出
一般情况下都不会立即分配物理页面的。
不知道是不是我看漏了

论坛徽章:
0
24 [报告]
发表于 2009-09-29 11:20 |只看该作者

回复 #23 peimichael 的帖子

是我看漏了

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
25 [报告]
发表于 2009-09-29 11:24 |只看该作者

回复 #22 epegasus 的帖子

楼上说的好像有问题啊。
malloc的时候应该没有做地址映射的。
malloc->sys_brk()->do_brk()
malloc本身也有一个链表来管理malloc的内存,如果申请的malloc空间大小跟上一次申请的空间大小在同一个页中,则修改vm->brk后返回(因为brk系统调用是基于线性区页进行的,所有如果你malloc的大小不到一个整页,也会给你分配一个整页大小的线性区),如果malloc的大小需要分配新的线性页,则sys_brk()中会对该进程所能使用的线性区进行检查,包括是否跟代码区重叠,是否在其限制范围内分配线性区等的检查,从而决定malloc是否错误。如果没有错误,则会调用do_brk()只是简单的map没有进行地址映射。

如果说的不对,还望不吝指教。

论坛徽章:
0
26 [报告]
发表于 2009-09-29 13:36 |只看该作者
原帖由 瀚海书香 于 2009-9-29 11:24 发表
楼上说的好像有问题啊。
malloc的时候应该没有做地址映射的。
malloc->sys_brk()->do_brk()
malloc本身也有一个链表来管理malloc的内存,如果申请的malloc空间大小跟上一次申请的空间大小在同一个页中,则修 ...

很好。

论坛徽章:
0
27 [报告]
发表于 2009-09-30 11:49 |只看该作者

回复 #10 chenda0.03 的帖子

不是堆的处理机制,堆和栈是相对用户空间而言的。对于内核空间,这些概念不存在!

论坛徽章:
0
28 [报告]
发表于 2009-09-30 20:43 |只看该作者
学习了,很好。

论坛徽章:
0
29 [报告]
发表于 2009-10-02 15:30 |只看该作者
原帖由 peimichael 于 2009-9-28 15:52 发表
分配页面的过程不是你想的那样:用户空间需要内存了,告诉内核,内核获得一个物理页,然后把他映射到用户空间的某个虚拟地址,再把这个地址返回给用户
    应该是这样:用户空间需要内存,告诉内核,内核仅仅找 ...


讲的很好啊。

[ 本帖最后由 hellangel1984 于 2009-10-2 15:38 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP