计算机的总线
1、总线的作用及概述
解决设备间通讯问题。
总线是为了解决不同设备之间的通信问题。
总线可以连接CPU和IO设备。
2、总线分类:片内总线、系统总线
片内总线:连接CPU內部高速缓存、寄存器、运算单元的总线;
系统总线:数据总线、地址总线、控制总线
数据总线:双向传输各个部件的数据信息;数据总线的位数(总线宽度)是数据总线的重要参数(一般于CPU位数相同)
总线如果是32位 则一次可传递4个字节的数据 总线如果是64位 则一次可传递8个字节的数据
地址总线:指定源数据或目的数据在内存中的地址;地址总线的位数和存储单元相关
(地址总线的位数=n,寻址范围0~2^n-1)
控制总线:控制总线是用来发出各种控制信号的传输线;
控制信号经由控制总线从一个组件发给另一个组件;
控制组件可以监视不同组件之间的状态(就绪/未就绪);
3、总线的总裁:为了解决总线使用权的冲突问题。
仲裁方法有三种。(链式查询、计时器定时查询、独立请求)
为了解决各设备之间的总线使用权问题;
链式查询:各个设备与仲裁器串联,当有设备申请总线使用权时,仲裁器发出使用许可,总是按照设备优先顺序接收到信号,导致优先级高的设备总是能先获取到使用权。
链式查询的优缺点:
好处:电路复杂度低,总裁方式简单
坏处:优先级低的设备难以获得总线使用权
坏处:对电脑故障敏感
计时器定时查询:仲裁控制器对设备标号并使用计数器累计计数,其次当控制器接收到仲裁信号后,往所有设备发出计数值,计数值与设备编号保持一致时会优先获得使用权。
计时器查询的工作过程:设备主要是通过设备地址与计数器进行对比的,课程使用计数器是为了方便理解,可以理解为设备有一个唯一的设备地址,将设备地址的值与计数器比较,如果一致的话,才会得到总线使用权。
独立请求:每个设备均有纵线独立连接仲裁器,可独立向仲裁器发送和接受请求,同时接到多个请求信号时,仲裁器有权按优先级分配使用权。
独立请求的优缺点:
好处:响应速度快,优先顺序可动态改变
坏处:设备连接多,总线控制复杂
计算机的输入输出设备
常见的输入输出设备:
字符输入设备:键盘(薄膜键盘,机械键盘)。
图像输入设备:鼠标;数位板;扫描仪。
图像输出设备:显示器(CRT显示器、液晶显示器);打印机;投影仪。
输入输出接口的通用设计:
数据线:IO设备与主机之间进行数据交换的传送线(单向,双向)。
状态线:IO设备状态向主机报告的信号线(是否正常连接;是否被占用)。
命令线:CPU向设备发送命令的信号线(发送读写信号;发送启动停止信号)。
设备选择线:主机选择IO设备进行操作的信号线。(对连在设备总线上进行选择)
CPU与IO设备的通信方法(程序中断、DMA):
前提:CPU速度和IO设备速度不一致
程序中断:外围设备就绪时,向CPU发出中断,专门电路相应中断信号。
提供低速设备通知CPU的一种异步的方式、CPU可以高速的运转同时兼顾低速设备的响应
第一种方法如果频繁打断CPU的工作,会降低其效率。
因此产生了第二种方法,DMA 直接存储器访问方法:
DMA:DMA(Direct Memory Access,直接存储器访问)。对于没有DMA的情况,CPU可能需要被IO设备频繁打断,并且由CPU进行IO设备缓存与主存之间的数据拷贝,占用大量的CPU时间。对于有DMA的情况,当IO设备准备完成以后,会先通知CPU,然后后续的数据传输由DMA协助就可以完成,不再需要CPU的参与。
DMA的出现就是为了解决批量数据的输入/输出问题。DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。这样数据的传送速度就取决于存储器和外设的工作速度。
通常系统总线是由CPU管理的,在DMA方式时,就希望CPU把这些总线让出来,即CPU连到这些总线上的线处于第三态(高阻状态),而由DMA控制器接管,控制传送的字节数,判断DMA是否结束,以及发出DMA结束信号。
因此DMA控制器必须有以下功能:
1、 能向CPU发出系统保持(HOLD)信号,提出总线接管请求;
2、 当CPU发出允许接管信号后,负责对总线的控制,进入DMA方式;
3、 能对存储器寻址及能修改地址指针,实现对内存的读写;
4、 能决定本次DMA传送的字节数,判断DMA传送是否借宿。
5、 发出DMA结束信号,使CPU恢复正常工作
计算机储存器概述
存储器的分类
按存储介质分类
按存取方式分类
存储器的层次结构
读写速度
存储容量
价格
容量+价格=>位价:每比特位价格
缓存:速度快 位价高
主存:速度适中 位价适中
辅存:速度慢 位价低
缓存-主存层次
原理:局部性原理
CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都是趋于聚集在一个较小的连续区域中
实现:在CPU与主存之间增加一层速度快容量小的缓存
目的:解决主存速度不足的问题
主存-辅存层次
原理:局部性的原理
实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)
目的:解决主存容量不足的问题
计算机的主存储器与副存储
主存储器——内存RAM(随机存储器)
工作原理:RAM,(随机存储器;Random Access Memory)通过电容存储数据,必须每隔一段时间刷新一次,如果断电,那么一段时间后将丢失所有数据。
内存与CPU的交互:
操作系统位数与内存大小关系
首先,2是从比特位来的,一个比特位可以表示0和1。
那么,对于32位地址,就有2^32次方的寻址范围可以表示,换算成数值就是4*2^30次方,指的是寻址范围,每个地址按字寻址是1byte,所以总的过程就是4 * 1024 * 1024 * 1024 * 1Byte = 4G。
32位CPU的意思是,一次CPU寻址,可以寻址32个比特位长度的地址,也就是最多2^32个数据地址,这里面,对于每个地址,寻址数据大小是一个字节1Byte,可以得到4G的结果;因此,对于32位CPU,安装超过4G的物理内存,都是浪费的。
辅助存储器——磁盘
工作原理:表面是可磁化的硬磁特性材料,移动磁头径向运动读取磁道信息。
磁盘内容读取主要算法
例题:假如磁盘最外圈磁道为1,最内圈磁道为5,磁头现在在4磁道,且磁头移动向外,求不同寻道算法的磁头移动顺序,假设磁头需要读取的顺序为142315.
先来先服务算法(FCFS):按顺序访问进程的磁道读写需求。读取顺序为142315.
最短寻道时间优先算法(SSTF):与磁头当前位置有关,优先访问离磁头最近的磁道。读取顺序为452311
扫描算法(电梯算法/SCAN):每次只往一个方向移动,到达一个方向的尽头后反方向移动。读取顺序为432115
循环扫描算法(C-SCAN):只往一个方向移动。读取顺序为451123
计算机的高速缓存
高速缓存的工作原理
前提知识之主存存取数据的方法:
1. 字:指存放在一个存储单元中的二进制代码组合
2. 字块:存储在连续的存储单元中而被看作是一个单元的一组字
例题:假设主存用户空间容量为4G,字块大小为4M,字长为32位,则对于字地址中的块地址m和块内地址b的位数,至少应该是多少?
解:
高速缓存的内部存储结构与主存的逻辑结构非常类似,缓冲容量较小,缓冲的速度更快
CPU可以从高速缓存和主存中获取数据,前者的效率比后者高。
命中率:
例题:
假设CPU在执行某段程序时,共访问了Cache命中2000次,访问主存50次,已知Cache的存取时间为50ns,主存的存取时间为200ns,求Cache-主存系统的命中率、访问效率和平均访问时间。
解:命中率、访问效率、平均访问时间分别是0.97、91.7%、54.5ns
高速缓冲的替换策略
替换时机:高速缓存内没有需要运行的数据,就会从主存内拿数据。
替换算法:随机算法、先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)
计算机的指令系统
机器指令的形式
机器指令主要由两部分组成:操作码.地址码
操作码:操作码指明指令所要完成的操作;操作码的位数反映了机器的操作种类(比如有8位,那么就是2^8 = 256种操作)
地址码:直接给出操作数或者操作数的地址;分三地址指令、二地址指令和一地址指令、零地址指令
三地址指令:
二地址指令:
一地址指令:
零地址指令:
机器指令的操作类型(数据传输、算数逻辑操作、位移操作、控制指令)
1. 数据传输
2. 算数逻辑操作
3. 位移操作
4. 控制指令
机器指令的寻址方式(指令寻址、数据寻址)
指令寻址(顺序寻址、跳跃寻址)
1. 顺序寻址:通过程序计数器PC加1,自动形成下一条指令的地址
2. 跳跃寻址:通过转移指令实现。
数据寻址(立即寻址、直接寻址、间接寻址)
1. 立即寻址:机器指令内包含了操作的数据,无需访问存储器
2. 直接寻址:机器指令内包含了数据在内存中的地址,无需计算数据地址
3. 间接寻址:机器指令内包含了数据地址在内存的地址,通过内存地址找到真正的数据。需要访问一次或多次主存来获取操作数
数据寻址的优缺点
计算机的控制器
控制器是协调和控制计算机运行的
程序计数器:
时序发生器:
指令译码器:
指令寄存器:
主存地址寄存器:
主存数据寄存器:
通用寄存器:
计算机的运算器
运算器时用来进行数据运算加工的
数据缓存器:
ALU:
状态字寄存器:
通用寄存器:
CPU指令执行的过程
由于是在cpu内执行的,所以涉及的设备有: 控制器(程序计数器,指令译码器,时序发生器,指令寄存器)
高速缓存(数据缓存器,指令缓存器),运算器(通用寄存器,数据寄存器,状态寄存器),他们是由片内总线连接的;
详细过程是:
首先,系统operator(自己)调用系统功能的时候,会生成指令,和数据,然后它们缓存入指令缓存和数据缓存中(例:数据缓存有"地址"1,数据120;
指令缓存有地址101,操作码MOV,地址码RO,R1),接着程序计数器会把指令缓存中,指令的地址记录下来(例:101), 指令会通过片内总线传输到指令寄存器(操作码,地址码),接着又从指令寄存器发送到指令译码器中,之后程序计数器会+1(例:变成102), 之后指令译码器译码完成(把汇编语言变成机器语言),之后其通过片内总线发送控制信号给运算器进行运算:
例如,把指令缓存中,地址101,操作码MOV,地址码R0,R1的数据中的R1,加载到ALU(算数逻辑单元,是逻辑门),再通过片内总线的数据总线,传入数据缓存器,然后把R1数据覆盖掉R0,记录运算状态(状态寄存器)并送出运算结果给UI至此,就完成了这条指令的操作,CPU会执行下一条指令(如果有发起操作)
CPU的流水线设计
执行过程中,控制器和运算器不能同时工作,所以CPU综合利用率不高所以需要流水线设计
可以看到,非流水线情况,指令只能一条一条被执行,而流水线的情况,系统可以并发执行指令(不等前一条结束,后一条指令就可以执行),从而大大增加执行效率