Linux中用户和内核虚拟内存的大小是根据什么决定的? (32 位,如果相关的话。)它可以配置吗?
如果我们有 512 MB RAM,用户和内核虚拟地址的大小是多少?
答案1
可用的地址空间取决于体系结构。一个限制是架构本身提供的可用地址空间量。 64 位架构通常允许 64 位指针,32 位架构则允许 32 位指针。可寻址空间的量可以受到超出这些限制的体系结构的限制,并且体系结构还可以强加一定的结构。最重要的是,内核应用自己的决定,其中一些是可配置的。
在 32 位 x86 上,五种不同的设置是可能的:
- 默认分配 3GiB 给用户空间,1GiB 给内核,并允许近 1GiB 的“低”物理内存——分割在 0xC0000000;
- 3G/1G 拆分变体将拆分向下移动,以允许完整的 1GiB 低内存 — 拆分位于 0xB000000;
- 2G/2G 分割将 2GiB 分配给用户空间,2GiB 分配给内核,并且有两个变体,如 3G/1G 分割 — 分割位于 0x8000000 或 0x7800000;
- 1G/3G 分割将 1GiB 分配给用户空间,3GiB 分配给内核 - 分割位于 0x4000000。
对于具有 512MiB RAM 的系统,您应该使用默认的 3G/1G 分割;用户空间将有 3GiB 的地址空间,内核将有 1GiB。
在 64 位 x86 上,可以有两种不同的设置,为用户空间和内核提供 128 TiB 或 64 PiB 地址空间。
其他架构有不同的设置。