使用mmu在linux内核中进行x86分页

时间:2012-07-23 13:00:14

标签: linux x86 kernel paging mmu

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

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

是为内核保留的。

并且可以通过

将此虚拟地址转换为物理地址

减去0xC0000000。

然而,我认为即使结果相同,MMU也会翻译

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

,例如

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

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

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

所以我需要知道这个问题

请帮忙。

2 个答案:

答案 0 :(得分:3)

对于内核逻辑地址,你是对的。内核虚拟地址(如vmalloc分配的内存)不一定与表示逻辑地址空间的物理地址进行一对一映射。

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

答案 1 :(得分:0)

“此虚拟地址可以通过

转换为物理地址

减去0xC0000000“

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