免费注册 查看新帖 |

Chinaunix

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

Linux内存:内存管理的实质 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-05-20 22:47 |只看该作者
原帖由 zx_wing 于 2008-5-20 14:45 发表

《情景分析》?有这么好吗,无数人奉为圣经。可能因为我比较反感源码注释的书。
个人认为除了ULK,其它讲内核的书都不如何。ULK就是概括性最好的书籍。
可惜的是,ULK站的高度太高,很难顾全很多地方,并且 ...

说心里话,情景分析还是很不错的!只是相对2.6来说略微过时了点。呵呵

论坛徽章:
0
22 [报告]
发表于 2008-05-20 22:52 |只看该作者
原帖由 frank_seng 于 2008-5-20 22:47 发表

说心里话,情景分析还是很不错的!只是相对2.6来说略微过时了点。呵呵

嘿嘿,可能和各自学习的切入点不同有关。不过说到过时,还真没有不过时的书籍,ULK3比起现在的内核,也过时不少。

论坛徽章:
0
23 [报告]
发表于 2008-05-20 22:57 |只看该作者
问个问题
>>页目录页表数据库的主要目的是为CPU访问物理内存时转换vaddr-->paddr使用,分配以及释>>放内存时不会用到,但是需要内核内存管理系统在合适时机为CPU建立好该库;
释放的时候不会改页表?虽然我可以理解这可能是个lazy的机制,但这样做岂不是没有安全性了?

论坛徽章:
0
24 [报告]
发表于 2008-05-20 23:17 |只看该作者
原帖由 zx_wing 于 2008-5-20 22:57 发表
问个问题
>>页目录页表数据库的主要目的是为CPU访问物理内存时转换vaddr-->paddr使用,分配以及释>>放内存时不会用到,但是需要内核内存管理系统在合适时机为CPU建立好该库;
释放的时候不会改页表?虽然我可 ...

呵呵,你指的是什么安全机制呢?

论坛徽章:
0
25 [报告]
发表于 2008-05-20 23:27 |只看该作者
原帖由 frank_seng 于 2008-5-20 23:17 发表

呵呵,你指的是什么安全机制呢?

举个例子:
进程1申请了一块内存,对应物理页面A,页表中包含到页面A的映射。当该内存被free了过后,页表里的该映射仍然存在。
此时,进程2申请了一块内存,正好也被分配到了页面A。
x86是硬件查页表,当在进程1中访问被free掉的内存时,由于到页面A的映射仍然存在,不会产生page fault。此时,进程1实际上访问到了进程2的页面。这样就不安全了。
先说我不懂linux的内存机制哈,问错莫笑。

论坛徽章:
0
26 [报告]
发表于 2008-05-21 00:00 |只看该作者
原帖由 zx_wing 于 2008-5-20 23:27 发表

举个例子:
进程1申请了一块内存,对应物理页面A,页表中包含到页面A的映射。当该内存被free了过后,页表里的该映射仍然存在。
此时,进程2申请了一块内存,正好也被分配到了页面A。
x86是硬件查页表,当在 ...

哦,呵呵,关于“分配释放时不会用到”,这里解释下,在vaddr->paddr映射时,会用到某某页表表项值。在分配和释放时,会设置某某页表表项值,但并不是用这个页表表项值来做什么事情。前者(红色)是使用它,后者(蓝色)是设置其属性。

在释放时,如果对应的物理页面不再需要时,会清除掉对应的页表表项值的,但并没有用到该页表表项做什么事情,因此说没有用到它,之所以这么表达,就是为了试图揭露页表表项值的作用加本质。

[ 本帖最后由 frank_seng 于 2008-5-21 00:04 编辑 ]

论坛徽章:
0
27 [报告]
发表于 2008-05-21 00:04 |只看该作者
原帖由 frank_seng 于 2008-5-21 00:00 发表

哦,呵呵,关于“分配释放时不会用到”,这里解释下,在vaddr->paddr映射时,会用到某某页表表项值。在分配和释放时,会设置某某页表表项值,但并不是用这个页表表项值来做什么事情。前者是使用它,后者是设置 ...

那还是会改页表。我先理解成了不用改了呢。没问题了。

论坛徽章:
0
28 [报告]
发表于 2008-05-21 11:17 |只看该作者
malloc()的实现是由ptmalloc3来实现的,内核是更加底层的实现。直接说MM中的malloc实现,有点不妥

论坛徽章:
0
29 [报告]
发表于 2008-05-21 13:33 |只看该作者
原帖由 12013396 于 2008-5-21 11:17 发表
malloc()的实现是由ptmalloc3来实现的,内核是更加底层的实现。直接说MM中的malloc实现,有点不妥

malloc的实现最终是通过系统调用sys_brk实现的,glibc本身在应用层对自己通过调用sys_brk分配的内存进行自己的一些管理,最重要的工作还是sys_brk结合do_page_fault来做的,关于glibc可以详细的讲述的,但是在描述这个实质时,不易多讲,否则很容易观众搞不清楚哪些是Linux内存管理的实质了。呵呵

论坛徽章:
0
30 [报告]
发表于 2008-05-21 14:19 |只看该作者

回复 #8 zx_wing 的帖子

看来zx的帖子,深有同感, 很多人都是大概知道,要么高度很高,但是深入不下来, 还有些人一开始就陷入细节,找不到整体的方向。

我有个想法, 不知搂主是否同意。
我们可以在论坛上找些人,熟悉这一块的人为你分得模块细化, 每一块细化成一个章节,然后就是一本书了。然后可以让以后的学习者,很容易找到学习的方向。 不知lz怎么想?

ps:其实我前一段时间,花了2个月结合情景分析把内存着一章仔细看了下, 想写点什么来着,但是后来觉得无法下笔,后来有些事情就搁置了, 现在也可以花点时间来根据这个梗概来铺开下写东西。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP