本节摘要:总线同时只能服务一个主设备,仲裁机制决定"谁先说",同步机制保证"说的时候听懂了"——链式查询、计数查询、独立请求三种仲裁各有权力结构,全互锁握手是慢速设备的最稳拍档。
本章主线在支柱页里预告过一次总线事件的完整回合:申请、仲裁、传输、归还。本节把这个回合逐帧拆开。它同时是第 6 章 DMA 的预科——DMA 控制器抢总线,抢的正是这里的"使用权"。
总线上的角色分两种:能发起传输的主设备(CPU、DMA 控制器、智能外设)与只能应答的从设备(存储器、普通接口)。多个主设备盯着一条总线,仲裁机制就是分发言权的规则,按权力结构分三派:
链式查询:一根总线授权线串起所有设备,申请信号到达时,授权沿着链条逐个传递——排在前面的设备先接住,不需要就传给下一个。硬件省到极致,三根信号线搞定任意多设备;代价是优先级天生长老制,离总线控制器越近越横,后面的设备可能永远轮不上。适合便宜且设备地位固定的场合。
计数器定时查询:控制器维护一个计数器,设备号像报站一样逐个播报,哪个设备发现报到自己且自己正有申请,就举手接管。优先级可以通过计数起点轮转来均衡——从上次停下的地方继续数,各设备机会均等。信号线增加到约等于设备号的位宽,公平性与成本都在中档。
独立请求:每台设备一根申请线、一根授权线,仲裁器集中决策,可以执行任何优先级策略——固定优先级、轮转、甚至按任务动态加权。响应最快、控制最灵活,代价是信号线数随设备数线性膨胀。现代高性能系统几乎都走这条路。
| 方案 | 信号线数 | 响应速度 | 优先级灵活性 | 典型归宿 |
|---|---|---|---|---|
| 链式查询 | 3 根左右 | 慢,逐级传播 | 固定,按位置 | 教学与低成本系统 |
| 计数器查询 | 约等于设备号位宽 | 中 | 可轮转,中等灵活 | 中型背板系统 |
| 独立请求 | 每设备两根 | 快,一步到位 | 任意策略可编程 | 高性能与现代平台 |
仲裁解决发言权,同步解决"对方收到没有"。4.1 节把同步分为公共时钟与握手两路,握手按互锁程度分三档。不互锁:请求方说完不等确认就撤,快但裸奔,慢设备一不留神就漏接。半互锁:请求保持到收到应答为止,但应答方发完就撤——请求超时无解,悬案留了一半。全互锁:请求等应答、应答又等请求撤销,双方每一步都要看到对方的动作才算数,环环扣死。
用一次全互锁读传输看它如何运转:
全互锁对慢速设备最友好——应答要多慢有多慢,协议自动适配;代价是每次往返多几拍纯协议开销。速度确定性高的场合用同步时钟,速度参差的老设备阵用全互锁,这是工程上的默认分工。
背景:一块图像采集卡通过 DMA 连续搬运河图像数据,测试发现鼠标操作每逢采集便出现约一秒的卡顿。操作:抓总线占用记录,发现采集卡被配置成"块传输",一次申请就连续占用总线把整帧搬完;在块传输期间 CPU 与显示刷新全部得不到授权。结果:把传输模式改成"周期挪用"——每挪用一个总线周期只搬几个字节,搬完立刻归还,CPU 在间隙里照常工作;卡顿消失,采集吞吐仅降约百分之三。解读:仲裁机制回答"能不能抢",传输粒度决定"抢多久"——DMA 对系统响应的破坏不在抢而在赖着不走。变式:若图像是实时流、一帧晚到就作废,则应反向操作:把采集卡的优先级提到最高、允许它整块霸占,让鼠标去忍受卡顿——优先级与粒度的配置取决于谁的任务更不能等。
仲裁机制的好坏能用数字说话。链式查询里,授权信号逐级传播,每级经过的门延迟按几十纳秒计:十六个设备、每级三十纳秒,排最末的设备要等近半微秒才轮到——单次看似无伤,总线频繁换手时累积成肉眼可见的吞吐损失。独立请求一步到位,仲裁延迟固定在一两拍,代价是线数与仲裁逻辑的规模。"线换速度"这笔交易,在背板设计里天天发生。
优先级策略还藏着一道两难题。固定优先级简单可控,但低优先级设备可能被永久饿死——高优先级的应用一旦繁忙,最低级别的申请会无限期挂起。轮转优先级把上次的服务对象排到队尾,公平了,代价是延迟上界变宽:任何一次传输都可能被排在若干设备之后。实时系统常取折中:给紧急事件固定高优先级,其余设备轮转——饿死 prevention 与延迟确定性各让一步。这套思路与操作系统的调度器设计完全同源,学到这里你已经摸到了调度理论的硬件门槛。
补全仲裁的第三种形态:分布式仲裁。它没有中央裁判,规则写在每个申请者的硬件里——大家同时发言,总线上的线与结果让每个发言者实时比对自己的身份位,发现被压过就自动退场。CAN 的逐位仲裁正是这一派的当代代表,以太网早期的碰撞退避则是另一派草稿。三种形态摆在一起,仲裁的完整图谱就齐了:集中式管秩序,分布式管韧性,链式与计数式管成本——没有万能型,只有与场景的匹配度。
问:CPU 一定要参与仲裁吗?它自己也是主设备。 CPU 平时是默认的占用者,别的设备申请时要先向它"请假";DMA 授权后 CPU 挂起自己的总线操作,交出三态引脚。CPU 的特权来自地位,不来自机制——机制面前人人平等,这句总线上的法律条文,第 6 章 DMA 会再次引用。
问:同步总线为什么还需要握手? 公共时钟解决"何时采样",握手解决"对方是否就绪"。高速总线上两者常并存:时钟定节拍,握手信号处理等待与异常。纯同步的系统对器件速度"一刀切",够快但不够宽容——工程里最贵的就是"一刀切"三个字。
总线的秩序讲完了。下一章登场的是总线上最特殊的乘客——不打招呼就来的中断信号,以及接住它的整套机制。