如何理解虚拟到物理翻译?

时间:2013-08-15 13:17:00

标签: linux kernel

代码是:

include/asm-x86/page_32.h

#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))

如何理解__pa(x)?
谢谢

1 个答案:

答案 0 :(得分:2)

整个地址空间分为用户空间和内核空间。在x86中,用户到内核空间的比例通常为3:1。这意味着较低的3GiB用于用户空间,而较高的1GiB用于内核。配置内核时可以更改此比率。
现在PAGE_OFFSET宏指示内核地址空间的开始,在x86中,默认的3:1用户与内核之比,它的值为0xC000000
内核地址空间的第一个区域用于将页面帧映射(直接映射)到虚拟地址空间,并且此区域从PAGE_OFFSET跨越到high_memory
系统具有超过896MiB的内存时使用high_memory
可以直接映射的内存区域称为normal,而不能在highmem

中的页面