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