5.1 CPU的功能和基本结构
CPU的功能
右图展示了运算器和控制器的功能。
运算器的基本结构
CPU内部总线是ALU与寄存器交互的媒介。下图中:
- 暂存寄存器是为了避免在同一时间A和B从CPU总线获取的是相同的数据(同一时间,总线上只能传输A或B的数据),可以用暂存寄存器先存储A的数据,然后在将B的数据传入ALU中。
- 移位寄存器是用来暂存结果,一段程序可能需要ALU计算多次,所以可以将结果存入移位寄存器,等到完全计算结束,再将结果写入总线。
- 寄存器in标志:如果是1,表示可以从CPU总线往这个寄存器里写数据,0则不能。
- 寄存器out标志:0表示不能将该寄存器的内容写到CPU总线,1则可以。
控制器的基本结构
注意下面寄存器的顺序,比如CPU要执行一条指令,首先通过PC寄存器获取指令地址,然后将指令地址传给MAR,MAR与地址总线连接,在主存中找到指令所在的存储单元,将指令二进制通过数据总线存放到MDR中,再通过CPU内部总线存到IR(指令寄存器中);然后读取指令中的地址码,再到主存中获取操作数,存放到数据寄存器中,最后传给ALU进行计算,结果也存到寄存器中。
总结:CPU的基本结构
左图中,褐色框的寄存器是用户可编程的,即可以通过程序对寄存器进行读写操作。
右图是CPU的电路结构。
本节回顾
5.2 指令周期的数据流
指令周期介绍
指令周期>机器周期>时钟周期。
每条指令的操作数的寻址方式(直接寻址、间接寻址等)、指令类型(乘法等于若干次加法)、是否中断等情况都会导致指令周期内机器周期数不等。
指令周期流程
有四个周期。如何知道机器当前处于哪一个周期,是通过触发器这个硬件结构完成的,当机器进入某一个周期,就将1放入对应的触发器中。
指令周期的数据流-取指周期
CPU从主存中取指令的完整流程,注意关注CPU组件与三条总线的交互,还有CU所起的作用。
间址周期
形式地址——>地址——>实际地址。就是根据指令中的操作数的形式地址从主存中获取实际地址,最后或许到实际的操作数的过程。
执行周期
中断周期
中断就是暂停当前任务去完成其它任务,为了能够恢复当前任务,需要保存断点(程序恢复后要执行的那一条指令的地址,即PC中的地址),保存方法是将PC中的地址存入主存中的某个地址中,这个地址也同时会保存在堆栈中(入栈是sp-1,因为堆栈在主存中是从高位到低位的顺序)。
理解下面的内容。
指令的执行方案
除了流水线方案都是串行的。
本节回顾
5.3 数据通路
- CPU内部单总线方式:CPU内部各个部件(寄存器、运算器)都通过一条总线来进行通信。
- CPU内部多总线方式:通过多条总线进行通信。
- 专用数据通路方式:如特定寄存器之间有专门的的路线进行通信。
5.3.1 单总线的数据传输
- 内部总线:指同一部件(如CPU)内部各个组件(如寄存器、运算器之间)进行连接的总线。
- 系统总线:不同部件(如CPU和主存)之间进行连接的总线。
数据传输过程如下,理解。这里要注意一点,CPU内部两个寄存器(如从将PC的地址传输到MAR中)使用完总线之后,都会释放总线,这又释放了,其它寄存器才能通过总线传输数据。
5.3.2 专用数据通路
即CPU内部各个组件不通过总线来连接,而是专门的线路。
5.4 控制器的功能和基本原理
5.4.1 硬布线
- 地址总线:作用是定位到一个对象(可以是一个设备,也可以是主存中的一个存储单元)。单向传输,从CPU——>设备
- 控制总线:地址总线定位之后,就需要安排任务(读或写),由控制总线发出信号来指定要执行的任务。单向传输,从CPU——>设备。
- 数据总线:控制总线发出任务信号后(读或写),要由数据总线来传输任务相关的数据(读就是传输读到的结果,写就是传输要写的数据)。多向传输,CPU——>设备,设备——>CPU,设备——>设备。
控制器的结构和功能
取指令,分析指令,产生控制信号来执行指令。
右图是控制单元的输入和输出。
硬布线控制器
机器周期的概念。当存储字长=指令字长,取值周期=机器周期。
- 节拍信号:右下角图片,坐标轴中单个凸起的信号就是节拍发生信号,每个节拍信号就是一个时钟周期。时钟周期:下图中一上一下代表一个时钟周期。
CPU的控制方式
同步控制方式,异步控制方式,联合控制方式。
安排微操作时序
原则
- 原则一:微操作的先后顺序不得随意更改。
- 原则二:被控对象不同(如不同的寄存器)的微操作尽量安排在一个节拍内完成。
- 原则三:占用时间较短的微操作尽量安排在一个节拍内完成,并允许有先后顺序。
取值周期(图一),间址周期(图二),执行周期(图三),中短周期(图四)。图1就是根据这三条原则,对微操作进行了安排。
电路设计
5.4.2 微程序
5.5.1 指令流水线
定义
- 取指
- 分析
- 执行
可以把指令的执行过程分成多个阶段(并不局限于3个),这样可以实现更多次的重叠执行方式(下图2)。
流水线的表示方式
时空图中,指令的执行是阶梯状,图形高度固定;过程图高度是不断升高的。
流水线的性能指标
吞吐率,加速比,效率
5.5.2 流水线的影响因素及分类
上一节讨论的流水线的性能指标是基于理想情况的,即各个阶段花费的时间相同;每个阶段结束后能立即进入下一阶段。
机器周期的设置
指令流水线的每个阶段执行的时间可能不同,如下图,不同会破坏整个流水线结构(试想一下,时空图中每一块的长度不一样会怎么样)。因此在设计时要以执行时间最长的那个部件为基准,让每个部件的执行时间等于这个最长时间。方法是,在流水线的每个功能段部件后要加一个缓冲寄存器,作用是当部件提前执行完了,将结果先缓存起来,时间到了再给下一个部件执行。
影响流水线的因素
结构相关(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。图1第一条指令(Mem)从主存中加载数据,第四条指令从主存中加载指令,都要访问主存,这就是资源冲突,可以将数据和指令分开存储来解决。
数据相关(数据冲突)
数据相关只在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。图2中,第一条指令计算r2+r3,然后将结果写到r1中,然后第二条指令从r1中取数据进行相减运算,显然在流水线下add指令的W操作再sub指令的Reg操作之后,也就说sub执行时r1中还没有数据,就会出现问题。注意下面的解决办法3,编译优化,可以将程序中其它与当前指令没有数据冲突的指令排序到前面来执行(如排序到第二条指令之前),等这些指令执行完了,add指令也就执行完了,r1中也就有数据了,sub指令就能成功执行了,这就是所谓的指令重排序。
冲突的基本类型:RAW(写后读)、WAR(读后写)、WAW(写后写)。注意,指令按续执行时(没有重排序),只会出现RAW的冲突,注意理解。
控制相关(控制冲突)
当流水线遇到转移指令和其它改变PC值的指令而造成断流时,会引起控制相关。如下图,如果从第一条转移到最后一条,那么中间的指令就废弃了。
流水线的分类
流水线的多发技术
6 总线
6.1.1 总线得概念与分类
总线定义
就是一组公共线路,为计算机内部各部件与外部部件之间提供连接通路。如果没有总线,采用分散连接方式,每增加一个设备,就要提供这个设备与CPU、内存、其它设备等部件之间交流的总线,不灵活。总线的特点:
- 分时:同一时刻只有一个部件能向总线传输数据。
- 共享:总线上可以挂接多个部件,可以有多个部件同时从总线上接受数据。
主板上白色的线就是总线,那些插口就是总线接口,我们只需要将硬件(如内存条)插到对应的插口,就能将部件挂接到总线上。
总线的特性
- 机械特性:尺寸、形状、管脚数、排列顺序。
- 电气特性:传输方向(是单向还是双向)和有效地电平范围(如0~0.3V表示0,0.4V~1V表示1)。
- 功能特性:每根传输线的功能(传输的数据是代表地址、数据还是控制)。
- 时间特性:信号的时序关系。
总线的分类
串行总线与并行总线
- 串行总线:使用一根总线传输数据,传输一个二进制位是一位接一位传输的。
- 并行总线:使用多跟总线,可以同时传输多个二进制位。
优缺点见下,串行总线主要用在长距离传输的场景。
片内总线、系统总线、通信总线(安总线功能分类)
理解系统总线的概念和特点,理解他们传输的内容、方向、根数对系统访问的影响。
系统总线的结构
- 单总线结构(图1):注意单总线并不是只有一根总线,而是一组总线,只不过这组总线是公共使用的。
- 双总线结构(图2):比单总线结构多了一条IO总线,由“通道”(概念见图)通过IO总线对IO设备进行管理,这样CPU就只用与主存交互,与IO设备的交互就交给通道,能更好地发挥CPU的作用。
- 三总线结构(图3):增加了一条DMA总线,让高速IO设备(如磁盘)可以直接和内存交互,不用像双总线结构一样要经过IO总线和主存总线才能和内存交互,主要是为了提高IO设备的性能。但同一时刻只有一类总线在工作,如CPU通过IO总线管IO设备的时候,CPU和主存、IO设备和主存之间都没有交流(王道原话)。
- 四总线结构(图4):CPU内部总线和系统总线的速度差距比较大(与CPU与主存的运算速度差距大一个道理),所以需要一个桥接器来进行调和。
小结
6.1.2 总线的性能指标
6.2 总线仲裁
解决多个设备征用总线的问题?
基本概念
总线是一种共享资源,所以会出现并发问题。
集中仲裁方式
- 链式查询方式(图1):BG、BR、BS三条控制线的概念,工作流程,优缺点。
- 计数器查询方式(图2):
- 独立请求方式(图3):
分布仲裁方式
6.3 总线的操作和定时
占用总线的一对设备如何进行数据传输?
总线周期的四个阶段,总线定时的概念,总线定时的四种方式。
同步定时方式
6.4 总线标准
易于实现系统的模块化设计
有了总线标准之后,制作总线的厂商、制作计算机的厂商和制作设备的厂商就可以分别独立地去做设计,不用关心这些设备如何连接起来。
7.1 IO系统基本概念
IO系统演变过程
- 早期:每个IO设备连接到计算机都要有自己的一套总线与计算机各个部件进行连接,增删设备不方便;IO设备的工作需要CPU不断地询问,询问IO设备是否做好了准备,中间CPU不能做其它事情。
- 接口模块和DMA阶段:CPU不再等待IO设备,而是IO设备准备好之后主动向CPU发送中断请求信号,这是CPU才予以响应;高速IO设备与主存直接通过DMA总线交互,不必经过CPU(不必调用中断服务程序)。
- 具有IO通道结构的阶段:设置通道控制部件来管理IO设备,CPU只需给这个部件发送命令即可。
- 具有IO处理机的阶段:
IO系统的基本组成
- 通道指令由通道来执行,CPU是无法执行通道指令的。
- IO硬件的信号传输过程:设备控制器就是将机械部分的反馈转化成电信号传给IO接口,IO接口将电信号再转化成主机能够识别的电信号;反过来也是一样,IO接口将主机传过来的电信号转化成设备控制器能够识别的电信号,设备控制器将这些电信号再转化成机械部分能识别的控制信号,控制机械部分执行。
IO方式简介
首先由CPU启动IO,然后:
- 程序查询方式:在IO准备阶段,CPU必须等待IO设备。
- 程序中断方式:IO准备阶段,CPU可以继续执行自己的任务,当IO设备准备好之后,给CPU发送中断请求,此时CPU当前执行指令的指令周期结束后,会先保存当前程序执行的断点(指令地址和程序数据),然后转向去执行IO程序,执行完之后读取断点继续执行之前的程序。
- DMA方式:IO准备阶段,CPU也是在做自己的事,当IO设备准备好之后,会发送DMA(直接内存访问)请求,此时CPU在当前存取周期结束之后会停止访问内存,让IO设备去访问。
小结
7.2.1 输入输出设备
7.2.2 外存储器
磁盘存储器
磁盘设备的组成
磁头数、柱面数、扇区数。
磁盘的性能指标
- 磁盘容量:可以由记录密度得出。
- 记录密度(图2):到密度、为密度、面密度。
- 平均存取过程/时间(图3):启动磁盘存储器——>寻道——>旋转——>传输。
- 数据传输率:
磁盘地址和硬盘的工作过程
关盘存储器
固态硬盘
小结
7.3 IO接口
IO接口的基本结构
- IO接口的组成:数据缓冲寄存器DBR,设备选择电路,设备状态标记,命令寄存器和命令译码器。
- CPU通过IO解控控制外部设备的过程。1~12。
IO端口及其编织
- IO端口:指接口电路中可以被CPU直接访问的寄存器。
- 如何访问IO端口:统一编址,独立编址。
小结
7.4 IO方式
7.4.1 程序查询方式
上图中IO准备和数据传送过程的流程如下图1。使用程序查询方式时,CPU和外设只能一次传输一个字,这是因为外设的数据是直接存放在CPU的寄存器中的,就算要放到主存,也还是要通过CPU寄存器。
7.4.2 中断系统
中断的作用
中断的基本概念
- 关中断:关闭中断机制,不允许中断。
- 开中断:与上相反。
注意,CPU在接收到中断请求后,不是立刻转向去执行中断程序,而是先进行一些准备操作(如等待当前指令执行完和保存断点)。
中断请求的分类
内中断和外中断。
中断请求标记
CPU在指令执行阶段结束前就在标记寄存器中查询是否有中断产生,有的话,CPU响应中断的时间是在指令执行结束之后。
关于响应中断的第3个条件,“没有更紧迫的任务”表示没有优先级更高的中断请求。
中断判优-优先级设置和实现
- 优先级设置:6点。
- 实现:硬件实现(硬件排队器)和软件实现(查询程序)。
中断处理过程
执行中断隐指令
在进入中断程序之前,要执行中断隐指令保存当前程序的断点(PC中的内容),同时获取中断程序的入口地址。关中断是为了避免隐指令在指令的过程中被其它程序中断。
图2是获取中断服务地址的硬件向量法,通过中断请求标记寄存器获取向量地址,通过向量地址定位到主存的某个存储单元,存储单元中的JMP指令就指明了中断程序的入口地址。
执行中断服务程序
单重中断和多重中断
- 单重中断:中单程序执行过程中不响应其它中断请求。
- 多重中断:响应。注意多重中断中使用的中断屏蔽技术。(图2)
小结
7.4.3 程序中断方式
7.4.4 DMA方式
DMA控制器
DMA是通过接管系统总线的方式来传输数据的,DMA传输器件,CPU不能使用总线(不能访问主存和其它设备),只能执行访问范围在CPU内部的指令(如ADD)。
注意,执行IO中断程序时,数据一般不是一次性完成的,如需要传送磁盘上大量数据的程序发生中断请求并执行时,一次准备好的数据仅仅是要传送的数据中的一部分,所以中断程序要向CPU发出多次中断请求,这会导致CPU大量时间用于中断服务。
DMA传送过程
DMA传送方式
并不是说有了DMA控制器之后,IO设备要访问内存就把总线让给它,这也要看情况的,控制逻辑如下: