我正在阅读“了解Linux内核”。
为64位架构进行分页
正如我们在前面所看到的那样 部分,两级分页是常见的 由32位微处理器使用。 但是,两级分页不是 适用于采用的计算机 64位架构。我们来用吧 思想实验解释原因:
首先假设标准页面大小 4 KB。因为1 KB涵盖范围 2个 10 地址,4 KB覆盖2 12 地址,因此偏移字段为12 位。这留下了多达52位的 要分发的线性地址 表和目录之间 领域。 如果我们现在决定使用 64位中只有48位用于寻址 (这个限制让我们留下了一个 舒适的256 TB地址空间!) , 剩余的48-12 = 36位将 必须在表和之间分开 目录字段。如果我们现在决定 为这两个中的每一个保留18位 字段,页面目录和 每个进程的页表应该 包括2个 18 条目,超过 256,000个条目。
“如果我们现在决定只使用64位中的48位进行寻址”。为什么? &安培;为什么只有48位?为什么不是其他一些号码?
好吧,我只是一个普通的PC用户&程序员。我很难相信32位寻址,即4GB(2GB / 3GB更正确)每个进程的地址空间是一个限制。如果确实遇到此限制。请举个例子。
Windows的限制是什么?
我知道虚拟内存!=物理内存&处理器地址引脚与虚拟内存无关。这是一个完全不同的问题。如何知道处理器的地址引脚数(=地址总线的大小)。处理器的http://ark.intel.com规格不包括此规范。
答案:
有关第一个问题的合理答案,请参阅Paul Betts's answer。
答案 0 :(得分:8)
这些答案都不对,操作系统不使用完整的64位的原因是因为页表会大得多(64位已经达到3级页表),并且没有为了支付额外的间接费用,48位就足够了。 48位也很方便,因为你得到一些额外的位来存储(指针标记)
中的标志答案 1 :(得分:6)
“如果我们现在决定只使用64位中的48位进行寻址”。为什么? &安培;为什么只有48位?为什么不用其他数字?
系统架构师进行权衡。 256TB似乎足以容纳1个进程的地址空间。记住虚拟地址!=物理地址,一般来说,每个进程都有自己的地址空间。
只要指针是64位,这就更像是一个性能问题。如果&当48位成为限制时,可以调整OS以使用64位地址空间的更多位,而不会破坏应用程序的不兼容性。目前,建筑师只是在非常舒适的时间内购买。
它可能与处理器端虚拟寻址功能有关,因为许多处理器现在有memory management units来处理虚拟 - >物理内存映射。
如何知道处理器的地址引脚数(=地址总线的大小)。处理器的http://ark.intel.com规格不包括此规范。
这在很大程度上是无关紧要的。这是处理器实现各种物理寻址方案的一种方式。如果总线是同步的,并且地址位及时复用,则64位处理器可以通过64,32,16,8,4,2或1地址引脚实现外部地址/数据总线的完整地址空间。再次,虚拟地址!=物理地址; 64位虚拟寻址可以用48位或32位物理地址实现(只是你将被限制为2 48 或2 32 字的内存。
更新:如果您真的想知道,您必须查看相关处理器的数据表。例如。 Intel Core 2 Duo - 数据表第4.2节讨论了信号 - 地址总线是36位宽(但实际上是33条信号线;数据宽度是64位= 8字节,所以其他3条线是可能没有必要与正确的数据对齐)
好吧,我只是一个普通的PC用户&程序员。我很难相信32位寻址,即4GB(2GB / 3GB更正确)每个进程的地址空间是一个限制。如果你真的遇到这个限制。请举个例子。
两个字: memory-mapped files 。
答案 2 :(得分:5)
目前没有x86-64设计使用超过48 bits的内容 - 所以这是一个方便的数字选择,它在Windows上也会自动达到相同的限制。
答案 3 :(得分:2)
我很难相信32位寻址,即4GB(2GB / 3GB更正确)每个进程的地址空间是一个限制。如果你真的遇到这个限制。请举个例子。
从RAM获取数据比从磁盘获取数据更有效(更快)。
SQL服务器的速度部分取决于它能够保存在RAM中而不是磁盘上的数据量(例如,其索引和数据页的数量)。
因此,在具有4GB以上RAM的计算机上,SQL数据库(例如)可能会更快。
对于其他类型的服务器(例如文件服务器,HTTP代理等)也是如此,如果它们可以拥有更大的RAM缓存,则可以更快。
答案 4 :(得分:2)
我认为最简单的答案是 - 摩尔定律。
摩尔定律基本上说IC每18个月的成本减半。有一些方法可以解释这一点:PC中安装的内存量往往会每18个月翻一番。有效速度加倍(至少如果您采用核心* MHz而不仅仅是MHz)。
无论如何,我们刚刚耗尽32位地址空间,因此从32 - 48跳转意味着,在硬件方面,我们为摩尔定律的大约16次迭代分配了扩展空间 - 大约20年。
我很确定虽然有些PC可能会被推到10年,但20年的扩展空间似乎是一个不错的权衡:20年后的计算机将会有所不同 - 他们将不会使用相同的CPU和RAM总线,就像它们20年前不同。将超过20年的扩展空间设计到界面中只是愚蠢的工程设计,无论如何都不会看到使用。
现在的硬件确实存在过早被淘汰的风险。
答案 5 :(得分:1)
我很难相信32位寻址,即4GB(2GB / 3GB更正确)每个进程的地址空间是一个限制。如果你真的遇到这个限制。请举个例子。
它不再存在(除了一些旧员工个人机器),但我在20世纪90年代末/ 21世纪初期开发了一套名为RealiMation的软件。它是用于可视化和模拟的实时3D引擎。我们的一位客户定期创建高度详细的型号,达到2GB内存限制。我们会在需要时动态加载纹理,并且必须添加代码来检查内存分配失败,以便我们可以继续显示模型,尽管没有纹理。
答案 6 :(得分:0)
从硬件角度来看,另一个考虑因素是对齐。
一旦需要超过4个字节的数据类型(例如6),您需要将它们放在8字节边界上以在单个指令中检索它们。如果不对齐,则需要进行位屏蔽和移位,并在(汇编)代码中添加对此的检查。
许多人因为转换到64位而烦恼,他们的程序消耗了更多的内存。他们会想要想要 48位指针,如果没有对齐的限制,那么CPU制造商可能会制造一个48位架构。
请注意,如果您因为内存而缺乏指针,那么您希望指针为6个字节,那么就有办法做到这一点。但执行时间会受到惩罚。