LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1206|回复: 9

是不是2.6.18的内核只需要4MB内存就可以运行?

[复制链接]
发表于 2007-5-22 22:26:32 | 显示全部楼层 |阅读模式
看到debian sid的/boot/System.map-2.6.18-1-686的尾部

c0386000 A pg0
是不是意味着,Linux的内核只占用了不到4MB的内存,其它剩余的物理内存空间就作为主存区由内核和应用程序共同享用了呢?
发表于 2007-5-23 00:18:23 | 显示全部楼层
kmalloc, slab allocator 这些动态内存的使用在 system.map 里面是看不出来的

另外, pg0 后面好像要存整个内存的映射的吧(记不清了)

btw: 你所说的"由内核和应用程序共同享用"是什么意思? 如何共享?

还有动态加载的 module 怎么算?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 09:03:10 | 显示全部楼层
richxbx兄,在运行完head.S之后,内核所有的代码都运行在分页模式,这时是不是内核的MM模块不需要通过分页就可以访问所有物理内存的?如果是,它是怎么做到的呢?
回复 支持 反对

使用道具 举报

发表于 2007-5-23 10:05:57 | 显示全部楼层
如果 cpu 有 mmu,的话, 当 cpu 接受到一个内存地址后, 会由mmu解析这个地址,  如果开启了分页功能的话, mmu 会去查找页表/页目录表, 根据表的内容将 cpu 拿到的地址进行转化, 然后用转化后的地址去访问内存.

如果物理内存不超过 896M, 则内核直接将物理内存线性映射到 0xc0000000 --- , 即 x 地址被映射成 0xc0000000+x.

其实内核的 mm 模块要做的只是填写页表/页目录表, 每个进程在 0xc0000000--- 的映射都是一样的.

btw: 如果大于 896M, 就有点复杂了,好像是留出一段空间,一部分一部分的映射.记不大清楚了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 10:25:44 | 显示全部楼层
rickxbx兄,我听一位高人说,MM是能切换各种内存模式的,比如说可以切换到分段,禁用分页,甚至还可以切换到实模式。
所以MM应该是通过切换内存模式去使用大于896M的内存的,你觉得呢?
回复 支持 反对

使用道具 举报

发表于 2007-5-23 10:37:25 | 显示全部楼层
是的, 分段/分页 功能的开启与关闭都跟一个寄存器有关

至于是不是要切换内存模式来使用高端内存,实在是想不起来了. 这两天比较忙,过两天把书翻出来看看
回复 支持 反对

使用道具 举报

发表于 2007-5-23 17:25:38 | 显示全部楼层
分段机制也是由寄存器来开启的?????
我只知道分页是通过cr0的pg位来开关

但是分段……

不太懂
回复 支持 反对

使用道具 举报

发表于 2007-5-23 18:28:49 | 显示全部楼层
我没看过内核代码,也不知道MM模块
呵呵
但是访问4G的内存应该不难吧
直接在保护模式下,打开A20地址线就行了吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-24 21:37:16 | 显示全部楼层
rickxbx兄,我看了/proc/modules文件发现所有模块都是在大于0xd0000000的线性地址。
回复 支持 反对

使用道具 举报

发表于 2007-5-26 08:56:18 | 显示全部楼层
谢谢你的指点, 以前没有关注过这个部分
这有篇文章:
http://www.google.com/url?sa=t&a ... Dd__ClBtbHBjDWhFAsA

文章中提到:
0xC0000000Kernel code, data, bss, etc.
Probably too much but, hey, we might see a 256MB kernel one day.
0xD0000000Kernel heap
0xE0000000 Space reserved for device drivers
0xF0000000 Some physical memory (useful for video memory access)
Page directory and page tables of the current process
可见, 0xd0000000 ---- 0xdfffffff 是内核堆, 而我们知道模块都是通过堆动态申请的内存,所以它的地址也就在 0xd0000000 后面了....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表