在64位系统中,地址空间的分配非常灵活,具体哪些地址是给内核使用的取决于操作系统的实现。然而,大多数现代操作系统(如Linux、Windows和macOS)都遵循一些通用的原则来划分虚拟地址空间。以下是详细的解释:
1. 虚拟地址空间划分
64位系统
- 总地址空间:64位系统理论上可以支持 (2^{64}) 字节的地址空间,即16 EB(Exabytes)。但实际上,由于硬件和操作系统的限制,通常只使用其中的一部分。看图
- 实际可用范围:大多数64位操作系统将虚拟地址空间划分为用户空间和内核空间。
2. 用户空间与内核空间的划分
Linux 和类 Unix 系统
- 用户空间:较低的地址范围分配给用户空间进程,每个进程都有自己独立的用户空间地址范围。
- 内核空间:较高的地址范围保留给内核使用,所有进程共享同一块内核空间。
典型划分(以Linux为例)
- 用户空间:从
0x0000000000000000
到0x00007fffffffffff
(约128TB)。 - 内核空间:从
0xffff800000000000
到0xffffffffffffffff
(约128TB)。
Windows 系统
- 用户空间:较低的地址范围分配给用户空间进程。
- 内核空间:较高的地址范围保留给内核使用。
典型划分(以Windows 10为例)
- 用户空间:从
0x0000000000000000
到0x000007ffffffffff
(约128TB)。 - 内核空间:从
0xf