总线上的设备一般分为总线主设备和总线从设备。总线主设备是指具有控制总线能力的模块,通常是CPU或以CPU为中心的逻辑模块,在获得总线控制权之后能启动数据信息的传输;与之相对应的总线从设备,是指能够对总线上的数据请求做出响应,但本身不具备总线控制能力的模块。在早期的计算机系统中,一条总线上只有一个主设备,总线一直由它占用,技术简单,实现也比较容易。
随着应用的发展,主要是工业控制、科学计算的需求,多个主设备共享总线的情况越来越多,这对总线技术提出了新的要求。根据这类系统的特点,需要解决各个主设备之间资源争用等问题,这使得总线的复杂性大为增加。
总线仲裁就是在多个总线主设备的环境中提出来的。在多处理机系统中,每个处理机都可以作为总线主设备,都要共享资源,它们都必须通过系统总线才能访问其它资源,总线也可视为是一种重要的公共资源。由于每个处理机都会随机地提出对总线使用的要求,这样就可能发生总线竞争现象。为了防止多个处理机同时控制总线,就要在总线上设立一个处理上述总线竞争的机构,按优先级次序,合理地分配资源,这就是总线仲裁问题。用硬件来实现总线分配的逻辑电路称为总线仲裁器(Bus Arbiter)。它的任务是响应总线请求,通过对分配过程的正确控制,达到最佳使用总线。
对总线仲裁问题的解决是以优先级(又称优先权)的概念为基础的,通常有三种总线分配的优先级技术──串联、并联和循环。
1. 串联优先级判别法。
图7-1串联优先级判别法的示意图
图7-1中有Ⅰ、Ⅱ、…、N等N个模块,都可作为总线主设备,各个模块中的“请求”输出端采用集电极(漏极)开路门,“请求”端用“线或”方式接到仲裁器“请求”输入端,每个模块的“忙”端同仲裁器的“总线忙”状态线相连,这是一个输入输出双向信号线。当一个模块占有总线控制权时,该模块的“忙”信号端成为输出端,向系统的“忙”状态线送出有效信号(例如低电平)。其它模块的“忙”信号端全部作为输入端工作,检测“忙”线上状态。一个模块若要提出总线“请求”,其必要条件是选检测到“忙”信号输入端处于无效状态。与此相应,仲裁器接受总线请求输入的条件,也是“忙”线处于无效状态。
进一步可以规定仲裁器输出“允许”信号的条件首先是“忙”线无效,表示总线没有被任一模块占用;其次才是有模块提出了总线请求。“允许”信号在链接的模块之间传输,直到提出总线“请求”的那个模块为止。这里用“允许”信号的边沿触发,它把共享总线的各模块要使用总线时,便发生信号禁止后面的部件使用总线。通过这种方式,就确定了请求总线各模块中优先级最高的模块。显然,在这种方式中,当优先级高的模块频繁请求时,优先级别低的模块可能很长时间都无法获得总线。一旦有模块占用总线后,“允许”信号就不再存在。
2. 并联优先级别判别法。
图7-2并联优先级判别法的示意图
图7-2中有N个模块,都可作为总线主设备,每个模块都有总线“请求”线和总线“允许”线,模块之间是独立的,没有任何控制关系。这些信号接到总线优先控制器(仲裁器),任一模块使用总线,都要通过“请求”线向仲裁器发出“请求”信号。仲裁器一般由一个优先级编码器和一个译码器组成。该电路接到某个模块或多个模块发来的请求信号后,首先优先级编码器进行编码,然后由译码器产生相应的输出信号,发往请求总线模块中优先级最高的模块,并把“允许”信号送给该模块。被选中的模块撤销总线“请求”信号,输出总线“忙”信号,通知其余模块,总线已经占用。在一个模块占用总线的传输结束以后,就把总线“忙”信号撤销,仲裁器也撤销“允许”信号。根据各请求输入的情况,仲裁器重新分配总线控制权。
3.循环优先级判别法。
循环优先级判别方法类似于并联优先级判别方法,只是其中的优先级是动态分配的,原来的优先级编码器由一个更为复杂的电路代替,该电路把占用总线的优先级在发出总线请求的那些模块之间循环移动,从而使每个总线模块使用总线的机会相同。 |