好吧,我无法理解上面的冯诺依曼架构图 [引自维基百科],甚至不确定它是否正确。我有一些明显的疑问-
ALU 如何与内存通信?这不应该是CU的工作吗?
累加器如何成为 ALU 的一部分?
而且,蓄能器的工作到底是什么?
好吧,我无法理解上面的冯诺依曼架构图 [引自维基百科],甚至不确定它是否正确。我有一些明显的疑问-
ALU 如何与内存通信?这不应该是CU的工作吗?
累加器如何成为 ALU 的一部分?
而且,蓄能器的工作到底是什么?
从 IAS 计算机的图表(它应该与冯诺依曼所写的计算机 EDVAC 非常相似)来看,控制单元提供地址(寄存器 MAR)并通过 AS、R/W* 等信号控制总线事务。另一方面,ALU 连接到数据总线(寄存器 MDR):它从内存接收数据并将结果存储回来。该图还显示 ALU 接收指令并将它们转发给 CU(寄存器 IBR)。
例如,假设控制单元刚刚获取指令ADD $1234
。然后处理过程如下:
$1234
地址总线并启动读取周期回答您的问题:
最后,我相信这个讨论纯粹是历史性的。没有特别的理由更喜欢将 MDR 与 ALU 而不是 CU 相关联。只是冯诺依曼在写一篇关于 EDVAC 的论文时碰巧有这种想法。为了让故事更完整,维基百科说 EDVAC 实际上是由 Eckert 和 Mauchly 设计的,而冯诺依曼只做咨询和写作。
累加器是暂存算术运算结果的寄存器。它比直接使用主存储器要快。由于它存储算术结果,因此成为 ALU 的一部分是有意义的。
控制单元就像一个协调器,告诉其他组件做这做那。但它没有提供如何做到这一点的方法,所以这就是 ALU 需要与内存直接通信的原因。
好吧,ALU 在做某事时会更改标志寄存器,这就是它与内存连接的原因(标志不在 CU 中,也不在 ALU 中,因为这些是唯一显示的组件......)。累加器存储暂时等待 ALU 处理的数据。它直接连接到 ALU,因为该寄存器被认为支持它的计算,就像 ecx 寄存器与计数器电路连接一样。当然可以添加 ecx,edx 但速度较慢。选择源寄存器和目标寄存器非常困难,因为需要在 CPU 中实现额外的电路,并且最近(相对)存档了。该图像很旧(ssegvic 是对的!),因为它表明输入/输出只能使用累加器。在我看来,这更清楚:
ALU 连接在内部总线上,但这并不意味着它将与连接到它的所有东西进行通信。最后一件事:寻找更好的图像我注意到 ALU 并不总是与内存连接,在其中一些它只与 CU 连接。