linux - Linux内核中内核地址空间的布局是怎样的?

标签 linux linux-kernel

用户空间在进程地址空间中的布局是众所周知的,它们占用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/

相关文章:

linux - 什么是指针的唯一标识 (UID) 编号?

linux - 从内核空间向用户空间传递地址

c - 结构问题的定义

linux - 列出多个目录内容及其路径

linux - 通过 crontab -e 运行时脚本不运行

linux - parport_driver.attach() 何时被调用?

c - C90 中的 Linux 内核 container_of 宏和通用容器

linux - 为什么 linux 内核包含仅以 __ 前缀不同的函数对?

linux - 如何在UNIX shell中检索 “apple”中的变量名 "FRUIT=apple"?

linux - 使用定制的 gcc(g++) 构建 C++ 项目