【问题标题】:Why byte-addressable memory and not 4-byte-addressable memory?为什么是字节可寻址存储器而不是 4 字节可寻址存储器?
【发布时间】:2009-10-19 04:24:18
【问题描述】:

为什么计算机有字节可寻址内存,而不是 4 字节可寻址内存(或 64 位的 8 字节可寻址内存)?是的,我看到它有时是如何有用的,它只是看起来不优雅和过度。优势是实质性的,还是真的只是因为传统?

【问题讨论】:

  • 基本上:为什么要将披萨切成 8 片?等等,你把披萨切成 16 片!?!?

标签: memory


【解决方案1】:

处理器实际上确实以 64 位的数量访问内存(x86 从 Pentium 左右就开始了); 64 位处理器通常具有 128 位总线。另外,在访问主内存时,您会出现填满整个高速缓存行的突发,这甚至是更大的内存单元。

只是寻址是基于字节的;这增加了一点开销,而且一点也不过度。

今天,网络协议绝对需要基于字节的寻址。使用基于字的寻址来实现 TCP 会很困难:如果您收到 17 个字节的内容,您希望 read() 返回什么?同样,更高的层是基于字节的:如果您得到像“GET / HTTP/1.0”这样的请求行以四个字节为单位呈现,那么 HTTP 将很难实现。您基本上必须使用移位操作等将单词拆分回字节(现在处理器在硬件中执行此操作,这要归功于基于字节的寻址)。

【讨论】:

  • 在字寻址的 CPU 上,网卡可以将每个网络八位字节存储到一个机器字中(反之亦然)。或者对于更可能将 4 个字节打包成 32 位字的情况(如 Alpha AXP,在早期版本中没有字节加载/字节存储指令),您的 TCP 示例将返回 17,这取决于软件使用移位处理最后一个单词中的填充。 (Alpha 有点可字节寻址,但它只支持对齐的 32 位或 64 位字加载/存储,并且对 I/O 地址空间进行了一些修改。tldp.org/HOWTO/Alpha-HOWTO-8.html
  • Alpha 后来添加了字节加载/存储,但它当然支持没有它们的 TCP(使用普通 PCI 网卡,AFAIK)。这使得它实际上是一个字寻址机器,但 64 位地址的低位被忽略(或要求为 0?)而不是不存在。
【解决方案2】:

很大程度上是历史原因——它已经成为 CPU 理解的标准。 Here 是一个很好的讨论:

通常,必须选择一个尺寸以 方便数据和 机器指令。 8 位(256 值)足以容纳 英语中的常见字符和一些 其他语言。 8位设计师 处理器大概发现是 能够编码 256 条常用指令 因为一个字节是“合理的 权衡”。当时,8位是 通常也足以编码其他 诸如像素颜色或 屏幕坐标。有一个字节大小 即 2 的幂也可能有 被认为是一个“更整洁”的设计。它 有趣的是,对于 例如,Marxer, E. (1974), Elements 数据处理,描述一个字节 作为 6 位和 8 位 取决于电脑是否 “八进制”或“十六进制”类型。

当然,早期使用其他尺寸。

【讨论】:

    【解决方案3】:

    我们需要确定一些尺寸以实现标准化。出于上述 Shane 提到的原因,人们选择了 8 位大小。从那时起,我们就陷入了字节可寻址存储器的困境。现在由于各种兼容性问题以及 OPCODES 仅是一个字节长的事实,无法更改。但是使用一个技巧,内存很容易被字寻址以获取/存储数据/地址!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2012-04-11
      • 2011-02-13
      相关资源
      最近更新 更多