内存模块具有 128 位宽的数据总线。如果模块拥有 4GB(2^31 字节),有多少地址位是冗余的?
我相信有某种公式(如果不是一个逻辑过程的公式),我们可以使用它来找出地址总线,然后从那里我们可以找出地址位的冗余数量。我对这些事物之间的关系没有基本概念:地址总线、总线宽度、数据总线等。
内存模块具有 128 位宽的数据总线。如果模块拥有 4GB(2^31 字节),有多少地址位是冗余的?
我相信有某种公式(如果不是一个逻辑过程的公式),我们可以使用它来找出地址总线,然后从那里我们可以找出地址位的冗余数量。我对这些事物之间的关系没有基本概念:地址总线、总线宽度、数据总线等。
这些并行总线之一上的每条线代表一位信息。这就是为什么构成总线的线路数也称为其宽度(以位为单位)的原因。
地址总线用于向内存模块发送要读取或写入的地址。因为每条线只能“传输”一位,多条线并行使用。
例如,为了能够寻址内存中的 256 个不同位置,(至少)地址总线需要 8 条线(因为 2^8 = 256)。因此,这 40 亿个存储单元在地址总线上需要 32 条总线,地址总线为 32 位宽。
请注意,我在上面使用了“内存位置”一词,因为发送到内存模块的地址可能指的是字节或其他一些存储单元,例如“字”(2 个字节)或“双字”(4 个字节)或者是其他东西。
可以直接寻址的最小存储单元有多大取决于内存模块及其内部组织。
数据总线的总线宽度为 128 位的内存模块可以同时发送或接收 128 位 = 16 字节。对于这种内存,最小的可寻址单元可能是 128 位,因此只能以 16 字节的块访问它,这些块通常以该块大小的倍数对齐。
在这种情况下,第一个 16 字节块将由地址 0 寻址,并将占用内存的前 16 个字节。然后在地址 1 将是下一个块,从字节 #16 开始。地址 2 从字节 #32 开始提供 16 个字节,依此类推。
因此,如果地址总线上的每个地址同时用于寻址 16 个字节,与按字节寻址相比,访问整个内存所需的地址将更少。
为了能够单独寻址这 4GB 的每个字节,地址总线需要为 32 位宽(2^32 字节= 4GB)。但是,如果只有 16 字节的整个块可以单独作为地址,则只需要 (2^32)/16 个不同的地址来寻址整个内存。16 = 2^4,所以 (2^32)/(2^4) = 2^28。-> 需要 28 位来寻址每个 16 字节(=128 位)的整个块,并且地址总线的宽度可能会减少到 28 行。