【发布时间】:2011-01-10 10:24:42
【问题描述】:
这个地址说明了什么?这些在内存中加载的地址?
【问题讨论】:
标签: linux memory linux-kernel system-calls
这个地址说明了什么?这些在内存中加载的地址?
【问题讨论】:
标签: linux memory linux-kernel system-calls
内核从进程的虚拟地址空间中的固定位置开始。 linux 内核通常 [取决于您的系统架构] 位于 4GB 虚拟地址空间的顶部 1 GB。因此,具有 3G/1G 拆分的系统架构的内核从地址 0xC0000000 开始。根据平台的内存映射,这将映射到物理内存中的物理地址。
system.map 文件是内核符号表。它列出了符号及其虚拟地址。要找出这些符号在主内存中的加载位置,请从符号地址中减去 PAGE_OFFSET [对于 3G/1G 系统,这是 0xC00000000] 以获得偏移量,并将此偏移量添加到物理内存中内核的起始物理地址,如下所示由系统内存映射决定。
【讨论】:
这是内核虚拟地址。那就是从启用地址转换的内核运行的角度来看,它是内存中符号的地址,即。 不是在实模式下。
在大多数 (?) 平台上,都有一个简单的公式可以将这些地址转换为真实地址,即。 RAM 中的实际地址,但不一定如此。
【讨论】: