计算机总线
复习
- 程序与程序计数器:程序是指令序列,PC 保存下一条指令地址
- 控制器:控制器按时序发出控制信号,协调各部件
- 中央处理器:CPU 由运算器、寄存器和控制器构成,循环取指译码执行
TL;DR
- 总线是一组由多个部件共享的通信线
- 地址线说找谁,数据线传内容,控制线说要做什么
- 同一时刻只能有获准的设备驱动共享线路
正文
CPU 要连主存,接下来还要连键盘、屏幕和其他设备。可以算一笔账:如果每两个部件之间都拉一套专用线,那么设备一多,线路数量会以惊人的速度增长。这就像办公室里每个人之间都拉一条电话专线,很快就会乱成一团。
更省事的办法,是修一条公共道路,让大家按规则轮流使用。这组共享线路,叫作总线(bus)。
一次读取怎样上路
CPU 从存储器读取地址 20 时,会依次做这些事:
- 把 20 放到地址线上
- 在控制线上发出读信号
- 存储器识别出自己被选中,把地址 20 的内容放到数据线上
- CPU 在约定的时刻收下数据
三类信号分工非常清楚:
- 地址线:找哪个位置或设备
- 数据线:实际搬运的比特
- 控制线:读、写、完成等动作
打个比方:寄快递时,地址线是收件地址,数据线是包裹里的东西,控制线则相当于“这是寄件还是签收”。三者配合,一次通信才算完整。
公路不能同时逆行
数据线通常由多个设备共享。如果两个设备同时向线上输出不同的值,一个想拉高、一个想拉低,就会发生冲突,结果谁也说不清线上到底是几。
因此,总线需要仲裁:谁获得本次使用权,谁才能驱动线路,其他设备暂时等待。这就像一条单车道,必须规定此刻由哪辆车行驶。共享的前提,是有人负责维持秩序。
给外界留一个座位
有了总线,新设备只要遵守同一套通信规则,就能与 CPU 和存储器交换数据。总线的意义正在于此:它把“两两连线”变成了“面向一条公共规则”,让机器可以方便地扩展。
可事情还没完。键盘和内存的“性格”完全不同——内存一次读一个字,键盘却可能几百毫秒才冒出一个按键,两者不能直接对话。下一章,我们在总线和设备之间加一个翻译者。
思考题 1
为什么共享数据线上不能由两个设备同时输出?“同时读取”与“同时输出”有什么区别?
思考题 2
总线减少了连线数量,但也带来了新的限制。它相比“两两专线”,牺牲了什么、换来了什么?
小结
知识点
- 总线减少部件之间的专用连线
- 地址、数据和控制信号各有职责
- 仲裁决定谁能在当前时刻使用总线
参考资料
- Wikipedia(zh):总线:计算机各部件的共享通信通道
- Wikipedia(zh):总线仲裁:多个主设备竞争总线时的裁决机制
思考题答案(仅供参考)
思考题 1
两个设备同时输出可能一个拉高、一个拉低,造成错误甚至电气冲突。而多个设备观察同一条稳定的数据线通常没问题——读取是“看”,输出是“改”。冲突只发生在多个来源同时试图决定线路取值的时候。
思考题 2
牺牲的是并行能力:同一时刻总线上基本只能有一对设备通信,而专线可以让多对设备同时工作。换来的是简洁与可扩展性:连线大大减少,加一个设备只需接上总线、遵守规则即可。这是一种典型的“用共享换简洁”的权衡。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪