我正在阅读有关 x86 的内容,他们提到段大小可以达到 4GB(32 位)架构。
有人知道或经历过分段大小超出限制吗?或者说在实际生活中段大小的极限是多少?如果超过最大限制,则被分成不同大小的段,那么如何管理段之间的切换?如果 RAM 较小以容纳多个段
答案1
操作系统不会使用超过其分配表中可以处理的内存。
由于 32 位可以表示的最大字节数为 4 294 967 296,因此内存限制为 4GB。因此,在 64 位系统上,最大值将为 18 446 744 073 709 551 616 字节(16 777 216 TB),这显然在几十年内都不会成为问题。 64 位系统上的内存限制更多地取决于硬件可以主动处理的内存量。
请注意,最大文件大小通常会受到相同的限制,但某些系统实施了克服该限制的方法。
答案2
大多数现代操作系统的设计都采用扁平内存模型,其中没有使用 Intel 80286 引入的段概念,Linux 也是其中之一。
OS kernel
为了提高性能,要求用户进程内存空间可以由内核直接寻址,因此 2^32 地址空间在内核和用户空间进程之间划分。对于 32 位 Linux,此比例为 1:3 - 虚拟地址空间的上 1G 为内核和驱动程序保留,而虚拟地址空间的下 3G 为进程保留。
对于许多任务来说,3G RAM 就足够了。然而,有些应用程序在可寻址(和物理上可用)RAM 及其性能之间存在直接依赖性。好的例子是关系型数据库、不同的数据分析、图像处理、科学计算等