为了了解CPU的完整工作过程,我们需要知道两件事,第一,CPU是如何获取到数据或者指令的;第二,CPU是如何执行指令的。
目录
一、CPU和内存的交互方式
1、地址空间的概念
2、CPU的取值过程
二、CPU内部的执行过程
1、CPU的基本组成
2、CPU的指令执行过程
一、CPU和内存的交互方式
这里我们要从整体的角度了解CPU是如何从内存中获取到指令或者数据的。
1、地址空间的概念
一个处理器能够访问(读写)的存储空间是有限的,我们称这个空间为地址空间(寻址空间),地址空间的大小跟地址总线的数目有关。
假设有一个8G的内存,地址总线为32,那么CPU可以访问到的大小也只是 2^32 ≈ 4G。
2、CPU的取值过程
为了简化过程,假设地址总线只有2根(2 bit)。CPU要从内存中获取数据,是通过地址获取的,即通过地址总线把地址发送给内存,内存再通过数据总线将数据传递给CPU。
假设CPU要获取 0x04地址对应的数据,那么CPU就会通过地址总线发送 11,内存就会通过数据总线返回 0x04对应的数据。但是介于地址总线的数目是2,CPU可以访问的地址只能是00 ~ 11,即0x00~0x04,这也就是为什么处理器可以访问的存储空间是有限的。
二、CPU内部的执行过程
这里我们将进入CPU内部了解CPU获取到指令以后,是如何执行指令的。
1、CPU的基本组成
CPU主要由两部分组成:控制器 和 运算器
控制器:CPU的指挥中心,控制着整个CPU执行程序的逻辑过程。比如CPU从内存获取哪条数据或指令、下一步要执行哪条指令都是由控制器决定的。
运算器:负责算术运算和逻辑运算,其核心是算术逻辑单元ALU。比如CPU从内存获取到了乘法指令,运算器拿到以后,就会运行对应的乘法单元。
2、CPU的指令执行过程
以CPU执行一条乘法运算为例,我们跳过CPU获取乘数和被乘数的过程,下面重点来介绍CPU获取并执行乘法指令的过程。CPU的指令执行分为三步:
- 取指:从内存中获取到乘法指令
- 译码:识别上一步获取到的指令,将指令解析成具体的运算。
- 站在CPU的角度,它并不知道这是什么指令,如果不知道这是什么指令,也就无法将其送入到对应的运算单元进行运算。
- 执行:控制器控制运算器中对应的运算单元进行运算,运算结果写入寄存器,指令计数器中的地址会自增。
(1) 取指
指令计数器PC 中每次存放着下一次执行指令的地址,CPU将地址通过地址总线发送给内存,内存通过数据总线将地址对应的内容返回给CPU,CPU将指令保存到指令寄存器IR中,这就完成了一次取指的过程。
(2) 译码
CPU现在已经拿到了要执行的指令,但是CPU并不知道这是什么指令,因此需要把指令送到指令译码器进行解析。
(3) 执行
经过指令译码器的解析,CPU知道这是一个乘法指令,于是就把这条乘法指令送到运算器的乘法运算单元,经过运算得到的结果会保存到寄存器中。
指令执行完毕以后,CPU会为下一次取数据或指令做准备,指令计数器中的地址会自增。