当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2016-10-20

    本文导语:  关于“进程的地址空间”的几个问题 大家好! 小弟有下面几个问题:(32位处理器) 1,进程的地址空间是由两部分构成:内核态和用户态。  这样说对吗? 2,进程的内核态空间是8K,由进程的内核态堆栈和thread_info...

关于“进程的地址空间”的几个问题
大家好!

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


以上,非常感谢!!!

|
3. 用户空间0-3G是虚拟地址。从任何一个进程的角度来看,他可以独立拥有这3G空间
4. 不会冲突。用户进程只能使用虚拟地址,而虚拟地址要映射到物理地址。两个不同的进程,可以访问相同的虚拟地址,但是映射到物理地址肯定是不同的。

|
我来回答前面两个问题吧?
1,进程的地址空间是由两部分构成:内核态和用户态。 这样说对吗?
对。
2,进程的内核态空间是8K,由进程的内核态堆栈和thread_info构成。除了这8K以外,进程不再拥有任何内核态空间。这样说对吗?
错,内核空间不仅包含内核数据而且包含内核代码。应该是1G。

|
我的理解:
1)一般说来,线程运行代码包括两部分:内核级代码和用户级代码。因此每个线程拥有一个完整的虚拟空间,例如在i386体系结构(下面都以i386来说明)上为0~(4G-1)的虚拟地址范围。另外,内核线程只有内核级代码。

2)用户级代码只能在用户态的虚拟地址范围内寻址,即(0~3G-1)的虚拟地址范围。
3)内核级代码原则上可以在完整的虚拟空间上虚拟,即(0~4G-1)。
4)所有线程的内核级代码全部在(3G~4G-1)的空间上,因此不同线程内核级代码之间有了共享的可能,从而能够实现线程之间的通信。
5)线程的内核级代码需要对自身用户态数据进行访问,这种访问过程又可能遭到线程切换以及目标页换出的影响,所以需要在线程的内核级代码在访问自身用户态数据之前,需要将目标页重新映射到内核空间来。

|

内核有访问用户空间的权限,它可以为所欲为,但是他不应该乱操作。
比如,printf("hello"); 内核就会从用户空间取出一个字符串,显示到屏幕上。
scanf("%d", &n); 内核就会从键盘读取一个整数,把它写到用户空间里面&n的位置。
这个有点像client/server的概念。一般只有当用户进程通过系统调用要求内核访问用户空间的时候,内河才会通过copy_to_user和copy_from_user这些函数来访问用户进程指定的地址。

|
好好看看 《深入理解Linux内核》  这本书 的内存管理  一章。或看《深入理解Linux虚拟内存管理》 这本书。如果有不懂的,再上来讨论。

|


是的。

|

|
没有水贴呀,我来一个

    
 
 

您可能感兴趣的文章:

  • 提问关于init进程的几个问题
  • 请高手指教一下进程打开的File对象相关的几个问题
  • 用户进程有自己独立的地址空间,内核线程没有自己的地址空间 该怎样理解: ?
  • 进程,线性地址(虚拟地址),kernel之间的关系
  • 进程的地址空间会自动调整大小吗??
  • 关于进程地址空间的问题
  • 如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
  • linux中fork函数对于子进程地址空间的一点疑问
  • 为什么进程的线性地址空间需要分配
  • linux进程地址
  • 进程复制数据到系统的内核地址出错,这时会出现什么问题?
  • 服务进程收到的第一个UDP包的远端地址不对?
  • 请问如何根据一个进程的pid去获取其地址信息?谢谢
  • 各位大虾,已经知道某个进程的名字,如何对其内存地址进行改写?
  • linux进程的代码段是存储进程的哪一段内存地址里的?
  • 如何查看子进程调用其它程序后的程序段与数据段地址
  • 可执行文件装载到进程地址空间时,是如何重定位的
  • 如何在用户进程中获取当前进程的task_struct结构地址?
  • 父子进程中数据地址的问题
  • 访问一个进程的所有地址空间
  • Linux进程等待队列的地址?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux僵尸(zombie)进程介绍及清除
  • 进程Afork进程B,进程Bfor进程C,如果进程C退出发出SIGCHLD,A进程是否可以收到
  • Ubuntu查看内存,进程相关命令介绍
  • 如果一个server进程要fork许多子进程,但不等待子进程终止,也不希望子进程结束后处于僵进程状态直到父进程终止。请问可采用什么方法实现
  • linux下进程占用内存空间详解
  • 在多进程中父进程frok子进程,怎样让子进程自举,脱离父进程,而且父进程不退出
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • fock()开出的子进程的进程ID是否进程ID都大于父进程的?
  • android 4.0 托管进程介绍及优先级和回收机制
  • 父进程等待子进程n秒,如果子进程正常退出,父进程立即继续向下执行,如果子出现进程故障一直不退出,父进程等待n秒后继续向下执行,请问
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 多进程问题 子进程读取内容 读完挂起,父进程写 写入后唤醒子进程
  • 一个进程首先监听一个端口,等到有连接了就新开一个进程,让新进程来处理后面的通讯。请问母进程中已经打开了端口,子进程怎么来使用同一
  • 我在一个父进程中,生成了4个子进程,子进程的优先级是一样的。我现在想结束子进程。该如何做?
  • php开源软件 iis7站长之家
  • 在一个进程中我定义了几个全局变量,然后我又fork了几个子进程,子进程中是否可以各自对全局变量进行修改,如果各子进程都对其进行修改,
  • 怎样一次杀掉父进程创建的所有子进程?我在父进程中用kill(0,SIGKILL),结果父进程也给干掉了,参数0难道不是表示除自己外的所有同uid的进
  • 进程创建进程组后,然后创建该组中的进程,然后终止。这里的终止....?
  • 如何实现子进程根据父进程的信号来确定是否终止子进程???
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • 如何通过进程号获得进程的一些信息,例如:进程运行的目录


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3