linux - Linux 内核中的 x86 分页与 mmu

标签 linux x86 kernel paging mmu

在x86架构中,linux内核2.6.x,32位系统

我理解虚拟地址0xC0000000 ~ 0xFFFFFFFF

为内核保留。

这个虚拟地址可以通过以下方式转换为物理地址

减去 0xC0000000。

但是,我认为即使结果相同,MMU也会翻译

通过遍历页表将内核虚拟地址(如0xC0851000)转换为物理地址。

比如

CR3 -> 页目录 -> 页表 -> PFN。

我是对还是错?如果我错了,请纠正我。

我需要在x86、linux 32位系统中开发基于硬件的内核监视器。

所以我需要知道这个问题

请帮忙。

最佳答案

对于内核逻辑地址,你是正确的。然而,内核虚拟地址(例如由 vmalloc 分配的内存)不一定与表征逻辑地址空间的物理地址具有一对一的映射。

请记住,内核逻辑地址并不总是通过减去偏移量来转换为物理地址(在 x86 中是这样,但在 AVR32 中则不然)。

关于linux - Linux 内核中的 x86 分页与 mmu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11613048/

相关文章:

linux - Swift on Linux - 导入第三方模块

linux - 为 busybox 构建选择正确的内核头文件

c++ - 可以捕获写入地址(x86 - linux)

assembly - x86 程序集 - $ 未显示正确的地址

c - QEMU 在加载内核时崩溃

Linux 内核 - "put"一个 inode 是什么意思?

c - 通过直接在函数处理程序中使用写入函数的用户空间缓冲区来节省内存(Linux,内核)?

linux - 使用 cat 和 grep 打印行及其编号但同时忽略空行

c++ - C 中的链表和 getifaddrs()

linux - Linux Kernel 5.0.1 中为 x86 arch 定义的系统调用 ID 在哪里?