summaryrefslogtreecommitdiffstats
path: root/Documentation/zh_CN/arm64/memory.txt
blob: a782704c1cb59ab868de82d573291ac8780f6297 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Chinese translated version of Documentation/arm64/memory.txt

If you have any comment or update to the content, please contact the
original document maintainer directly.  However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help.  Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.

Maintainer: Catalin Marinas <catalin.marinas@arm.com>
Chinese maintainer: Fu Wei <wefu@redhat.com>
---------------------------------------------------------------------
Documentation/arm64/memory.txt 的中文翻译

如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。

英文版维护者: Catalin Marinas <catalin.marinas@arm.com>
中文版维护者: 傅炜  Fu Wei <wefu@redhat.com>
中文版翻译者: 傅炜  Fu Wei <wefu@redhat.com>
中文版校译者: 傅炜  Fu Wei <wefu@redhat.com>

以下为正文
---------------------------------------------------------------------
		     Linux 在 AArch64 中的内存布局
		     ===========================

作者: Catalin Marinas <catalin.marinas@arm.com>
日期: 2012 年 02 月 20 日

本文档描述 AArch64 Linux 内核所使用的虚拟内存布局。此构架可以实现
页大小为 4KB 的 4 级转换表和页大小为 64KB 的 3 级转换表。

AArch64 Linux 使用页大小为 4KB 的 3 级转换表配置,对于用户和内核
都有 39-bit (512GB) 的虚拟地址空间。对于页大小为 64KB的配置,仅
使用 2 级转换表,但内存布局相同。

用户地址空间的 63:39 位为 0,而内核地址空间的相应位为 1。TTBRx 的
选择由虚拟地址的 63 位给出。swapper_pg_dir 仅包含内核(全局)映射,
而用户 pgd 仅包含用户(非全局)映射。swapper_pgd_dir 地址被写入
TTBR1 中,且从不写入 TTBR0。


AArch64 Linux 在页大小为 4KB 时的内存布局:

起始地址			结束地址			大小		用途
-----------------------------------------------------------------------
0000000000000000	0000007fffffffff	 512GB		用户空间

ffffff8000000000	ffffffbbfffeffff	~240GB		vmalloc

ffffffbbffff0000	ffffffbbffffffff	  64KB		[防护页]

ffffffbc00000000	ffffffbdffffffff	   8GB		vmemmap

ffffffbe00000000	ffffffbffbbfffff	  ~8GB		[防护页,未来用于 vmmemap]

ffffffbffbc00000	ffffffbffbdfffff	   2MB		earlyprintk 设备

ffffffbffbe00000	ffffffbffbe0ffff	  64KB		PCI I/O 空间

ffffffbffbe10000	ffffffbcffffffff	  ~2MB		[防护页]

ffffffbffc000000	ffffffbfffffffff	  64MB		模块

ffffffc000000000	ffffffffffffffff	 256GB		内核逻辑内存映射


AArch64 Linux 在页大小为 64KB 时的内存布局:

起始地址			结束地址			大小		用途
-----------------------------------------------------------------------
0000000000000000	000003ffffffffff	   4TB		用户空间

fffffc0000000000	fffffdfbfffeffff	  ~2TB		vmalloc

fffffdfbffff0000	fffffdfbffffffff	  64KB		[防护页]

fffffdfc00000000	fffffdfdffffffff	   8GB		vmemmap

fffffdfe00000000	fffffdfffbbfffff	  ~8GB		[防护页,未来用于 vmmemap]

fffffdfffbc00000	fffffdfffbdfffff	   2MB		earlyprintk 设备

fffffdfffbe00000	fffffdfffbe0ffff	  64KB		PCI I/O 空间

fffffdfffbe10000	fffffdfffbffffff	  ~2MB		[防护页]

fffffdfffc000000	fffffdffffffffff	  64MB		模块

fffffe0000000000	ffffffffffffffff	   2TB		内核逻辑内存映射


4KB 页大小的转换表查找:

+--------+--------+--------+--------+--------+--------+--------+--------+
|63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
+--------+--------+--------+--------+--------+--------+--------+--------+
 |                 |         |         |         |         |
 |                 |         |         |         |         v
 |                 |         |         |         |   [11:0]  页内偏移
 |                 |         |         |         +-> [20:12] L3 索引
 |                 |         |         +-----------> [29:21] L2 索引
 |                 |         +---------------------> [38:30] L1 索引
 |                 +-------------------------------> [47:39] L0 索引 (未使用)
 +-------------------------------------------------> [63] TTBR0/1


64KB 页大小的转换表查找:

+--------+--------+--------+--------+--------+--------+--------+--------+
|63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
+--------+--------+--------+--------+--------+--------+--------+--------+
 |                 |    |               |              |
 |                 |    |               |              v
 |                 |    |               |            [15:0]  页内偏移
 |                 |    |               +----------> [28:16] L3 索引
 |                 |    +--------------------------> [41:29] L2 索引 (仅使用 38:29 )
 |                 +-------------------------------> [47:42] L1 索引 (未使用)
 +-------------------------------------------------> [63] TTBR0/1

当使用 KVM 时, 管理程序(hypervisor)在 EL2 中通过相对内核虚拟地址的
一个固定偏移来映射内核页(内核虚拟地址的高 24 位设为零):

起始地址			结束地址			大小		用途
-----------------------------------------------------------------------
0000004000000000	0000007fffffffff	 256GB		在 HYP 中映射的内核对象