0

以下是 DTS 文件的摘录。linux/arch/powerpc/boot/dts/[board_name].dts

memory {
    device_type = "memory";
    reg = <0x00000000 0x40000000>;  // 1GB at 0
};

嵌入式设备有 1 GB 的内存。

0x40000000=1073741824 十进制。

我获得 1 GB 的唯一方法是当我将 1073741824 计算为字节时。

这意味着 1073741824 字节 = 1GB。

那么这是否意味着 0x00000000 指向 RAM 中的一个数据字节?换句话说,RAM 中的每个字节都有一个地址。

为什么呢?我们读取一个 8 位的块是什么?为什么不说一句话?

4

2 回答 2

7

TL; DR:RAM 访问不是字节大小的块,即使每个字节在 RAM 中都是可独立寻址的(有自己的地址)。


第一个真正成功的微处理器,使“数字革命”成为主流,是8 位的,因此基本数据块是 8 位的遗产一直延续到今天。在具有 8 位 CPU 的第一代微处理器中,RAM 中的每个字节都是单独读取/写入的。

下一代是使用大于 8 位的内部 CPU 寄存器开发的。它们通常是 8 位(16/32/64)的倍数,因为这允许它们一次从 RAM 中读取多个完整字节。任何从 RAM 读取地址 X 的尝试都将导致获取 2/4/8 字节(在 16/32/64 位 CPU 上),即 RAM 中包含地址 X 的,并且仅保留适当的字节并将其存储到内部 CPU 寄存器中按要求。

接下来,随着 CPU 缓存的出现,RAM 开始以缓存线大小的块形式读取(和写入)。这些甚至比寄存器的大小还要大。由于数据局部性,这将减少从 RAM 读取数据的延迟。

有关详细信息,请查看Ulrich Drepper撰写的有关 CPU 和内存的综合文章。

于 2013-08-11T07:30:44.753 回答
0

您可能还注意到,内存地址(Arm DDR、PRU DDR、Shared PRU DDR 等)加上内存偏移量都是字节,而不是处理器指令。位推杆

于 2013-10-18T14:23:27.330 回答