LinuxSir.cn,穿越时空的Linuxsir!

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

请教一个Linux内存分配的问题

[复制链接]
发表于 2004-9-2 12:37:15 | 显示全部楼层 |阅读模式
我看的是2.4.0的版本,是浙大出的那本内核源代码情景分析
看到存储管理的有关内存分配的地方有点不懂
首先,Linux将4G的虚存空间(32位地址)分成“系统空间”(0xC0000000-0xFFFFFFFF))和“用户空间”(0x00000000-0xBFFFFFFF),其中系统空间是从物理地址的0开始分配的。
而且在系统空间中可以通过__pa(x)(将虚拟地址转换为物理地址)和__va(x)(将物理地址转换为虚拟地址)进行地址转换
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET  //PAGE_OFFSET=0xC00000000
也就是虚拟地址的0xC0000000对应的物理地址是0

但是,剩下的用户空间的分配我有点搞不明白了
书中有个地方说“在内核对用户虚存空间的使用中,堆栈在用户区的顶部,从上向下延伸,而进程的代码和数据都是自底向上分配空间”
是不是说堆栈段是从用户区顶部0xBFFFFFFF开始向虚存地址减少的方向分配,而数据段和代码段是从虚拟地址的0x00000000开始向着地址增大的方向分配的?
还有,在vm_area_struct中vm_start是不是一定是比vm_end小?

谢谢!
 楼主| 发表于 2004-9-4 14:16:27 | 显示全部楼层
不会吧,等了2天了,每人回呀:(
发表于 2004-9-5 09:46:41 | 显示全部楼层
#在vm_area_struct中vm_start是不是一定是比vm_end小?
this is for stack-arear!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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