用户空间在进程地址空间中的布局是众所周知的,它们占用1G~4G的虚拟内存(32位操作系统),由数据(bss)、堆栈、堆区域组成。但是,我找不到内核空间的布局。
我想知道这些:
当vfs(虚拟文件系统)代码通过kmalloc获取内存时,内存驻留在哪里?内核空间中的某个地方(〜1G)?以及以后如何找到它们?
谢谢
最佳答案
通常,3G 以上的地址(0xC0000000)由内核空间保留。您可以在内核配置过程中更改此设置。
检查一下,内核导出的所有符号都位于大于 0xC0000000 的地址。只需运行 'sudo cat/proc/kallsyms | head -n 10' 你就会看到它们。
现在回答你的问题。我认为您实际上可以自己找到答案,例如通过打印给定的地址(kmalloc 返回的地址)。或者甚至使用内核中的宏将物理地址转换为虚拟地址,反之亦然。
关于linux - Linux内核中内核地址空间的布局是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927277/