以下是 DTS 文件的摘录。
linux/arch/powerpc/boot/dts/[板名].dts
memory {
device_type = "memory";
reg = <0x00000000 0x40000000>; // 1GB at 0
};
嵌入式设备具有 1 GB 内存。
0x40000000=1073741824(十进制)。
我获得 1 GB 的唯一方法是当我将 1073741824 计算为字节时。
这意味着 1073741824 字节 = 1GB。
那么这是否意味着0x00000000指向RAM中的一个字节数据呢?
换句话说,RAM 中的每个字节都有一个地址。
为什么会这样?我们读取 8 位块的内容是什么?为什么不说一句话?
TL;DR:RAM 访问不是字节大小的块,即使每个字节在 RAM 中都是独立可寻址的(具有其自己的地址)。
第一个真正成功的微处理器,将“数字革命”带入主流,是8bit http://en.wikipedia.org/wiki/8-bit#Important_8-bit_CPUs因此,8 位基本数据块的传统一直延续到今天。在具有 8 位 CPU 的第一代微处理器中,RAM 中的每个字节都是单独读取/写入的。
下一代是使用大于 8 位的内部 CPU 寄存器开发的。它们通常是 8 位 (16/32/64) 的倍数,因为这允许它们一次从 RAM 读取多个完整字节。任何从 RAM 读取地址 X 的尝试都会导致获取 2/4/8 字节(在 16/32/64 位 CPU 上),即word在包含地址 X 的 RAM 中,仅保留适当的字节并根据需要将其存储到内部 CPU 寄存器中。
接下来,随着 CPU 缓存的出现,RAM 开始以块的形式读取(和写入)缓存行尺寸。这些甚至比寄存器的大小还要大。这将减少由于数据局部性而从 RAM 读取数据的延迟。
有关详细信息,请查看此综合关于CPU和内存的文章 http://www.akkadia.org/drepper/cpumemory.pdf作者:乌尔里希·德雷珀。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)