在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/