1.CPU如何执行程序?
1.图灵机工作方式
1.1 图灵机组成
图灵机由纸带和读写头两部分组成,其中纸带是连续的格子,类似于内存。读写头由存储单元、控制单元以及运算单元三部分组成,它能够从纸带读取字符,也可以将字符写入纸带中。存储单元用来存储图灵机状态(数据);控制单元能用于识别字符是数字还是指令,也能控制程序流程包括返回运算结果给读写头,由读写头写字符到纸带。
1.2 图灵机计算1+2过程
首先读写头读取纸带格子中字符,然后交给控制单元识别字符是数字还是指令。如果是数字存入图灵机状态,如果是运算符,通知运算单元读取状态中数值并进行计算,最后由控制单元将计算结果返回给读写头,读写头将结果写入纸带的格子中。图灵机计算流程如图:
2.冯诺依曼模型
冯诺依曼模型在图灵机的设计上,使用电子构建计算机,并约定用二进制进行计算和存储。计算机基本结构由五部分组成,分别是运算器、控制器、存储器、输入输出设备。冯诺依曼模型如下图所示:
运算器和控制器存在于中央处理器CPU中,存储单元是我们常见的内存,输入输出设备是计算机外接设备,如键盘是输入设备,显示器是输出设备。存储单元与输入输出设备之间进行数据传输离不开总线,它们呢的关系如图所示:
3.线路位宽和CPU位宽
数据通过操作电压(低电压表示0,高电压表示1)进行线路传输;如果只有一条线路则只能1bit1bit的串行传输,效率较低。为避免低效率的串行传输,线路位宽最好是一次性访问到所有的内存地址,操作[内存地址]就需要[地址总线]。若要CPU操作4G内存则需要32条地址总线,即2^32=4G。
CPU位宽最好不要小于线路位宽,如果CPU计算数额不超过32位,32位与64位之间无区别,只有当计算超过32位数字时,64位优势才能体现。
4.程序执行过程
- CPU读取[程序计数器]的值面积指令的内存地址,然后CPU的[控制单元]操作[地址总线]指定需要访问的内存,接着通知内存设备准备数据,内存准备好数据后通过[数据总线]将指令数据传给CPU,CPU将内存传来的数据存储在[指令寄存区]。
- [程序计数器]自增,指向下一个指令,自增大小由CPU位宽决定;
- CPU分析[指令寄存器]的指令,确认指令的类型和参数,如果是计算类型指令,就交给[逻辑运算单元],如果是存储类型指令,则交由[控制单元]执行。
小结:CPU根据程序计数器的内存地址从内存中将需要需要执行的指令读取到指令寄存器中执行,然后指令长度自增,开始顺序读取下一条指令。
CPU从程序计数器读取指令、执行下一条指令,该过程循环,直到程序执行结束,该过程称为CPU指令周期。
5. 1+2具体执行过程
程序运行时内存分为数据段(存放数据)和正文段(存放指令)。
5.1 指令计算过程
- load指令从存储数据1的数据段地址中将数据1装入到寄存器R0;
- load指令从存储数据2的数据段地址中将数据2装入寄存器R1;
- add指令将寄存器R0和寄存器R1数据降价,并将结果存放到R2;
- store指令将寄存器R2中的数据存回连续的数据段中,改地址即a内存的地址。
指令计算过程如下图
5.2 指令
不同的指令有着不同的指令集,即不同的编程语言对应着不同的机器码。指令内容就是二进制的机器码,CPU通过即系机器码来获取指令内容。
MIPS指令是一个32位的证书,高6位表示操作码,表示该指令是一条什么样的指令,剩下的26位不同指令类型所表示的内容也不相同,主要有R、I、J三种类型。
- R指令:用于算数和逻辑操作,里面有读取和写入数据的寄存器地址。入股是逻辑位移操作,后面还会有位移操作的[位移量],[功能码]是在操作码不够的情况下,扩展操作码表示对应具体指令;
- I指令:用于数据传输、条件分支。该类型指令没有位移量和功能码,也没有第三个寄存器,而是将三部分直接合并成一个地址值或一个常数;
-
J指令:用于跳转高六位之外的26位都是一个跳转后的地址。
5.2.1 指令编码解码
- 指令编码即编译器在编译程序的时候会构造指令;
- 指令解码是指CPU执行程序是解析指令。
5.2.2 指令四阶段
- Fetch(取指令):由控制器执行,CPU通过程序计数器读取对应内存地址的指令;
- Decode(指令译码):由控制器执行,CPU对指令进行解码;
- Execution(执行指令):由运算器执行,CPU执行指令;
- store(数据回写):CPU将计算结果存回寄存器或将寄存器的值读入内存;
5.2.3 指令类型
- 数据传输类型:如store/load寄存器和内存传输的指令,mov是将一个内存地址的数据转移到另一内存地址的指令;
- 运算类型:加减乘除、位运算、比较大小,最多只能处理两个寄存器中数据;
- 跳转:修改程序计数器的值达到跳转执行指令过程,如if-else,switch-case,函数调用;
- 信号类型:中断指令trap;
- 闲置类型:,如nop,执行后CPU空转一个周期。
5.2.4 指令的执行速度
时钟频率是指1s会产生1G(1024)次数的脉冲信号,每一次脉冲信号高低电平的转换即一个周期,也被称为时钟周期。如电脑的硬件参数主频。指令数指程序需要执行多少条指令,哪些指令。每条指令的平均时钟周期数CPI即一条指令需要多个时钟周期数;时钟周期时间:计算机主频,取决于硬件。有些CPU支持超频技术(把CPU内部时钟调快)
CPU执行时间=CPU时钟周期数X时钟周期时间(1/主频)时钟周期数也等同于[指令数X每条指令的平均时钟周期数(CPI)]最后简化为CPU执行时间=指令数X每条指令的平均时钟周期数(CPI)X时钟周期时间。
参考链接
本人博客内容是基于小林coding的图解系统写的,中间省略了部分内容,大家可以去小林coding博客看更详细的图解网络,链接为:小林coding (xiaolincoding.com)。