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

进程,线性地址(虚拟地址),kernel之间的关系

    来源: 互联网  发布时间:2017-03-25

    本文导语:  一个进程是4gb的线性(虚拟)地址空间。 main函数被映射到这个空间的哪一个线性地址? 线性地址是由页目录表,页表中的索引组成。这个线性地址的空间是怎么创建出来的,让他能够和程序的image以及物理内存关联起...

一个进程是4gb的线性(虚拟)地址空间。

main函数被映射到这个空间的哪一个线性地址?

线性地址是由页目录表,页表中的索引组成。这个线性地址的空间是怎么创建出来的,让他能够和程序的image以及物理内存关联起来?

|
我先自己解释一下,
第一个问题,地址空间分为哪几个部分你知道吗,如果不清楚用 address layout 在google上搜索。这里只告诉你分为 内核空间(1G或2G) 和 用户空间(3G或2G),main函数地址肯定在 用户空间中:
进程,线性地址(虚拟地址),kernel之间的关系[图片]
进程,线性地址(虚拟地址),kernel之间的关系[图片]
第二个问题,地址空间怎么创造出来的,你看过 操作系统 书籍中“创建新进程”的章节吗?
(1)给进程分配ID号;
(2)给进程分配空间;
(3)初始化进程控制块(PCB);
(4)把进程放入队列中,比如就绪队列;
(5)创建其他数据结构;
刚开始分配的空间是虚拟的,也就是没有对应物理内存单元的页目录和页表;
当新进程被第一次调度执行,就会把程序映像加载到内存中,但是它只有虚拟地址空间,这就导致页异常,内核就会给虚拟空间分配物理内存页。有个专业名词叫“写时复制”(copy-on-write)。

最后给你一个链接,非常非常好的参考资料:
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory

|
main映射到那个虚拟地址每个程序都不一样,但是可执行文件(比如elf格式)会提供程序的入口地址。程序经过编译连接早就物是人非,所以没必要拘泥main函数的虚拟地址。
一个进程的详细的页表信息是内核动态建立的,相应的虚拟地址所对应的物理页为空(当然也有其他情况)会触发夜异常,内核捕获异常,为相应的页表项关联物理页,然后重新执行发生异常的指令。
最近也是在学习这方面的知识,只是自己的理解。

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • 我想让vfork后就execl一进程,同时让execl出来的进程之间能相互通信,求助
  • linux 进程之间的通信问题
  • 是否可以通过消息队列在进程之间传递套接字?
  • UNIX 操作系统中进程之间调用的通信方式
  • 为什么无名管道只能在具有亲缘关系的进程之间进行通信?
  • 如何在多个进程之间共享一个磁盘文件?
  • Unix下如何在两个进程之间共享一块大内存??????
  • 求一个多进程之间的同步算法?
  • 求教:在一台机器上多个进程之间使用udp通信是否可靠,谢谢
  • 两个进程之间可以同时绑定一个端口么?
  • 父子进程之间管道通信问题
  • 单台服务器的PHP进程之间实现共享内存的方法
  • 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个子进程,子进程的优先级是一样的。我现在想结束子进程。该如何做?
  • 子进程wait/waitpid//子进程不结束,父进程会等待子进程吗?
  • 在一个进程中我定义了几个全局变量,然后我又fork了几个子进程,子进程中是否可以各自对全局变量进行修改,如果各子进程都对其进行修改,
  • 怎样一次杀掉父进程创建的所有子进程?我在父进程中用kill(0,SIGKILL),结果父进程也给干掉了,参数0难道不是表示除自己外的所有同uid的进
  • 进程创建进程组后,然后创建该组中的进程,然后终止。这里的终止....?
  • 如何实现子进程根据父进程的信号来确定是否终止子进程???


  • 站内导航:


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

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

    浙ICP备11055608号-3