2

代码是:

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) ?
谢谢

4

1 回答 1

2

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

于 2013-08-27T10:19:13.173 回答