jerrykeating 发表于 2004-9-2 15:12:10

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

我看的是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小?

谢谢!

jerrykeating 发表于 2004-9-4 14:39:12

:cry: 等了2天了,没人理我。

bierdaci 发表于 2004-9-12 22:20:11

你自问的都自答了还让别人说什么
页: [1]
查看完整版本: 请教一个Linux内存分配的问题