2010-07-11 130 views
2

昨天,当我在考虑Why can’t OS use entire 64-bits for addressing?时,我发现了另一个有趣的事情。以英特尔酷睿2双核处理器为例。需要更多关于处理器地址行的说明

Intel Core 2 Duo Processor E8000 and E7000 Series - Datasheet的“4.2 Alphabetical Signals Reference”我知道它有36条地址线& 64条数据线。数据表将地址线称为A [35:3],数据线称为D [63:0]。

这意味着什么?这是我从上面的理解(很少有没有回答的问题):

  1. 因为有36条地址线。总寻址内存为2^36 = 64GB,每个物理内存位置(字节)以36位数寻址。
  2. 因为,没有提到A [2:0]。这意味着在将虚拟地址转换为物理地址之后(在地址表的帮助下),MMU(寻呼单元更具体)只将33个最高有效位放在地址线A [35:3]上。 RAM发送全部8个可能的字节(3个LSB,A [2:0])即对于这8个字节范围内的任何请求。 RAM发送相同的8字节数据。对?我想这是为了提高效率。
  3. 接下来会发生什么?我的意思是MMU需要1个字节的数据,但RAM发送8个字节。它将如何处理它?
  4. 自启用英特尔PAE后,此地址总线宽度是36位吗?
  5. 我在新的处理器数据表(Intel® Core™ i7 Processor Extreme Edition)中找不到地址总线和数据总线宽度。 :(帮帮我!
+0

想一想 - 数据总线是64位(8字节)宽。这不是一个真正的编程问题,所以你可能想把它带到superuser.com。 – 2010-07-11 20:26:50

+0

@Paul R:思考不是问题。问题是我的思想有多准确。这就是为什么而不是直接问我的问题。我写了我认为的 – claws 2010-07-11 21:53:42

回答

2

该芯片的字节使能(BE)引脚指定的8字节块的位实际上是相关的。

要访问地址为0x1你把所有零上A [ 35:3]并设置BE [1](我可能有针脚编号和极性BE有点不对,但这个想法仍然是正确的)

要访问字节0x3:0x0你把所有的零置于A [ 35:3]并设置BE [3:0]。

这应该回答问题1,2和3.

关于问题4,事实上PAE可以让你使用36位地址。在以后的处理器中,使用64位模式分页可以实现相同的功能。

不能与5帮助...

0

约5: 核心i7的架构使用3(片)存储器控制器(对于每个通道一个控制器)与64位的每个信道的宽度。

但是当然你不能在那里使用3 * 64位,因为SSE单元与L1缓存(当然是两个64位Chache线)的128位线相连。

这三个通道仅用于同时快速预取不同的地址。

但是在GPR的u上只能使用64位(因为它是64位结构)。

地址空间也应该是36位,因为如果你永远不能连接这么多的内存,你会需要其他位。

+0

没有意义的任何冒犯,看起来你对内存寻址有不完全的理解。 GPR中的地址只是地址的一部分。为此,您必须添加段基线以获取线性地址,并且需要通过页表转换为物理地址。页表的构建方式使您可以创建最多64位宽的地址,足以覆盖PAE所需的36位数据。 – 2010-07-18 06:54:06

+0

当你说你无法访问3 * 64位时,你也错了。当你有多个线程或内核时,这使他们能够并行访问内存,而不是按顺序访问内存,从而提高性能。 – 2010-07-18 06:58:01

+0

我写了同样的...这里“三个通道只能用于同时快速预取不同的地址”,我只是说,你到底在哪里进行SSE操作,或者是什么使用3 * 64位?没有任何地方,只有128位操作可用(SSE的东西) – Quonux 2010-07-18 13:04:37