cla*_*aws 17 windows 64-bit memory-management linux-kernel address-space
我正在读"理解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更正确)每个进程的地址空间是一个限制.如果你真的遇到这个限制.请举个例子.
这个窗口限制是多少?
我知道虚拟内存!=物理内存和处理器地址引脚与虚拟内存无关.这是一个完全不同的问题.如何知道处理器的地址引脚数(=地址总线的大小).http://ark.intel.com处理器的规格不包括此规范.
回答:
请参阅Paul Betts对第一个问题的合理答案的答案.
这些答案都不对,操作系统不使用完整的64位是因为页表会更大(64位已经达到3级页表),并且没有理由支付需要额外的间接,48位就足够了.48位也很方便,因为你得到一些额外的位来存储标志(指针标记)
"如果我们现在决定只使用64位中的48位进行寻址".为什么?为什么只有48位?为什么不是其他一些号码?
系统架构师进行权衡.256TB似乎足以容纳1个进程的地址空间.记住虚拟地址!=物理地址,一般来说,每个进程都有自己的地址空间.
只要指针是64位,这就更像是一个性能问题.如果&48位成为限制,可以调整操作系统以使用64位地址空间的更多位,而不会破坏应用程序不兼容性.就目前而言,建筑师只是在为自己买一个非常舒适的时间.
它可能与处理器端虚拟寻址功能有关,因为许多处理器现在都有内存管理单元来处理虚拟 - >物理内存映射.
如何知道处理器的地址引脚数(=地址总线的大小).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更正确)每个进程的地址空间是一个限制.如果你真的遇到这个限制.请举个例子.
两个词:内存映射文件.