Pregunta

In x86 arch, linux kernel 2.6.x, 32bit system

I understand that virtual address 0xC0000000 ~ 0xFFFFFFFF

is reserved for kernel.

and this virtual address can be translated to physical address by

subtracting 0xC0000000.

however, I think even the result is same, MMU will translate

the kernel virtual address(such as 0xC0851000) to physical address by walking through page table.

such as

CR3 -> page directory -> page table -> PFN.

am I correct or wrong?, please correct me if I'm wrong.

I need to develop hardware based kernel monitor in x86, linux 32bit system.

so I need to know this problem

please help.

¿Fue útil?

Solución

For kernel logical addresses, you are correct. Kernel virtual addresses, like memory allocated by vmalloc, do not necessarily have a one-to-one mapping to physical addresses that characterize the logical address space, however.

Just bear in mind that kernel logical addresses aren't always translated to physical by subtracting an offset (that's true in x86 but not, say, AVR32).

Otros consejos

"and this virtual address can be translated to physical address by

subtracting 0xC0000000"

since page tables for the kernel virtual addresses are configured that way, people have come up with a shortcut you mentioned.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top