Ste*_*itt 15
64 位 x86 虚拟内存映射将地址空间分成两部分:低部分(最高位设置为 0)是用户空间,高部分(最高位设置为 1)是内核空间。(请注意,x86-64 定义了“规范的”“下半部分”和“上半部分”地址,其中许多位有效地限制为 48 或 56;有关详细信息,请参阅维基百科。)
完整的映射在内核中有详细记录;目前看起来像
| 起始地址 | 抵消 | 结束地址 | 尺寸 | 虚拟机区域说明 |
|---|---|---|---|---|
0000_0000_0000_0000 |
0 | 0000_7fff_ffff_ffff |
?128 TiB | 用户空间虚拟内存 |
0000_8000_0000_0000 |
+128 TiB | ffff_7fff_ffff_ffff |
~16M TiB | 非规范 |
ffff_8000_0000_0000 |
-128 TiB | ffff_ffff_ffff_ffff |
?128 TiB | 内核空间虚拟内存 |
使用 48 位虚拟地址。(56 位变体具有相同的结构,在 16K PiB 孔的两侧有 64 PiB 的可用地址空间。)?(注意 16K?PiB = 16M?TiB = 2 64 ?bytes。)
与 32 位情况不同,“64 位”内存映射是硬件约束的直接反映。
64 位 ARM 在硬件上也有类似的地址区别:前 16 位是用户空间的 0,内核空间的 1。Linux 使用 39、42 或 48 位作为虚拟地址,具体取决于页表级别的数量和页大小。使用 ARMv8.2-LVA,又添加了四位,从而产生了 52 位的虚拟地址。
这也在内核中详细记录。
| 归档时间: |
|
| 查看次数: |
11487 次 |
| 最近记录: |