|
发表于 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. 原则上内核有充分的特权访问用户空间,但是否能够最终访问还要取决页表是否将待访问页映射到物理页框。 |
|