PAGE_OFFSET
首先看看PAGE_OFFSET的功能
- 内存映射
-
| 用户空间 | 内核空间 |
-
|——————+——————+——————+———————|
-
物理 A:0 1G B:3G C:4G
- B: 定义为 PAGE_OFFSET
- 0-1G: 和内核空间又有丰富的内容,我还没有整理,以后再说。
-------------------------------------
- arch/x86/include/asm/page_types.h
-
#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET
-
-> __PAGE_OFFSET
-
arch/x86/include/asm/page_64_types.h:
-
#define __PAGE_OFFSET _AC(0xffff880000000000, UL)
-
arch/x86/include/asm/page_32_types.h:
-
#define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)
-
-->CONFIG_PAGE_OFFSET
-
arch/x86/configs/i386_defconfig:
-
CONFIG_PAGE_OFFSET=0xC0000000
-
-->AC
- include/linux/const.h
- #ifdef __ASSEMBLY__
-
#define _AC(X,Y) X
-
#else
-
#define __AC(X,Y) (X##Y)
-
#define _AC(X,Y) __AC(X,Y)
- #endif
=====================================
我们就很清晰的看到,在x86下,32时PAGE_OFFSET 为0xC0000000(3G),也是内核空间和用户空间的分界。