我对 Linux 进程的更高虚拟地址的内核映射有一些疑问:
它是否映射到存储在 RAM 中的内核文本段(我读到
vmlinuz
将被提取到 RAM)?它有什么用呢?
进程的
pmap
表示它映射到 exe 的段、共享内存、堆栈、堆。我还可以看到映射的更高地址内核吗?
答案1
它有很多用途,包括映射内核二进制文件。 x86-64 映射是记录在内核中,并显示 0xffffffff80000000 处的内核文本映射(对应于vmlinuz
)。其他用途包括内核进行的内存分配以及物理内存的完整映射。
除了遗留的 vsyscall 映射之外,为内核分配的地址空间不会显示在进程的映射中。事实上,对于 KPTI,当处于用户模式时,绝大多数内核根本没有映射到内存中。
也可以看看地址空间中的Kernel空间是通过什么为我们保留的?以及那里链接的其他问题。