首先这门课跟计算机系统概论的区别在于这个更偏向于底层实现(最烦的东西……),而后者则是在此基础上进行优化和改进
那么就先看总线
首先就要回顾一下之前所学习过的只是,也就是计算机的基本架构冯诺依曼或者是哈夫架构(后者的去区别只不过是将程序和数据的存储分开来了),其中包含了五大部件,而这些不见的互联方式有两种,其中一个是使用单独的连线,称为分散连接,还有一种是将各部件都连接到一组公共信息的传输线上,称为总线连接
早期的计算机大多数是分散连接方式,以运算器为中心。
这种内部连线复杂,尤其是当i/o与存储器交换信息的时候需要经过运算器,致使后者停止了运算,严重影响了cpu的工作效率。
后来改进为以存储器为中心,交换信息可以不用经过运算器,还添加了中断、DMA等技术,使得cpu工作效率得到了提高,但是仍然不具有灵活性
于是总线连接出现了
总线,也即是连接多个部件的信息传输线,是各部件共享的传输介质,可以想象为是一大堆部件挂在一条线上跟葡萄一样,在某一个时刻只允许一个部件发送信息,但是可以有多个部件同时接收信息
总线实际上是由许多传输线或者是通路组成的,每条都可以一位一位地传输二进制代码,这样16条传输线所组成的总线就可以同时传输16条二进制代码
其中一种是双总线结构,也就是主存与cpu连接(这个称之为存储总线(m总线))而cpu与i/o总线连接,i/o总线又管理了若干的外接i/o接口和对应的设备(这边的称为输入输出总线),这种结构便于设备的增删,但是在与主存进行交换信息的时候由于必定要经过cpu所以会影响到后者的效率
还有一种是单总线结构,其实就是去掉了主存和cpu之间的线而保留了主存和总线的直接连接,原则上避免了对于cpu的影响,cpu仍然可以继续处理不用访问主存和i/o设备的别种无关操作,效率提高,但是因为只有一组总线,会在各部件都使用总线的时候发生冲突,所以必须设置判优逻辑
众所周知,任何事物的最佳解决方法一定是折中,所以又出现了以存储器为中心的双总线结构,总的来说就是能连的都连了,顺带一提这个链接了cpu和主存的总线称之为存储总线,这组总线速度很高,只提供为在cpu和主存之间传输信息,同时提高了传输效率并且减轻了系统负担,并且保留了iO设备和存储器交换信息不用经过主存的特点
总线的分类:
按照数据传送方式可以分为:并行和串行(没有绝对的优劣关系)
在并行传输中 ,又可以按照传输数据的宽度分为8位,16位,32位,64位,等传输总线
按照总线的使用范围又可以划分为,计算机总线(外设总线),测控总线,网络通信总线
片内总线
也就是芯片内部的总线,比如cpu芯片啦寄存器和寄存器之间啦寄存器和算数逻辑单元alu之间啦
系统总线
也就是cpu、主存、io设备各大部件之间的信息传输线,又由于这些部件通常都是安在主板和插件版上的,那么又称之为是班级总线或者是板间总线
按照系统总线传输的信息的不同又可以分为三类
1、数据总线
也就是用来传输各功能部件之间的数据信息,同时它也是双向传输总线,位数和机器字长、存储字长有关,一般都是8位、16位、32位,这个总线的位数也就称之为是数据总线宽度,是衡量系统性能的重要参数,好比说这个是8位宽度而指令字长是16位的话,那么cpu取值阶段必须两次访问
2、地址总线
主要是用来指出数据总线上的源数据或者是目的数据在主存单元上的地址或者是io设备上的地址,比如要从存储器读出一个数据,cpu就得把这个数据所在的存储单元的地址先送到地址线上(然后再读),再比如要将数据经过io输出,cpu除了要将数据送到数据总线,还需要将输出设备的地址 (通常是经由io接口)这个地址也送到地址总线上
可见地址总线上的代码们呢就是用来指明cpu想要访问的存储单元和io端口的地址的,由cpu输出并且单向传输(cpu管理地址,单向到了地址总线上)
地址线的位数跟存储单元的个数有关,比方说地址线是20根的话对应的存储单元的个数就应该是2的20方
3、控制总线
数据总线和地址总线都是由挂在总线上的所有部件共享的,如何使各部件在不同时刻占有其使用权
所以控制总线出现了
控制总线呢总是用来发出各种控制信号的传输线
对于任何一条控制线来说应该都是单向的,信号嘛,给了你你知道了就行了别墨迹,好比说相应的存储器读写命令,io设备读写命令都是由cpu发出的。
但是对于控制总线总体又是双向的,比如某设备准备就绪就向cpu发出中断请求,当某部件(DMA接口)获得总线使用权的时候,也需要发出总线请求
另外呢这个控制总线还有监视其他各部件状态的作用,比如忙不忙,比如有没有出错,所以从这方面,对于cpu来说,控制信号,输入和输出都有
常见的控制信号?
时钟:同步操作
复位:初始化所有部件(注意对象都是部件)
总线请求:某部件需要获得使用权
总线允许:某部件已经获得控制权
中断请求:某部件提出中断请求
中断响应:中断请求被接收
存储器写:将数据总线上的数据写到存储器的指定地址单元内(别误会这个“指定”是 cpu指定的)
存储器读:同上
io读:从指定的io端口中将数据读到数据总线上
io写:将数据总线上的数据输出到指定的io端口内
传输响应:表示数据已被接收或者已被传送至数据总线上