我一直对此感到疑惑,但从未完全理解 32 位机器如何处理超过 4 GB 的RAM。我的意思是,没有更多的地址行了,对吗?
即使在我们的设施中,我也知道我们有戴尔数据库服务器,机器可寻址 8 GB RAM 和 32 位版本的SQL Server。是不是类似于EMS内存的20地址线8086,使用旋转内存的窗口?
我一直对此感到疑惑,但从未完全理解 32 位机器如何处理超过 4 GB 的RAM。我的意思是,没有更多的地址行了,对吗?
即使在我们的设施中,我也知道我们有戴尔数据库服务器,机器可寻址 8 GB RAM 和 32 位版本的SQL Server。是不是类似于EMS内存的20地址线8086,使用旋转内存的窗口?
为了支持超过 4 GB 的内存,Windows 使用物理地址扩展(PAE)。它使用分页表来映射大于 4 GB 的内存。通过这样做,物理地址大小增加到 36 位,即 64 GB。PAE 也用于 64 位操作系统;在这种情况下,最大大小加倍为 128 GB。
这种方法确实意味着每个进程仍被限制为最大 4 GB 内存。
它被称为PAE。它通过更改处理器上的页表布局来支持高达 64 GB 的 RAM。但是,任何一个应用程序仍然只能使用 2-3 GB(取决于内核的设置方式,通常 Windows 为 2 GB,Linux 为 3 GB)。此外,PAE 往往会使机器运行得稍微慢一些,因为页表查找有一个额外的级别要经过。
任何相对较新的处理器都应该支持它。
英特尔有一项名为 PAE 的功能,它实际上使操作系统能够利用超过 4GB 的内存。每个应用程序只能使用 2(或 3)GB 的内存空间,但由于操作系统现在有更多的内存来分散内容 - 进程之间的共享将会减少,因此可能会带来一些性能优势。
然而,真正的魔力始于使用 AWE API,您可以通过专门为此编写的单个 32 位应用程序实际使用更多内存。这就是 SQL Server 正在做的事情。
那么,您的服务器操作系统可能是 64 位的。SQL 可能只使用了 8 个中的 4 个,或者一些 32 位程序产生了更多的进程(如视频编码软件,以我的经验)来利用内存。
32 位操作系统上的应用程序可以访问 4GB 的地址空间。但这是虚拟地址空间,与物理 RAM 的大小完全无关。大多数现代 32 位处理器都有足够的地址线来寻址 64GB 的 RAM。4K 字节的块根据需要映射到进程的地址空间。
PAE 允许访问超过 4GB 的 RAM。它不是经常声称的黑客,但非常有效。PAE 没有做任何根本性的改变,只是细节不同。事实上,大多数现代系统默认使用 PAE。DEP 依赖于 PAE 内核。
不幸的是,对超过 4GB 的 RAM 的访问仅限于服务器。桌面可能正在使用 PAE,但会忽略任何超过 4GB 的 RAM。这有许多技术和营销原因。