我对内核或系统编程非常陌生,处理虚拟地址空间和内核地址空间?怎么样?
我有几个与虚拟内存有关的问题。主要与静态与运行时间有关[即ELF和加载/链接等],具体到linux-x86。
我的理解可能是完全错误的......
我知道的虚拟内存,它的分裂1G/3G。在用户模式下进程无法访问PAGE_OFFSET之上的地址 - PAGE_OFFSET是虚拟地址。
在静态时间ELF定义进程虚拟空间?
如果ELF定义的虚拟地址空间,然后做ELF还定义了内核的虚拟地址空间?怎么样?我假设内核虚拟地址空间在运行时动态映射?
如果内核地址空间映射到进程地址空间,那么为什么进程大小(虚拟)也包含内核大小呢?
- 何时以及如何将此内核地址空间映射/链接? 像,在共享库的情况下,特定的文件被vm结构等指向。
- 是否当代码流遇到系统调用?例如。
可执行文件大小是否完全决定进程大小(虚拟)?在什么情况下有所不同或者完全不同。
任何解释整体流程的文章?
编译 - >链接/负载 - >虚拟内存结构(内核地址空间/共享对象等)
我知道它很庞大的,但对整体流程的说明会工作。
在一篇文章中有太多问题,其中一些问题('内核是否仅为用户进程使用虚拟地址)在很多时候被问过。 – Tsyvarev
一些答案我在这里和其他帖子.. http://stackoverflow.com/questions/14540656/why-kernel-needs-virtual-addressing ..... 编辑帖子相应 –