0

随着内存需求的快速增长,如今越来越多的系统需要 64 位机器来访问更大的 RAM。

FWIK 在 386 保护模式下,内存指针由两部分组成:由段选择器指定的基地址(32 位)和添加到基地址的偏移地址(32 位)。

要在 64 位中重新编译所有程序,有很多工作要做,例如对于 C/C++ 程序,依赖于机器的 `int' 类型(在 32 位机器中是 32 位,而在 64 位在 64 位机器中)如果使用不正确会导致问题。即使它正在毫无问题地重建,随着内存需求的不断增长,例如有一天我们将使用 128 位机器,我们是否需要再次重建所有程序以符合新的字长?

如果我们只是将基地址扩展为 64 位,从而在整个 RAM 上创建一个像 4GB 窗口一样的段,我们甚至根本不需要 64 位操作系统,不是吗?大多数应用程序/进程不必在服务器端访问 4G+ 内存,例如,如果文件服务器使用 20GB RAM 进行缓存,它可能会被拆分为 10 个进程,每个进程访问 2GB,因此 32 位指针是足够的。并将每个放在不同的段中以覆盖 20GB 内存。

扩展段限制对上层程序是透明的,要做的只是CPU和操作系统,如果我们能让Linux支持在不同的64位段上分配内存(虽然目前段基地址是32位然而),我们可以轻松地在 32 位机器上使用 1TB RAM,不是吗?

我对吗?

4

2 回答 2

3

内存访问是在 CPU 上使用汇编指令完成的。如果 CPU 有 32 位用于寻址内存段,则它最多可以寻址 4 GB,但不能更多。为了扩展这种行为,CPU 需要一个 64 位寄存器。

32 位操作系统也有同样的限制。64 位操作系统可以执行 32 位程序并使其访问高于 4 GB 的基地址,但需要 64 位处理器。

总而言之,操作系统(以及在该操作系统上运行的进程间接访问)可访问的内存窗口的限制受处理器寄存器宽度(以位为单位)的限制。

所以,你是不对的。

PAE可能满足您的需求,但您需要硬件和操作系统支持,据我所知,这很常见。

于 2010-08-02T09:03:16.070 回答
0

您现在可以通过在 64 位内核上运行 32 位进程来获得这种效果。每个 32 位进程只有 4GB 的虚拟地址空间,但这些地址可以映射到内核可访问的物理内存中的任何位置。但是,它并没有使用分段来完成。它只是通过分页完成的。

于 2010-08-03T03:59:29.397 回答