Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

计算机总线

复习

  • 程序与程序计数器:程序是指令序列,PC 保存下一条指令地址
  • 控制器:控制器按时序发出控制信号,协调各部件
  • 中央处理器:CPU 由运算器、寄存器和控制器构成,循环取指译码执行

TL;DR

  • 总线是一组由多个部件共享的通信线
  • 地址线说找谁,数据线传内容,控制线说要做什么
  • 同一时刻只能有获准的设备驱动共享线路

正文

  CPU 要连主存,接下来还要连键盘、屏幕和其他设备。可以算一笔账:如果每两个部件之间都拉一套专用线,那么设备一多,线路数量会以惊人的速度增长。这就像办公室里每个人之间都拉一条电话专线,很快就会乱成一团。

  更省事的办法,是修一条公共道路,让大家按规则轮流使用。这组共享线路,叫作总线(bus)。

一次读取怎样上路

  CPU 从存储器读取地址 20 时,会依次做这些事:

  1. 把 20 放到地址线上
  2. 在控制线上发出读信号
  3. 存储器识别出自己被选中,把地址 20 的内容放到数据线上
  4. CPU 在约定的时刻收下数据

  三类信号分工非常清楚:

  • 地址线:找哪个位置或设备
  • 数据线:实际搬运的比特
  • 控制线:读、写、完成等动作

  打个比方:寄快递时,地址线是收件地址,数据线是包裹里的东西,控制线则相当于“这是寄件还是签收”。三者配合,一次通信才算完整。

公路不能同时逆行

  数据线通常由多个设备共享。如果两个设备同时向线上输出不同的值,一个想拉高、一个想拉低,就会发生冲突,结果谁也说不清线上到底是几。

  因此,总线需要仲裁:谁获得本次使用权,谁才能驱动线路,其他设备暂时等待。这就像一条单车道,必须规定此刻由哪辆车行驶。共享的前提,是有人负责维持秩序。

给外界留一个座位

  有了总线,新设备只要遵守同一套通信规则,就能与 CPU 和存储器交换数据。总线的意义正在于此:它把“两两连线”变成了“面向一条公共规则”,让机器可以方便地扩展。

  可事情还没完。键盘和内存的“性格”完全不同——内存一次读一个字,键盘却可能几百毫秒才冒出一个按键,两者不能直接对话。下一章,我们在总线和设备之间加一个翻译者。

思考题 1

  为什么共享数据线上不能由两个设备同时输出?“同时读取”与“同时输出”有什么区别?

思考题 2

  总线减少了连线数量,但也带来了新的限制。它相比“两两专线”,牺牲了什么、换来了什么?

小结

知识点

  • 总线减少部件之间的专用连线
  • 地址、数据和控制信号各有职责
  • 仲裁决定谁能在当前时刻使用总线

参考资料

  1. Wikipedia(zh):总线:计算机各部件的共享通信通道
  2. Wikipedia(zh):总线仲裁:多个主设备竞争总线时的裁决机制

思考题答案(仅供参考)

思考题 1

  两个设备同时输出可能一个拉高、一个拉低,造成错误甚至电气冲突。而多个设备观察同一条稳定的数据线通常没问题——读取是“看”,输出是“改”。冲突只发生在多个来源同时试图决定线路取值的时候。

思考题 2

  牺牲的是并行能力:同一时刻总线上基本只能有一对设备通信,而专线可以让多对设备同时工作。换来的是简洁与可扩展性:连线大大减少,加一个设备只需接上总线、遵守规则即可。这是一种典型的“用共享换简洁”的权衡。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪