现代计算机是如何实现字节寻址的?
How is byte addressing implemented in modern computers?
我很难理解 32 位计算机字节寻址是如何实现的:
ram 本身的字节可寻址意味着第一个字节的地址为 0,第二个字节的地址为 1 等等?在这种情况下,读取一个 32 位字需要 4 个读取周期并浪费数据总线的宽度吗?
或者 ram 是否由 32 位字组成,意味着地址 0 指向前 4 个字节,地址 2 指向字节 5 到 8?在这种情况下,我希望 ram 接口使字节寻址成为可能(从 cpu 的角度来看)
RAM中的内存地址从第0地址开始,使用8位寄存器或32位寄存器容量的寄存器访问。基于这些寄存器,来自特定地址的值由 CPU 访问。如果您真的需要了解它是如何工作的,您将需要 运行 几个使用汇编语言的程序,通过使用寄存器和寄存器移动命令直接读取值来在物理内存中导航。
将 RAM 视为具有 N 个条目的 8 位宽结构。 N 通常是引用内存时引用的大小(256 MB - 256M 条目,2GB - 2G 条目等,B 代表字节)。当您访问此内存时,您可以寻址的最小单位是这些条目之一,即 8 位(1 字节)。由于您只能在字节级别访问它,因此我们将其称为字节可寻址内存。
现在来回答你关于访问这个内存的问题,我们不只是访问一个字节。大多数时候,内存访问是通过缓存发送的,缓存可以减少内存访问延迟。缓存以比字节或字更高的粒度存储数据,通常是字的倍数。这样做时,缓存会探索一个名为 "locality" 的 属性。局部性意味着,我们很有可能很快访问该数据项或附近的数据项。因此,不仅获取字节,而且获取所有相邻字节也不是浪费。将其视为对未来的投资,为您节省多次数据提取,否则您会这样做。
我很难理解 32 位计算机字节寻址是如何实现的:
ram 本身的字节可寻址意味着第一个字节的地址为 0,第二个字节的地址为 1 等等?在这种情况下,读取一个 32 位字需要 4 个读取周期并浪费数据总线的宽度吗?
或者 ram 是否由 32 位字组成,意味着地址 0 指向前 4 个字节,地址 2 指向字节 5 到 8?在这种情况下,我希望 ram 接口使字节寻址成为可能(从 cpu 的角度来看)
RAM中的内存地址从第0地址开始,使用8位寄存器或32位寄存器容量的寄存器访问。基于这些寄存器,来自特定地址的值由 CPU 访问。如果您真的需要了解它是如何工作的,您将需要 运行 几个使用汇编语言的程序,通过使用寄存器和寄存器移动命令直接读取值来在物理内存中导航。
将 RAM 视为具有 N 个条目的 8 位宽结构。 N 通常是引用内存时引用的大小(256 MB - 256M 条目,2GB - 2G 条目等,B 代表字节)。当您访问此内存时,您可以寻址的最小单位是这些条目之一,即 8 位(1 字节)。由于您只能在字节级别访问它,因此我们将其称为字节可寻址内存。
现在来回答你关于访问这个内存的问题,我们不只是访问一个字节。大多数时候,内存访问是通过缓存发送的,缓存可以减少内存访问延迟。缓存以比字节或字更高的粒度存储数据,通常是字的倍数。这样做时,缓存会探索一个名为 "locality" 的 属性。局部性意味着,我们很有可能很快访问该数据项或附近的数据项。因此,不仅获取字节,而且获取所有相邻字节也不是浪费。将其视为对未来的投资,为您节省多次数据提取,否则您会这样做。