中央处理器
0.Preface
CPU=运算器+控制器。
运算器对数据进行加工,控制器控制协调指令序列,包括取指令、分析指令、执行指令。除此之外,cpu还可以控制程序输入和结果输出(IO)
1.CPU的基本功能和结构
1.1 cpu的功能
cpu最基本的功能是处理程序,但是在很多特殊情况下需要__处理中断__和异常情况。具体地,cpu的功能分为以下几种:
控制指令的操作时序、控制指令的执行操作、运算数据、控制存储器和I/O、处理异常和中断
天勤的书上概括为:指令控制、操作控制、时间控制、数据加工、中断处理
其中,天勤书上提到处理中断和异常情况的具体表现为,为了使cpu和外部设备可以很好地协调,尽量使cpu不等待,甚至不参与外部设备的输入和输出过程,采用了中断方式和DMA方式。在这两种方式下,cpu主要要做的就是提出中断请求和DMA请求,以及在执行过程中采用相应的引脚查询中断请求和DMA请求。
查询时机 | 如果查到 | |
---|---|---|
DMA请求 | 机器周期结束时 | DMA控制总线,cpu脱离总线 |
中断请求 | 指令周期结束时 | 响应中断执行指令,得到中断服务的入口地址,送入程序计数器中。下个指令周期开始时,取出中断周期的第一条指令进行执行 |
上述描述中,比较困惑的点如下:
1、首先是各个周期的区别,根据整理,大概整理出了如下的区别:
周期的分类 | ||
---|---|---|
时钟周期 | 节拍,cpu时钟周期 时钟频率的倒数 | cpu操作的基本单位 |
机器周期 | cpu周期 | 一个机器周期包含若干时钟周期 |
指令周期 | 从cpu中取出一条指令并且执行的全部时间 | 指令周期由若干个机器周期组成 |
存取周期 | 可以连续读/写的最短时间间隔 | DRAM芯片的恢复时间较长,可能是存取时间的几倍 |
机器周期、指令周期和时钟周期的关系如下图所示:
值得注意的是,一个指令周期内的机器周期的长度可以不相等,而一个机器周期的节拍数(时钟周期)也可以不相等。
2、其次是DMA是啥?
经过一番查找,大致在王道的课件里找到了一些答案:
DMA的英文是Direct Memory Access,直接内存访问。
1.2 cpu的结构
cpu的主要结构大致分为两个方面,一个是运算器,一个是控制器。控制器主要是取指令、分析指令、执行指令,以及发出操作控制信号。
运算器 | 功能 | 控制器 | 功能 |
---|---|---|---|
算术逻辑单元ALU | 算术逻辑运算 | 程序计数器PC | 用于存放下一条指令的地址,具有自增功能,长度取决于存储器字数 |
暂存寄存器 | 对应用程序员透明, 暂存从主存读来的数据 | 指令寄存器IR | 保存当前正在运行的指令 由于不需要任何用户的干预,对用户透明 |
累加寄存器 | 通用寄存器, 可以用来存放从ALU运算得到的结果 加法运算的输入端 使用多个累加寄存器时,此时进行的是寄存器寻址 | 指令译码器 | |
通用寄存器组 | 包括AX、BX、CX、DX、SP等, SP是堆栈寄存器 位数与机器字长相等 | 储器地址寄存器MAR | 需要访问的地址信息 位数取决于存储器的容量 |
程序状态字寄存器PSW | 包括溢出标志OF、符号标志SF、零标志ZF、进位标志CF 属于内部操作器,对程序员不可见 | 存储器数据寄存器MDR | 需要访问的数据信息 |
移位器 | 对操作数进行移位运算 | 时序系统 | 产生时序信号, 由统一CLOCK分频得到 |
计数器 | 控制乘除的步骤 | 微操作信号发生器 | 根据IR指令、PSW状态信息 及时序信号, 产生控制信号,其结构有组合逻辑型和存储逻辑型两种。 |
其中专用寄存器有:PSW、MAR、MDR、IR、PC
cpu的位数与数据总线相同,表示一次能处理多少位数据
要注意的是内部寄存器是否对于程序员可见。
用户可见的寄存器 | 用户不可见的寄存器——透明,不可对其编程 |
---|---|
通用寄存器组 | MAR |
程序状态字寄存器 | MDR |
IR |
各种长度的计算
名称 | |
---|---|
机器字长 | 计算机一次整数运算所能处理的二进制的位数 |
存储字长 | 存储单元中二进制代码的位数 MDR的位数=存储字长 MAR反映存储单元的个数 |
存储器的容量 | 要注意一个bit就是一个二进制的位 |
2.指令执行过程
2.1 指令周期执行过程和信息流
2.1.1 取指周期
取指周期的两大问题:CPU到哪个存储单元取指令,如何形成后继取指指令。
2.1.2 间指周期
注意不是所有的指令执行过程都会有间指周期。间指周期是为了取出操作数的有效地址,操作数的地址存放在相应的存储器中,到相应的存储器中去取数。
2.1.3 执行周期
没有统一的数据流向。根据IR中的操作码和操作数通过ALU操作产生操作结果。
此处以加法和存数为例进行陈述。
1)加法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1aoTxML-1624420490666)(…/Library/Application%20Support/typora-user-images/image-20210622204317230.png)]
思路:从主存中取出数,和累加器ACC中的值相加送入ACC中
Ad(IR)->MAR //将指令地址码送入主存
1->R //启动存储器读
M(MAR)->MDR //将MAR中的内容经过数据总线送入MDR,采用总线连接时最好课程M(MAR)->BUS->MDR
(ACC)+(MDR)->ACC //给ALU发命令,将ACC的内容和MDR的内容相加,存入ACC中
2)存数
将ACC的结果存入主存A中:
Ad(IR)->MAR //指令的地址码送入MAR中
1->W //启动存储器写
(ACC)->MDR //将累加器的内容送入MDR
(MDR)->M(MAR) //MDR的内容写入主存单元
2.1.4 中断周期
处理中断请求。假如程序断点存入堆栈中,并且用SP指向栈顶地址,则进栈操作是先修改栈顶指针,后存入数据,则数据流如下:
关于中断周期需要思考两个点:1)中断保存的断点在哪里? 2)如何找到入口?
0->MAR //若是改成堆栈存储,则此句改为 SP-1->SP (SP)->MAR
1-W //启动存储器写
(PC)->MDR //pc存储的内容为程序的断点
(MDR)->M(MAR) //主存存储器存储的内容送入MAR
向量地址->PC //向量地址形成的部件送入pc
0->ENIT //关中断,允许中断触发器清零
2.2 指令执行方案
2.2.1 单指令周期
所有指令采取相同的执行时间来完成。指令周期的大小取决于执行时间最长的执行周期。因为部分段时间的执行周期被强制拉长了,所以单指令周期的效率较低。
2.2.2 多指令周期
不同类型的指令采取不同的执行步骤来完成。多指令周期对于硬件的要求较高。
2.2.3 流水线方案
指令可以并行的方案,称为流水线方案。
2.3 本节总结
计算机可以通过指令周期的不同阶段判断取出的地址还是数据。
3.数据通路的功能和基本结构
3.1 数据通路的功能
数据通路是各个部件用来传输数据的路径。数据通路由控制部件控制,用以实现cpu内部的运算器和寄存器及寄存器之间的数据交换。
3.2 数据通路的基本结构
数据通路的基本结构分为两种:cpu内部总线的方式、专用数据通路的方式
1) cpu内部总线的方式
通过一条bus进行数据的传输交换,但是容易造成数据的冲突。按照总线的数量分为单总线、双总线和多总线。具体示意图如下:
2)专用数据通路的方式
这种方法根据数据的具体流向安排硬件进行数据传输。性能较高,但是硬件需求量较大。
具体地,又分为如下几种:
1、寄存器之间的传输
寄存器之间的传输借助于cpu内部bus完成。此处以pc为例,把PC内容送至MAR,具体的数据流如下:
2、主存和cpu之间的传输
也是借助于cpu内部的bus进行传输。以cpu取指为例说明主存和cpu之间的数据传输:
3、执行算术或者逻辑运算
由于cpu内部没有存储功能,因此在执行加法操作时,两个操作数须加到ALU两个输入端并且同时有效,其运算结果
4.控制器的功能和原理
4.1 控制单元的功能
输入cu的内容 | 输出cu的内容 |
---|---|
指令寄存器,指令操作码送入译码 | cpu内的控制信号,cpu内寄存器之间的传送和控制ALU |
标志,有时指令通过前一条指令的结果产生信号 | 送至控制总线的信号,i/o读写、中断响应等 |
时钟,时钟脉冲进行控制 | |
来自控制总线的控制信号 |
控制器是控制单元的核心,其主要功能有:
1)取指令并且指出下一条指令所在的位置
2)对指令进行译码和测试,
3)控制cpu、主存、输入输出之间的数据流动方向
4.2 控制单元的设计
4.2.1硬布线设计
具体的设计步骤是:
硬布线一般用于RISC(指令精简系统),纯硬件控制,因而速度快,但是成本高,扩充指令困难。
天勤:1)硬布线中微操作的次序不可变
2)可在同一节拍内完成的控制对象不同的微操作尽量安排在一个节拍内
3)占时间少的微操作安排在同一个节拍内
4.2.2微程序控制器设计
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0pUYeoxH-1624420490699)(…/Library/Application%20Support/typora-user-images/image-20210623093321572.png)]
微指令->指令->程序,层层套娃。
微指令=操作控制+顺序控制
注意区分几个名词:
1)微指令 & 微操作:微命令和微操作一一对应。命令是操作的信号,操作时命令的执行过程
2)微指令 & 微周期:微周期是执行一条微指令所需要花费的时间。微指令是微命令的集合
3)主存储器 & 控制存储器:
接下来是关于微指令的设计:
微指令的格式分为水平型、垂直型、混合型。
1)水平型:每条指令可以定义多个可并行的微命令
编码方式:
i)直接编码:每个bit对应一个指令,运行速度最快,但是字段较长的话会造成存储空间的浪费。
ii)字段直接编码:将控制字段分为段,每段经过直接译码之后发出控制信号。可以缩短指令字长,但是降低了执行的速度:因为要经过译码方可得出操作。
iii)字段间接编码
某些字段的微指令是由其他微指令解释得出,并非依靠直接编码得出。字段间接编码可以进一步缩短微指令字长,但是削弱了微指令的执行控制能力,通常用作直接编码的辅助手段。
2)垂直型:只可定义一个微命令,由操作码指明
3)混合型:垂直的基础上加上简单的水平
得到微指令的地址有如下几种方式:
1)断定方式:由微地址的下地址字段直接得出后继指令的地址
2)由机器指令的操作码得出
3)增量计数法:(CMAR)+1->CMAR
4)分枝转移
判别条件:转移地址:转移成功后的去向
5)经过测试网络
6)由硬件产生微程序入口地址
以下是上述内容的小小总结
以下是各个周期内微程序控制器的设计
5.指令流水线
为了提高处理器的运算速度,故采取流水线的方式
5.1 基本概念 & 性能指标
5.1.1 基本概念
一条指令可以分为 取指、分析、执行三个阶段,根据各个指令用到的硬件不同,这三个阶段涉及的硬件也不相同。
取指:根据pc内容访问寄存器,并取出一条指令放在ir中
分析:根据指令译码,根据译码结果形成有效地址ea,从ea中读出操作数
执行:把运算器写到通用寄存器或者主存中
若采用顺序执行的方式,则需要3nt的时间:顺序执行的硬件代价小,控制简单,但是部件的利用率较低
若采用一次重叠、二次重叠,则效果如下:
有图可知,在采用重叠方式之后,指令的执行效率大幅度提升。
5.1.2 相关性能指标
1)吞吐率:单位时间内完成操作的数量,或者是输出的数量
2)加速比
不使用流水线的所用时间/使用流水线的所用时间
3)效率
以上理想的状况是,各个阶段所花的时间相同,在完成一个阶段之后立马进入下一阶段
5.2 影响因素 & 分类
5.2.1 数据相关
也就是数据冲突,必须等前一条指令执行完成才能完成下一条指令
解决方案:1)阻塞指令和后续指令都延后几个周期,具体措施分为:硬件阻塞(stall)和软件插入nop
2)数据旁路技术 3)编译优化,通过编译器来调整指令的顺序
5.2.2 结构相关
也就是资源冲突,这种情况下多条指令在同一时刻争夺同一资源
解决方案:暂停某一周期、资源重复配置(采用数据存储器+指令存储器)
5.3.3 控制相关
遇到转移指令和其他改变pc值的指令造成数据断流
解决方法:1)提早判断
2)预取转移成功和不成功的控制流上的转移指令
3)加快提前形成转移码
4)提高转移方向的猜准率
5.3.4 分类
部件功能级:将逻辑运算组成流水线
处理机级:一条指令解释过程分为若干子过程,如取指、译码、执行、访存、写回
处理机间:处理机之间的流水线