2

x86 arch, linux kernel 2.6.x, 32bit系统

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

为内核保留。

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

减去 0xC0000000。

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

通过页表遍历内核虚拟地址(例如0xC0851000)到物理地址。

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

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

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

所以我需要知道这个问题

请帮忙。

4

2 回答 2

3

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

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

于 2012-07-24T06:32:15.407 回答
0

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

减去 0xC0000000"

由于内核虚拟地址的页表是这样配置的,因此人们想出了您提到的快捷方式。

于 2012-10-29T05:47:34.347 回答