architecture - 如何找出地址总线宽度有多宽?
问题描述
基本上,我找不到任何地方对此进行了彻底的解释,所以我想也许有人会有解释或我应该在哪里寻找答案的任何方向。
问题是:如果我有一个连接到 16384 位 RAM 的 CPU,数据总线宽度是 16 位,我应该如何找到地址总线的宽度?
或者从另一个角度来看:如果我有一个使用 10 位地址总线和 8 位数据总线连接到 RAM 的 CPU,我的 RAM 有多少位?
我搜索的第一个问题的答案只能得到 2^16 的答案,答案是 65535 ~ 64kB。如果这不正确,我很想听听解释。
解决方案
地址总线宽度决定了 CPU 可以访问多少个地址。它还决定了 RAM 的最大大小。
例如,如果你有一个宽度为 3 的地址总线,你可以2 ^ 3 = 8
从内存中访问地址,它们是:
Address0 -> 000
Address1 -> 001
Address2 -> 010
Address3 -> 011
Address4 -> 100
Address5 -> 101
Address6 -> 110
Address7 -> 111
因此,如果您的地址总线宽度为 10,则可以访问2 ^ 10 = 1024
地址,这相当于 1 KB 的 RAM 内存。
如果你有一个宽度为 32 的地址总线,你可以访问2 ^ 32 = 4294967296
, 地址,大约 4 GB 的 RAM 内存。
这就是您不能在 32 位系统上安装超过 4 GB 内存的原因 - 因为无法寻址额外内存(寄存器具有固定的 32 位大小)。
现在对于您的问题,如果您有一个大小为 的 RAM 内存,16384
大约为16KB
,您需要一个宽度为 的地址总线log2(16384) = 14
,以便对整个空间进行寻址。
您可以查看此reddit 线程以获取更多详细信息。
推荐阅读
- bash - 将文本添加到带有变量的特定行号
- verilog - 如何根据交叉覆盖点的总和限制交叉点箱?binsof是什么意思?
- python - Systemd 服务有时会在启动时崩溃
- qt - 在 Qt QML 中设置 VideoOutput 项
- r - 在 Shiny Dashboard 中将方程式包装在框中
- c# - 按类查找子窗口
- javascript - Next.js 与 FortAwesome 和 SSR
- c# - 发布动态模块内容时出错 Sitefinity
- javascript - 为什么会这样:使用扩展运算符更新状态中的数组元素
- qt - 如何摆脱 Qt Creator 中旧搜索文本中的黄色突出显示背景?