- 总线干嘛的?说白了就是用来传输数据的,在计算机的各个部件之间。比如我主存里存的数据CPU要用,需要一条线路传过去吧,CPU内部各个寄存器之间、寄存器与ALU、CU与各个部件之间等等等等很多地方,总之就是部件之间需要传输数据
- 传输的数据分为三种,对应着三种功能的总线
- 那么为何称为“总”线?那是因为大部分情况下,我们没办法把任意两个部件之间都连起来,因为部件的数量太多太多了
- 所以我们只用一根总线来传输, 那么面临的第一个问题就是,怎么区分数据、地址、控制这三类呢??
- 确实对于数据和地址有一种技术叫做总线复用,因为计算机是在时序的控制下工作,所以一根总线上的数据在不同的时间段内被规定为“数据”还是“地址”。对于控制信号还没有这样做的,,,
- 还是分三根总线来吧
- 那么又有一个问题,只有三根线的话,虽然可以区分是数据还是地址还是控制信号,但是对于众多的部件来说,它如何知道当前总线上传输的数据是不是给它的?因为一条数据线连接了所有的部件,A给B发送数据的时候上面的数据是给B的,对于其他部件是没用的、是错误的数据。
- 所以说,就需要控制信号来控制嘛。A发送数据的时候,控制信号就只让B从数据总线接收数据,其他部件是不接收的。
- 突然想到一个比喻,只是用来解释总线的工作原理,并非历史发展
- 总线大概就像自来水管,自来水厂没办法给所有的家庭都铺设一条专门的管道,所以就只铺设一条管道连接起所有的家庭。每个家庭都有自己家庭的工作用来给社会做贡献,哪家需要用水,就可以随时打开自来水管取水。
- 后来自来水厂买下了加油站,但是不想再铺设更多的线路,所以就仍旧用一根管道,但是告诉所有的家庭,只有在你收到了自来水的信号,从管道上才能取出你需要的自来水,收到的是汽油信号,取出来的就是汽油。信号的传输也需要一条线,所以就铺设了一条电线来传输信号
- 事实证明这做是明智的,因为自来水厂经济越来越发达,逐渐买下了食用油厂、煤气厂、盐厂、汉堡厂等等等等,但是依旧使用一根管道就可以服务所有的家庭了,只不过需要传输的控制信号多一点,这比多铺设管道要省钱多了
- 后来发现家庭之间的交换也比较频繁,既然有这么方便的总管道为什么不用呢?于是大家都在控制信号的控制下,被告知可以往管道上放东西的家庭就可以往管道上放东西,然后再通知谁来取东西。这些管道就变成了双向的通行,可以取也可以放。
- 所以总线的一个很重要的特征就是,对挂在上面的部件是共享的。
- 如果两个家庭之间达成私下交换的协议,或一个家庭和自来水厂有关系可以让人把东西专门开车送来,那相当于专门的通信通道,不能称之为总线
- 对应到计算机上,这种总线就是“以分时形式共享一组电导线”来实现。
- 废话太多了…
总线组成与特性
组成
- 传输线、接口和总线控制器
- 除了传输数据、地址和控制信号的信息线外,还有电源线和接地线来连接到每个部件,也有可能会有备用线来预防总线出故障
- 接口由三态门和缓冲寄存器组成。三态门可以决定当前总线与这个部件的联通状态,三态门的输出可以是1、0和高阻抗三个状态,多一个EO使能来控制
- 由于总线的共享性,所以需要一个总线控制器来控制总线的使用和分配,
特性
功能特性
电气特性
- 也就是传输方向了啦
- 单向总线:只能一个方向传输数据。地址线单向就够了=、=
- 双向总线:全双工和半双工
- 全双工:同时可以双向的传输数据
- 半双工:一个时刻只能按照一个方向来传输数据
- 别问我怎么实现的,我不知道。我猜应该是在数字电路这门课上,,,,,,搞得我好想学
时间特性
- 按照时序来规定了每根传输线上的信号在什么时间才是有效的
- 不在指定的时间内读数据的话,大概是(没错我又开始猜了),要么读不到、要么读错掉
总线设计与实现
- 说到这还只是单总线的结构,即所有的模块共用一个总线。

- 但是
- 一个总线上接入的模块是有限的,太多的模块会让总线的负荷太高,降低通信效率
- 每个模块的工作频率也可看作速度不尽相同,比如CPU明显要快于I/O接口,这样在工作慢的模块占用总线的时候,工作快的模块干完了获要使用总线,但是总线被慢模块占用所以不得不等待。
- 所以出现了带局部总线的多总线结构
- 然各个部件之间的工作频率也不相同,这就很难协调,结果就是效率降低,于是就出现了层次总线结构,来处理部件之间的协调性
- 进一步还有
- 带局部总线的层次总线结构
- 使用桥接器连接的多总线结构
- 具有更强容错能力的多重总线结构
总线控制
总线仲裁
通信控制
通信需要发送方和接收方的配合,发送数据叫“源部件”,接受数据叫“目的部件”
- 同步通信
- 即根据时序的控制
- 源部件在固定的时间内发送数据并保持信号,到点就撤,不确认目的部件是否收到了数据
- 目的部件在固定的时间读取数据,不管能不能读到数据(总线上是否有数据),也不管读到的数据对不对(读到的是源部件发送的数据还是其他的杂乱数据)
- 时序哪里来?可以由中央时标来控制,也可以每个部件自带时标,但是需要和中央时标同步,就好比我们手机、电脑上的时间,每次打开网络就会在网络上和标准时间同步
- 如8086微处理器采用同步通信读取存储器的数据的时候
- T1CPU发送访存地址
- T2CPU发送读信号
- T3主存把数据放上去
- T4CPU读取数据
- 异步通信
- 就是需要双方互相确认操作,这种确认是通过“握手”协议来实现,种类很多但大致分成单边控制和双边控制
- 单边控制
- 再分就是,目的部件控制还是源部件控制
- 目的控制
- 目的部件先发送数据请求,经过 t 时间的延迟到达源部件,源部件把数据放到数据总线,经过 t 时间的延迟数据到达目的部件

- 图
- 源部件先发送数据,隔 t1 时间再发送数据就绪信号(防止数据就绪信号比数据更早到达目的部件),目的部件收到数据就绪信号就读取数据总线上的数据。两次数据的发送间隔 t2 时间,这短时间内完成 源部件 向数据缓冲器装载数据,总线仲裁逻辑完成仲裁。
- 双边控制
- 双方都参与到确认中,但依然分主次,且进一步分为“非互锁”、“半互锁”、“全互锁”
- 书上只讲了以源部件为主……我也没再查更多的资料……
- 只看图吧。应该很容易看懂
- 半同步通信
- 两种极端的方式优点明显,但是缺点也明显
- 人们就很喜欢综合几种极端的方法来实现更好的平衡
- 宏观上按照同步通信来组织,局部上来用异步应答的方式
总线性能评价
- 位宽
- 总线一次传输数据的位数,也就是总线的线数,一根线只能穿1位(我猜是线上有电还是没电。没电其实说不太过去,因为我一直看到的都是“高电平”还是“低电平”。)
- 工作时钟频率
- 即控制总线的时钟信号的频率,单位一般是HZ,即一秒钟被分成了多少个节拍
- KHZ = 1000HZ
- MHZ = 1000KHZ
- ……
- 单个数据的传送周期
- 数据传输的方式分为正常传输和突发传输
- 正常传输
- 突发传输
- 一个时钟周期即为一个节拍的长度
- 负载能力
- 总线上可挂在的部件的最大数目,其实一般不会太大,太大在仲裁的时候会有比较久的延迟,而且总线本身也负载不起
- 数据传输速率
- 总线一秒可稳定传送数据的字节数
- 单位为KB/s、MB/s
- 最大数据传输速率又称为带宽
- 总线带宽 = 总线位宽 * 总线工作频率 / 8