第一章内容传送门:计算机组成原理学习-哈工大《计算机组成原理》第一章
第二章内容传送门:计算机组成原理学习-哈工大《计算机组成原理》第二章
一.总线的基本概念
(一).本节课问题
1.为什么要用总线
计算机的部件是非常庞大的,只有把这些部件连接在一起才能够组成一个完整的计算机硬件系统,才能够协调进行工作,怎么样才能将这些部件连接起来,比较老的一种方法采用分散连接
的方法,需要通信的二个部件我们就用线把它们连接起来,几百个部件需要二二进行连接,二个部件之间连接的线是比较多的,更何况这几百个部件连接的线了,将这么庞大的线全部放到电路板上成本非常高,制作难度非常大,各个部件都要和CPU进行通信占用的空间比较大,复合效果也较差,这个时候为了解决这些问题,推出了总线
的方式,来解决这些问题。
2.什么是总线
答:总线是连接各个部件的信息传输线,是各个部件共享的传输介质。
#### 3.总线上信息的传送串行传输:
在串行传输中,使用一根数据线传输数据,一次传输1个比特,多个比特需要一个接一个依次传输。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/7af2bbca2490422388b29461f026cf4c.png)
并行传输:
在并行传输中,使用多根并行的数据线一次同时传输多个比特。
二 .总线结构的计算机举例
(一).单总线结构
CPU与主存之间、CPU与I/O设备之间、I/O设备与主存之间、
各种设备之间都通过系统总线交换信息
优点:
结构简单,成本低,易于接入新的设备;
缺点:
带宽低、负载重,多个部件只能争用唯一的总线,且不支持并发传送操作。
(二).双总线结构
1.以运算器为中心(面向CPU)的双总线结构
M总线是CPU与主存储器之间进行信息交换的公共通路,称为存储总线。I/O总线是CPU与I/O设备之间进行信息交换的公共通路。
外部设备通过连接在I/O总线上的接口电路与CPU交换信息,如果要和主存进行通信的话,CPU再通过M总线对主存进行通信
。
优点:
由于在CPU与主存储器之间、CPU与I/O设备之间分别设置了总线,从而提高了微机系统信息传送的速率和效率
缺点:
由于外部设备与主存储器之间没有直接的通路,它们之间的信息交换必须通过cpu才能进行中转,从而降低了cpu的工作效率(或增加了cpu的占用率,一般来说,外设工作时要求cpu干预越少越好。cpu干预越少,这个设备的cpu占用率就越低,说明设备的智能化程度越高)
2.以存储器为中心(面向存储器)的双总线结构
CPU和主存之间通过存储总线进行通信,外部设备I/O接口,主存,CPU也可以通过系统总线进行通信,在前面以运算器为核心的双总线结构中由于主存和外部I/O接口是无法直接进行通信的,这里
主存就可以通过系统总线的方式直接与I/O接口进行通信
,但是由于技术的原因,还是采用分时工作。
三 .总线的分类
分类:
- 片内总线
- 系统总线
- 通信总线
(一).片内总线,系统总线
有出(CPU输出):
存储器读,存储器写,总线允许,中断确认有入(CPU输入):
中断输入,总线请求
(二).通信总线
用于计算机系统之间
和计算机系统与其他系统
(如控制仪表,移动通信等)之间的通信,可分为串行通信总线,并行通信总线。
四 .总线特性及性能指标
(一).总线物理实现
(二).总线的特性
(三).总线的性能指标
(四) .总线标准
五 .总线结构
(一).双总线又一形式
将CPU,主存和I/O分别独立出来
即CPU和主存通过主存总线进行相互通信,I/O接口和外部设备通过I/O总线进行通信,主存总线和I/O总线之间通过通道(具有特殊功能的处理器,由通道对I/O统一管理,由操作系统进行编写)进行连接
,这样就可以实现主存总线上的设备和I/O总线上的设备相互进行通信。
(二).三总线
1.三总线结构
在以存储器为核心的双总线结构是CPU与主存通过主存总线进行通信,CPU,主存与I/O接口三者通过系统总线连接,三总线结构将系统总线部分进一步进行了细分,即
CPU通过I/O总线对I/O接口进行通信,主存与I/O设备通过DMA(直接存储器访问)总线与I/O接口进行通信
,这样高速外部I/O接口直接通过DMA总线进行通信,低速I/O接口还是通过I/O总线进行通信。
2.三总线结构的又一形式
主存与CPU之间访问速度是不匹配的,为了解决这个问题在CPU与主存之间增加一个Cache,对主存里面的数据进行缓冲,三总线结构的又一形式就是CPU通过局部总线对Cache进行访问,主存通过系统总线和Cache进行通信,局部I/O控制器可以连接一些局部的高速I/O设备,系统总线通过扩展总线接口与扩展总线上的设备进行通信,解决一些I/O设备的扩展问题,但是
扩展总线上的速度是各异的这样会影响外部设备的访问的速度
。
(三).四总线
CPU通过局部总线与Cache/桥进行连接,主存通过系统总线与Cache/桥进行连接,这和前面的三总线方式一致,
四总线的不同点在于高速设备连接高速总线,低速设备连接扩展总线接口,这种方式的特点就是高速设备和低速设备进行分类组织,高速设备用高速总线,低速设备用低速总线
,这就解决了前面三总线的问题.
(四).总线结构举例
1.传统微机总线结构
CPU通过系统总线与主存储器(主存控制器,存储器)进行连接,访问是非常快的,标准总线控制器扩展一条I/O总线,连接外部设备,在下图右下部分有一个 SCSI II控制器是用来扩展外部设备的。
2.VL-BUS局部总线结构
和前面的传统微机一样VL-BUS局部总线的CPU与主存储器(主存控制器,存储器)通过系统总线进行连接,系统总线扩展了一条VL-BUS的高速总线,连接外部高速设备,标准总线控制器扩展了一条ISA,EISA..的低速总线用于连接低速总线。
VL-BUS是高速总线
ISA,EISA是低速总线
3.PCI总线结构
和前面VL-BUS局部总线很类似,不同在于系统总线下面有一个PCI桥,通过PCI桥扩展一条PCI总线,该总线是一条高速总线,连接高速设备,同样的标准总线控制器扩展低速总线ISA,EISA..用于连接低速外部设备。
PCI总线是高速总线
ISA,EISA是低速总线
4.多层PCL总线结构
前面PCI总线上面连接的设备比较多的话,总线的驱动能力就不够,对于这个问题我们可以通过PCI桥进行扩展,通过桥电路实现了总线的驱动能力的提高和总线的扩展,下图桥0和桥4就是一级桥,在一级桥下面我们可以连接各种设备,也可以在一级桥下面进一步进行扩展即第二级桥..。
六.总线的控制
(一).总线判优控制
为什么要对总线进行判优控制:
总线(bus)上连接着运算器,控制器,存储器和I/O设备,而总线在同一时刻只有一方能够使用,那么如何分配优先级呢?这就涉及到总线的判优控制。
主设备和从设备:主设备(模块):
对总线有控制权从设备(模块):
响应从主设备发来的总线命令
总线判优抗旨方法分为二种:
集中式:
链式查询,计数器定时查询,独立请求方式分布式
(二).集中式判优控制
1.链式查询
优点:
结构简单,增删设备容易,优先级算法非常简单(离总线控制部件最近的设备具有更高的优先级)缺点:
对电路故障敏感,优先级低的设备很难得到请求,由于要一直向下查询速度较慢
I/O接口1与...I/O接口n发起请求(BR:总线请求)
总线控制部件从I/O接口O开始进行扫描(BG:总线同意)
扫到I/O接口1的请求,总线同意I/O接口的请求,将控制权交给I/O接口1
I/O接口1发送BS请求到总线控制部件,表示总线正在使用总线中(总线忙),I/O接口1获得了总线的控制权
2.计数器定时查询
优点:
设备的优先次序可以改变,对电路故障没有链式查询敏感
缺点:
按顺序进行查找的方式速度还是比较慢
关于计数器:
计数可以从0开始,一旦设备优先次序被固定,设备的优先级就按0,1,···,n的顺序降序排列。计数也可以从上一次计数的结尾重新开始,形成一个循环。这样设备的优先级相等,计数器的初始值还可以由程序设置,因此优先次序可以改变。
设备线:
宽度和设备数有关,对所有设备进行编码,如果有n个设备的话,对n个设备进行二进制编码,那么这些设备至少需要以2为底log^n^ 向上取整怎么多条线,总需要的线为以2为底log^n^ 向上取整+2。
I/O接口设备发起请求
计算器开始工作,计数器显示0,设备地址发出信号查询I/O接口0是否发起请求
I/O接口0没有发起请求,计数器加1,计数器显示1,设备地址查询I/O接口1是否发起请求
I/O接口1发起了请求,将控制权交给I/O接口1,I/O接口1发送BS到总线控制部件,获得总线的控制权
3.独立请求方式
每个设备都增加了二条线BR(总线请求),BG(总线同意/有效),优先级的排队通过总线控制器部件内部有一个排队器进行控制,优先级非常灵活(通过程序改变)
优点:
响应请求的速度较快,优先级控制灵活
缺点:
控制线数量多,总线控制复杂,如果有n个设备,就需要2n条控制线,总共需要2n+2总线
I/O接口设备对应的BR发起请求
排队器分配优先级,优先级高的,并发送了请求的设备获得总线控制权
(三).总线通信控制
1.总线通信控制的目的
目的:
解决通信双方协调配合问题
2.总线传输周期
申请分配阶段
-寻址阶段
-传数阶段
-结束阶段
- 申请分配阶段:
主模块申请
,总线仲裁决定 - 寻址阶段:主模块向从模块
给出地址
和命令
- 传数阶段:主模块和从模块
交换数据
- 结束阶段:主模块
撤销有关信息
3.总线通信的四种方式
- 同步通信
- 异步通信
- 半同步通信
- 分离式通信
(1) 同步通信
由统一时标
控制数据传送,意思就是在固定的时间点上要给出固定的操作
。
以同步式数据输入举例:
在T1时钟的上升沿之前,要给出地址的信号,这里地址的信号由CPU给出
在T2周期的上升沿之前,CPU发出读信号,告诉从设备读入数据
第T3周期上升沿达到之前从设备必须要给出数据信号,通过数据总线给出
第T4周期上升沿之前数据信号,控制信号可以撤销啦
第T4周期结束之后地址信号也撤销了
以同步式数据输出举例:
和前面的操作比较类似唯一不同在于写命令在数据之后,这个也容易想通,肯定是要先向主设备给出数据了,主设备才可以把数据写入到从设备中去。
t1周期上升沿之前,主设备给出地址信号
t1周期下降沿之前,主设备给出数据信号
t2周期上升沿之前,主设备给出写命令,向从设备进行数据写入
t4周期的上升沿之前,从设备写数据操作
t4周期上升沿,控制信号,数据信号撤销
t4周期结束后,地址信号也撤销了
(2) 异步通信
采用应答方式(请求和响应),没有公共时钟标准。
不互锁方式:
主设备发送请求,从设备接受到通信请求后进行应答,主设备撤销请求信号,从设备撤销应答信号,在这个过程当中,不管是否接受到应答信号,在一段时间后就会撤销,从设备也不管是否有接受到这个应答信号,过一段时间也会进行撤销,这方式是不可靠的,因为主从设备的通信是无法得到保证的。
半互锁方式:
主设备发送请求,从设备接受到通信请求后发出应答信号,主设备收到应答信号之后撤销请求信号,如果收不到应答信号会一致保持,这样有可能造成请求信号一直保持高电平
全互锁方式:
主设备发送请求,从设备接受到通信请求后发出应答信号,主设备收到应答信号之后主设备撤销请求信号,同样只有主设备的请求信息撤销以后,从设备才会撤销自己的应答信号。
注意如果通信过程中出现错误,不互锁,半互锁,全互锁中的主设备将会出现发送请求信息。
(3) 半同步通信(同步,异步的结合)
WAIT信号为高电平
就可以发送信息
举例CPU从某个模块读入数据:
在t1周期上升沿之前,CPU发出地址
t2周期上升沿之前,CPU发出读命令
t3周期之前,插入WAIT信号,如果数据没有准备好,WAIT一直为低电平(一直插入WAIT),直到数据准备好之后,WAIT置为高电平,进入下一步操作
从设备数据准备好之后,WAIT置为高电平,将数据放在数据总线上,CPU读取数据
都操作完之后,先是数据信号,控制信号进行撤销
最后地址信号也撤销了
(4)上述三种通信的共同点
(4) 分离式通信
从前面三种通信的共同点我们会发现在从模块准备数据的时候总线是空闲的,为了充分挖掘出总线每个瞬间的潜力,推出了分离式通信。
分离式通信是怎么充分利用总线的:
分离式通信,将一个总线周期分为二个子周期,下面的子周期2中的从模块申请占用总线之后,相当于此时的从模块就是主模块,这样就把上面数据准备/模块准备数据的过程让出来了,这样总线就可以通过子模块进行控制总线。
分离式通信特点: