每字节 RAM 内存访问

use*_*569 4 memory 64-bit

我只有一个简单的问题。如今内存DDR芯片是64位宽,CPU数据总线也是64位宽。但内存仍然是按单个字节组织的。那么,我想问的是,当CPU选择某个内存地址时,它应该是一个字节,对吗?因为您可以访问的最低内存部分是 1 个字节。但是,如果每个地址有 1 个字节,为什么内存总线是 8 个字节宽?

nik*_*nik 5

我们将计算机架构称为byte-addressable——意思是,内存以字节为单位寻址。这有助于我们一次提取 8 位数据。但是,这并不总是标准,并且会使用其他宽度。

\n\n

事实上,即使您使用基于 Intel 的字节地址计算机,您使用的内存通常也会以不同的宽度进行访问(如您的示例中的 64 位)。

\n\n

这有助于用较小的地址空间寻址大量数据。

\n\n

我的答案实际上已经完成,但是,我进一步讨论内存访问是如何完成的,这可能有助于思考实现的抽象(也许也激励您阅读更多有关内存的内容)。

\n\n
\n\n

如果您见过 DDR-RAM 棒,您会记得在绿色 PCB 上看到过多个芯片。它们被条带在一起以进行并行访问。这使得你的 RAM 访问速度更快。

\n\n

RAM 模块前面是内存控制器。其设计目的是访问更宽位宽的数据(32、64、128 位——取决于设计)。

\n\n

当你从这个内存空间访问一个字节时,内存控制器实际上得到了一个完整的“内存字”;这里,一个字实际上是来自内存控制器的这次访问的宽度。

\n\n

这意味着如果它的宽度是 128 位,那么您总是从 16 倍数的地址中获取 16 个字节。

\n\n

那么,现在当您想要地址 18 (= 16+2) 处的一个字节时会发生什么?
\n好吧,你从地址 16 获得 16 个字节,然后扔掉其中的 15 个!

\n\n

更有趣的是,当您想在地址 19 处写入一个字节时会发生什么?
\n您从地址 16 获取 16 个字节,更改第 3 个(第 19 个地址)字节,然后写回所有这 16 个字节(有趣吧?)。

\n\n

这一切都是相当的努力。内存控制器旨在管理此问题,并且实际上并行处理多个请求。

\n\n

我们甚至还没有谈论“双通道”:-)

\n\n
\n\n

这里是维基百科关于DDR SDRAM组织的参考

\n\n
\n

PC3200 是 DDR SDRAM,设计为使用 DDR-400 芯片以 200 MHz 运行,
带宽为 3,200 MB/s。由于内存是双泵浦的,
这意味着 PC3200 内存的有效时钟速率为 400 MHz。

\n\n

1 GB PC3200 非 ECC 模块通常由 16 个 512 Mbit 芯片组成,
每侧 8 个(512 Mbits \xc3\x97 16 个芯片)/(8 位(每字节))= 1,024 MB。
组成 1 GB 内存模块的各个芯片通常
按 64 Mbit 组织,每个芯片的数据宽度为 8 位,
通常表示为 64M\xc3\x978。

\n\n

以这种方式制造的内存是低密度 RAM,通常
与任何指定 PC3200 DDR-400 内存的主板兼容。

\n
\n\n

内存控制器页面

\n\n
\n

总线宽度是可用于与存储单元通信的并行线的数量。
\n 内存控制器的总线宽度范围从早期系统中的 8 位到更复杂系统和视频卡中的 512 位(通常实现为并行运行的四个 64 位同步内存控制器,尽管有些控制器设计为在“组模式”,其中两个 64 位内存控制器可用于访问 128 位内存设备)。

\n
\n