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