请教一个Linux内存分配的问题
时间:2004-09-02
来源:互联网
我看的是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小?
谢谢!
看到存储管理的有关内存分配的地方有点不懂
首先,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-09-02
不会吧,等了2天了,每人回呀:(
作者: jerrykeating 发布时间: 2004-09-04
#在vm_area_struct中vm_start是不是一定是比vm_end小?
this is for stack-arear!
this is for stack-arear!
作者: zleil 发布时间: 2004-09-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28