【发布时间】:2016-04-27 08:23:47
【问题描述】:
我对内核或系统编程非常陌生,
我有几个与虚拟内存有关的问题。主要与静态与运行时间有关,[即ELF 和加载/链接等],特定于 linux-x86。
我的理解可能完全错误……
我知道虚拟内存分为 1G/3G。其中进程在用户模式下无法访问 PAGE_OFFSET 以上的地址 - PAGE_OFFSET 是虚拟地址。
在静态时ELF定义进程虚拟空间?
如果 ELF 定义了虚拟地址空间,那么 ELF 是否也定义了内核虚拟地址空间?如何? [我假设内核虚拟地址空间是在运行时动态映射的?]
-
如果内核地址空间映射到进程地址空间,那么为什么进程大小(虚拟)不包括内核大小?
- 何时以及如何映射/链接此内核地址空间? 比如,在共享库的情况下,特定文件由 vm struct 等指向。
- 是代码流遇到系统调用的时候吗?例如。
可执行文件大小是否完全决定进程大小(虚拟)?在什么情况下大小不同或完全不同。
有任何文章解释了整体流程吗?
编译 --> 链接/加载 --> 虚拟内存结构(内核地址空间/共享对象等)
我知道它非常庞大,但对整体流程的解释会起作用。
【问题讨论】:
-
一个帖子里的问题太多了,其中一些(
Does kernel use virtual address only for user processes)被问过很多次了。 -
我在这里得到的一些答案和其他帖子.. stackoverflow.com/questions/14540656/… ..... 相应地编辑了帖子
标签: memory-management linux-kernel linker loader virtual-memory