CPU的组成和功能
分为运算器和控制器。运算器负责对数据的加工,即对数据进行算术和逻辑运算;控制器是整个系统的指挥中枢,对整个计算机系统进行有效的控制,包括指令控制、操作控制、时间控制和中断管理
CPU如何进行数据传输
CPU传输数据一般有三种方式:
- CPU内部单总线方式:所有输入输出都接到一条通路上
- CPU内部三总线方式:有数据总线、控制总线、地址总线
- 专用数据通路方式:根据数据和地址流动方向安排连接线路,避免使用共享总线
总线可以实现数据的传递,比如说CPU已经取到了指令并放在了MDR中,要把MDR的指令传入IR,就要通过总线
寄存器间的数据传送、主存与CPU间的数据传送、暂存器与寄存器间的数据传送,都是以总线为桥梁的
CPU如何执行指令
CPU执行指令的一个周期主要包括取指周期、间指周期、执行周期、中断周期四部分
取指周期就是将PC中的内容从主存中取出并存放在IR中,数据流向为
PC→Bus→MAR
1→R
MEM(MAR)→MDR
MDR→Bus→IR
间址周期就是取操作数有效地址,只有使用间接寻址时才需要这步操作,一次间址就是将指令中的地址码送到MAR再传到总线,CU发出读命令在存储器相应地址中读取该地址后存回MDR
执行周期就是根据IR中的指令通过ALU操作来产生执行结果,不同指令有不同的执行周期内容
中断周期是处理中断请求,假设程序断点存放在堆栈中,那么需要由CU通过MAR、总线到主存修改栈顶指针,再通过控制总线发出写命令,然后将程序计数器内容通过MDR、数据总线写入存储器对应的堆栈中。
CPU怎么控制指令执行
通过控制器,根据指令操作码和时序信号,产生各种操作控制信号,以便正确地建立数据通路,从而完成取指令和执行指令的控制。
控制器主要功能有:
- 从主存中取出一条指令,并指出下一条指令在主存中的位置。
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作。
- 指挥并控制CPU、主存、输入和输出设备之间的数据流动方向。
控制器可以分为硬布线控制器和微程序控制器两种,两类控制器中PC和IR是相同的,有区别的是操作控制器部分。
硬布线控制器
通过布线的方式实现不同控制信号输入得到相应的输出结果,控制器的速度取决于电路延迟,速度快,但是设计完成不容易修改
微程序控制器
将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令
工作过程:
- 执行取微指令公共操作。具体的执行是:在机器开始运行时,自动将取指微程序的入口地址送入CMAR,并从CM中读出相应的微指令送入CMDR。取指微程序的入口地址一般为CM的0号单元,当取指微程序执行完后,从主存中取出的机器指令就已存入指令寄存器中。
- 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入CMAR。
- 从CM中逐条取出对应的微指令并执行。
- 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第 1 步,以完成取下一条机器指令的公共操作。
以上是一条机器指令的执行过程,如此周而复始,直到整个程序执行完毕
其中CU是一个控制单元
概念辨析:
微程序>微指令>微命令>微操作
一条指令的功能由一段微程序实现;
微指令包含操作控制字段(微操作码)、顺序控制字段(微地址码)(存放下一条要执行的微指令地址);
微命令是控制部件向执行部件发出的各种控制命令,是构成控制序列的最小单位
微操作是计算机最基本的、不可再分解的操作
指令执行顺序的优化
一条指令的执行过程可以分解为多个阶段,如果一条指令一条指令按顺序执行,必然效率很低。因此引入了指令流水线。
流水CPU是一种非常经济而实用的时间并行技术
类似如图所示的流水线形式工作,可以大幅度提升工作效率
那么不免想到一个问题,如果第二条指令需要资源时第一条指令正在使用呢?或者第二条指令需要的数据应该是第一条输出的数据呢?
- 资源冲突:同一时刻争抢同一资源 解决方案:①后面的指令暂停 ②设置不同存储器
- 数据冲突:下一条指令使用上一条结果 解决方案:①后面的指令暂停,硬件阻塞和软件插入 ②数据旁路技术 ③编译器优化调整顺序
- 控制冲突:转移、调用、返回时冲突 解决方案①分支预测②预测转移成功与不成功指令
此时如果还是觉得速度不够快效率不够高呢?还有新的技术
- 超标量流水线技术:同一阶段并行执行多条指令;要求配置多个功能部件和指令译码电路
- 超流水线技术:每个周期分段,一个周期内每个部件使用多次;对cache容量要求更大,需要执行的指令长度很长
- 超长指令字:将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字;需要采用多个处理部件
本质还是用空间换时间,后续CPU的多核并行也一样是为了提高CPU的工作效率,也是目前速度优化的主流趋势