LinuxSir.cn,穿越时空的Linuxsir!

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

关于“进程的地址空间”的几个问题

[复制链接]
发表于 2010-11-13 00:13:41 | 显示全部楼层 |阅读模式
小弟有下面几个问题:(32位处理器)
1,进程的地址空间是由两部分构成:内核态和用户态。  这样说对吗?
2,进程的内核态空间是8K,由进程的内核态堆栈和thread_info构成。除了这8K以外,进程不再拥有任何内核态空间。这样说对吗?
3,我们知道,0-3G 是用户空间,那么是“每个进程都可以拥有3G的用户空间”吗?还是“所有的进程共享这3G的用户空间,每个进程只能分到这3G空间的一部分”?
4,如果是每个进程都可以拥有3G的用户空间,那么这样各个进程会不会冲突?通过什么办法回避冲突的呢?
5,内核拥有整个4G的空间吗?内核可以访问0-3G的用户空间吗?


以上,非常感谢!!!
发表于 2010-11-17 10:49:11 | 显示全部楼层
1.对
2。不太清楚,马上要研究内核了,下次再给答案
3。每个进程都有3g的用户空间
4。不会,内存页分配机制,MMU会在你访问的逻辑地址转换成物理地址时进行判断是否合法
5。内核对应1g内存空间,应该不可以
回复 支持 反对

使用道具 举报

发表于 2010-12-15 21:42:12 | 显示全部楼层
1.确切说不对。两部分是指:
0x00000000~0xbfffffff:进程在内核态和用户态都可以寻址。3GB
0xc0000000~0xffffffffff:只有内核太的进程才可以寻址。1GB
回复 支持 反对

使用道具 举报

发表于 2011-3-30 13:01:50 | 显示全部楼层
2. Linux should only have 4k for thread stack, not 8k.
4. There is also a PAE module that supports addressing more than 4G space. I think Linux supports PAE now. See http://en.wikipedia.org/wiki/Physical_Address_Extension
回复 支持 反对

使用道具 举报

发表于 2011-4-16 13:37:43 | 显示全部楼层
2.那是内核“栈”空间
3 分清“地址空间”和"内存"
回复 支持 反对

使用道具 举报

发表于 2011-10-20 23:29:26 | 显示全部楼层
Post by shiyuzhu;2119648
小弟有下面几个问题:(32位处理器)
1,进程的地址空间是由两部分构成:内核态和用户态。  这样说对吗?
2,进程的内核态空间是8K,由进程的内核态堆栈和thread_info构成。除了这8K以外,进程不再拥有任何内核态空间。这样说对吗?
3,我们知道,0-3G 是用户空间,那么是“每个进程都可以拥有3G的用户空间”吗?还是“所有的进程共享这3G的用户空间,每个进程只能分到这3G空间的一部分”?
4,如果是每个进程都可以拥有3G的用户空间,那么这样各个进程会不会冲突?通过什么办法回避冲突的呢?
5,内核拥有整个4G的空间吗?内核可以访问0-3G的用户空间吗?
以上,非常感谢!!!


1. 准确地说:分为内核空间和用户空间。
2. No。在进程运行过程中,整个4G空间都归该进程所有,只是高端1G的内核空间是所有进程共享的。内核栈是进程在运行内核代码时(执行系统调用或中断处理)用于保存内核函数的形式参数和局部变量所必须的。
3. 每个进程都有各自独立3G的地址空间。注意:是虚拟地址空间。
4. 进程的虚拟地址空间是隔离的,主要是因为每个进程都有自己独立的页表。页表定义了进程运行时的虚拟地址空间。不需要回避冲突,进程虚拟地址空间的隔离是内核保证的。
5. 原则上内核有充分的特权访问用户空间,但是否能够最终访问还要取决页表是否将待访问页映射到物理页框。
回复 支持 反对

使用道具 举报

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

本版积分规则

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