32位CPU只能寻址到4GB(出于性能考虑,内核也必须占用一部分这个地址空间,通常是1-2GB),与OS无关。如果在64位CPU上跑32位操作系统,相当于拿它当32位CPU来用,因此无法突破这个限制。
比较新的Intel CPU提供了比较山寨的PAE(物理地址扩展)能力。通过使用PAE,32位操作系统可以管理超过4GB的内存,但是,a) 应用程序能够使用的内存仍然受4GB寻址能力限制,且OS仍然需要占用一部分空间;b) OS需要在页表上做额外的转换,这个转换有开销; c) 驱动程序需要使用wrapper去访问内存,并不是所有的驱动程序都支持这样做(理论上可以改成这样),同样有开销,并且由于测试可能不那么充分,因此难说会不会有可靠性问题。默认的 FreeBSD GENERIC 内核不包含 PAE 支持,想要使用这个功能必须自行编译内核。
再后来的AMD 和 Intel 的 CPU 都实现了长地址模式,即 amd64 (Intel称之为EM64T)。 CPU 在这种模式下使用 64 位地址空间(当然,实际上 CPU 仍然不能管理这样多的内存),对于应用程序来说,可见的地址空间与32位相比大了4G倍。
简而言之,如果你的物理内存超过2GB,就应该使用64位的OS,例如 FreeBSD/amd64。FreeBSD/amd64 兼容绝大多数 FreeBSD/i386 的应用程序(即,可以在其上运行32位应用而无需重新编译;不过,这种时候应用程序看到的内存仍然受4GB限制)。由于长地址模式是直接由硬件实现的,而不需要软件去 workaround,因此要比 i386/PAE 稳定;长地址模式中 CPU 提供的一些额外的能力也使得许多任务的性能比32位模式更好。
--- 转自FreeBSDChina(By Delphij)
|