计算机组成原理-总线仲裁(集中仲裁 分布仲裁)

总览

在这里插入图片描述

总线仲裁的基本概念

系统总线包含数据总线和地址总线和控制总线
设备首先通过控制总线获得总线的使用权,然后便可以用数据总线和地址总线进行传输,至于和哪个设备进行数据传输,这是由当前获得总线使用权的设备决定的
集中仲裁:一个决定谁先用
分布仲裁:一群决定谁先用
在这里插入图片描述

集中仲裁方式

总线控制器有可能集成在CPU或者桥接器中
总线控制器发出总线时钟信号
BG BR BS都是控制总线

链式查询

当设备1和设备n同时向总线控制部件通过BR发送信号后,总线控制部件通过BG向各个设备发送信号 ,此时信号先经过设备0,由于设备0没有请求,所以让信号通过,接着先通过设备1,此时设备1需要使用总线,所以截获信号,同时获得总线的使用权,此时BS被使用。那么总线控制器检测到BS信号,将不会将总线的使用权给设备n,尽管设备n仍然在通过BR请求总线的使用权,此时设备1比设备n优先使用
在这里插入图片描述
接着当设备1使用完总线后,撤销BS信号,那么此时由于设备n依然在通过BR发送信号,因为此时总线控制器没有检测到BS信号,所以发送BG,那么BG到达设备n,设备n开始使用总线
在这里插入图片描述
缺点中故障敏感就说如果优先级高的设备接受BG信号有故障,导致后面的都接收不到BG信号了,那么此时后面设备永远无法获得总线控制权了

计数器查询

设备地址线是一组线来表示设备地址,即是哪个设备
当设备1和设备n向总线控制部件通过BR发送信号时,此时总线控制部件的计数器从0开始递增,每次递增都会通过设备地址线向对应计数器的设备访问是否需要获得总线的使用,为0通过地址总线访问到设备0,发现其不需要使用,接着计数器+1,通过地址总线访问设备1,此时设备1需要使用总线
(访问设备其实是将计数器的值的信号发送到设备地址,设备地址线再发送给各个设备,设备再识别该信号是否是自己的设备编号,是,那么就做出反馈)
在这里插入图片描述

当设备1使用完总线后,撤销BS,此时由于总线控制器检测仍然有BR信号,将继续改变计数器的值去找到对应要使用总线的设备

链式敏感是优先级高的设备线坏了不会影响后面的设备使用
增加控制线数是因为设备地址线较多
同时由于设备需要识别设备地址传过来的信号以及将计数器的值转换为设备地址线的信号,所以比较复杂

独立请求方式

每个设备都和总线控制器部件有自己的BR和BG,同时都连在一根BS,当设备1和设备n同时向设备发送BR信号时,总线控制器部件里的排队器会处理BR信号,最后通过BG向某个设备发送总线允许的信号,此时对应设备获得总线允许信号后会向BS发送信号,此时总线控制器接受到BS,那么此时设备已获得总线的使用权,将撤销发送总线允许的信号。当设备使用完总线后,排队器再决定给下一个设备发送总线允许信号
在这里插入图片描述

排队器的实现比较自由所以控制优先次序也比较灵活

集中仲裁方式小结

在这里插入图片描述

分布仲裁方式

仲裁号反映优先级
在这里插入图片描述

小结

在这里插入图片描述

### 计算机组成原理中的总线仲裁 #### 总线仲裁概念 在多主设备共享同一组总线的情况下,为了防止多个主设备同时访问总线而造成冲突,必须有一种机制来决定哪个主设备可以占用总线并进行数据传输。这种决策过程称为总线仲裁[^1]。 #### 工作方式 总线仲裁的工作方式主要分为集中仲裁分布仲裁两种形式: - **集中仲裁** 集中仲裁由一个专门的硬件电路负责管理整个系统的总线请求。当某个模块想要获取总线使用权时会向该中心发出申请信号;一旦当前正在使用的设备释放了总线控制权,则此中央单元就会依据一定的算法挑选下一个获得授权的对象。 - **分布仲裁** 分布仲裁则是在每一个潜在的竞争者内部都设置有相应的逻辑判断部分,在它们之间通过特定协议相互协商谁应该得到下一次操作的机会。这种方式减少了单点故障的风险,并且能够更好地适应大规模复杂网络环境下的需求。 #### 实现方法 常见的几种具体实现如下所示: - **链式查询法( Daisy Chain )** 所有的请求节点按照一定顺序连接起来形成一条链条状结构。每当需要分配资源的时候就沿着这条线路依次询问各个成员是否有意使用直至找到第一个符合条件的回答为止。这种方法简单易行但是效率较低因为每次都要遍历一遍所有可能的选择项直到遇到合适的那个位置停止下来。 - **计数器定时查询法 (Counter-Timed Polling)** 利用循环寄存器记录上一轮被选中的站点编号作为起点开始新一轮扫描流程从而避免重复劳动提高处理速度。不过这也意味着如果某些频繁活跃的服务端口总是位于序列前端的话可能会导致其他处于末端的部分长期得不到服务机会进而影响整体性能表现。 - **独立请求法 (Independent Requests)** 每个竞争主体各自配备有一条直达裁决者的优先级指示线用于表达自身的意愿状态。这样做的好处是可以让那些具有更高重要性的任务更快捷地完成而不必等待前面低级别的事务结束之后再轮到自己。然而这同样增加了额外的成本开销以及设计难度由于涉及到更多物理连线布局上的考量因素。 ```c++ // C++伪代码展示简单的链式查询法实现思路 int bus_arbitration(int num_devices, bool* request_signals){ int i; for(i=0; i<num_devices ;i++){ if(request_signals[i]){ break; } } return i==num_devices ? -1 : i; // 如果没有发现任何请求返回-1表示失败 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看星猩的柴狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值