寻址内存帧中的一个字

Addressing a word inside memory frames

假设我们有一个 64 位处理器和 8GB 内存,帧大小为 1KB。

现在主存大小是2^33 B

所以帧数是 2^33 / 2^10 即 2^23 帧。 所以我们需要 23 位来唯一标识每一帧。 所以地址拆分将是 23 | 10 其中需要 10 位来标识帧中的每个字节(总共 1024 字节)

因为它是可字寻址的,每个字 = 8B,地址拆分现在是 23 | 7 因为我们在每一帧中有 2^7 个单词?

数据总线大小也可以不同于字长吗?

如果假设数据总线大小为 128 位,那么是否意味着我们可以在单个总线周期中一次寻址两个字并传输 2 个字,但只能执行 64 位操作?

大部分答案取决于系统的设计方式。您的问题还有更多图片。

系统上有一个叫做可用寻址 space 的东西。在 32 位应用程序中为 2^32,在 64 位应用程序中为 2^64。这称为虚拟内存。还有通常称为 RAM 的物理内存。如果应用程序构建为 64 位,那么它可以像有 2^64 内存可用一样工作。底层硬件可能没有 2^64 RAM 可用,这由内存管理单元负责。基本上它将虚拟内存和物理内存都分解为页面(您将其称为帧)并将最常用的页面保留在 RAM 中。其余都保存在硬盘中。

现在你说,RAM 是 8GB,支持 2^33 个可寻址位置。当您说处理器是 64 位时,我认为您是在谈论支持 2^64 个可寻址位置的 64 位系统。现在请记住,应用程序可以免费访问这些 2^64 个位置中的任何一个。可用页数为 2^64/2^10 = 2^54。现在我们需要知道哪个虚拟页面映射到哪个物理页面。有一个名为 table 的 table 页面,其中包含此信息。因此,我们将地址的前 54 位和索引放入此 table 中,这将 return 物理页码,即 2^33/2^10 = 23 位。我们将这 23 位与虚拟地址的最少 10 位相结合,从而得到物理地址。在一般情况下 CPU,一旦计算出地址,我们就不会去获取它。首先,我们检查它是否在缓存中可用,一直到层次结构。如果它不可用,将发出获取请求。当一个缓存向主存发出获取请求时,它会获取整个缓存行(通常是几个字)

我不确定你提出的以下问题是什么意思。

As it is word addressable with each word = 8B, will the address split now be 23 | 7 as we have 2^7 words in each frame?

内存通常设计为可字节寻址。因此,您将需要所有 33 位来定位页面中的一个字节。

Also can the data bus size be different than word size ?

是的,您可以将数据总线设计为具有任意宽度,但小于一个字节会很痛苦。

If suppose data bus size is 128 bits then does it mean that we can address two words and transfer 2 words at a time in a single bus cycle but can only perform 64 bit operations?

问题还是有点不清楚,如果数据是 128 位宽,而你的缓存行宽度超过 128 位,那么 return 数据作为对缓存的响应需要多个周期错过。您不会对缓存中的部分数据执行操作(至少据我所知),因此您将等到整个缓存行被 returned。一旦它在那里,您可以在该行上执行的操作没有任何限制。