深入浅出谈CPU内部执行逻辑,太好理解了惹。

在读体系结构研究生,完全根据自己通过啃书看论文理解编辑,不对的地方可以一起讨论。
含大量文字,谨慎围观,等我鸽够了再一点一点加图片
CPU其实就是计算机的大脑,所有的东西都由CPU执行,但是CPU并没有那么智能,他是一个一年级毕业只会进行加减运算的口算天才。
然后我通过一个例子来形象化地说一下其逻辑。

好的,根据这个例子咱们类比一下

形象化抽象画
小学生CPU
进行考试执行程序
老师程序员
学习计划内存中指令部分(指令清单)
翻译软件编译器
算算术进行简单的浮点运算
内存中数据部分
答题纸内存中数据部分
形象化:

一个一年级毕业的小孩子要进行学习考试,但是他不会安排自己的学习计划而且不会主动学习。所以他的老师告诉他,我给你制定一份学习计划,学习计划里面不认识的字你可以用翻译软件,你按照学习计划来算题,遇到不会的你可以来查书,我也会在学习计划中告诉你这题的内容在书上第几页,你把书上的东西拿过来继续算,算完把答案记在你的答题纸上,如果你的答题纸记上了正确的答案,就代表你算对完成作业了。

看一下做作业咱们分了几个步骤:

  1. 看学习计划
  2. 用翻译软件看懂学习计划
  3. 算题
  4. 发现有不会的去查书
  5. 算完写答题纸
抽象化:

CPU要进行执行一段程序,但它本身没有程序,而且它不理解程序,所以程序员告诉它,我给你写一份程序(经过编译、汇编之后变成了指令),你按照我的指令清单来执行,执行过程需要数据就去访问内存,指令中我会指定了访存地址,你把指令中指定的内存地址中的数据取到CPU进行运算,运算完把写回到内存中,这样一个完整的执行过程就结束了。

咱们看一下指令执行经过了那几个过程:

  1. 取指令(看指令清单)
  2. 译码(通过译码部件看指令的意思)
  3. 执行(通过电路去计算数据)
  4. 访存(计算过程中发现缺数据,去内存中取)
  5. 写回(将计算结果写回内存)

接着补充一下上述细节:

取指:

小学生在算的过程中他就会忘了自己的学习计划执行到哪里了,所以他需要一个书签夹在学习计划中,标记自己计划执行到哪里了。这就是程序计数器(program count)的功能。
小学生的记忆只够记一条学习计划,这条记忆存在他的专门记学习计划的脑子中,让小学生知道自己在干的是什么,这个脑子就是指令寄存器IR(instruction register)的功能。

译码:

上述提到的译码,这个译码的原理是什么,其实就是通过电路来控制的。现在咱们补充一个常识,指令实际上就是一串二进制码,比如说一个32位的处理器,他的指令就是32个二进制数来表示。

指令格式
看到一个指令是由操作码(OP)和地址码(其他部分)组成,比如说add加法指令代表的操作为OP是:0000 0000,当我从IR中看到OP的位置是0000 0000,我就把这部分运算交给加法器,比如看到是浮点乘法,我就把乘法指令交给乘法器进行运算。
为什么就能给交给加法器,通过给传输着8个0的8根线每个后面加一个非门,然后把8个非门的输出结果都连接到一个与门,与门后面连接着加法器。这样只有IR中的op位是在输入0000 0000的时候,8个非门的输出和与门的输入才是8个1,最后这个才能通过与门进入加法器,其他形式的操作码都进不了加法器。
类比一下咱们如果最后一根如果没有连接非门,也就是前面7个非门连接与门的输入,最后一根线直接连接与门的输入,与门背后连接一个乘法器,这样是不是op如果是0000 0001的话就被翻译成了进行乘法运算。
当然这个例子不是现实存在的,这只是我想的一种可以实现译码的一种形式,这里只讲译码的原理,也就是通过逻辑门,只有其对应的逻辑功能部件才可以通过,其他功能部件的电路都通不了。
为什么0000 0000就对应了加法器,这就涉及到指令集和微架构,这是一个CPU厂商在设计的时候制定的一种定义而已。指令集说的就是这个指令的格式和组成,微架构说的就是电路的适配,一般说CPU适配一种指令集说的就是他的指令(定义的东西)正好符合我设计的电路。

执行:

这部分就是开始真正开始的计算,这部分部件叫做ALU(算术逻辑单元),里面比如加法器啦,乘法器啦,有兴趣的朋友可以学学半加器,全加器,乘法电路。我之后也会针对这个部分专门开一个文章。

访存和写回:

这里面涉及到了一个CPU与内存的交互。

地址总线:咱们先说一下内存的编址,内存本质上就是一格一格单元,比如说然后需要用数字对这些单元进行编号,比如按照字节编址,一个字节一个编号,第一个叫0,第二个叫1,所以比如说地址总线是32根,我每次传输的地址就是一个32位的二进制数(000…0000到111…1111)这个表示范围就是0到(232-1),其实就是41024102410241B=4GB

控制总线:控制总线通过一个信号来告诉内存说,我现在是给你数据还是问你要数据。

数据总线:内存模块也是想译码部件一样通过电路控制,内存芯片其实是一个矩阵,只有在其对应地址传入的时候,该地址的电路就通了,就会把该地址对应的数据传到数据总线中。

然后地址总线在连接了CPU中的存储器地址寄存器MAR(memory address register),数据总线连接了CPU中的存储器数据寄存器MDR(memory data register)。

介绍完各个阶段,就知道一条指令的执行过程,而CPU中真正的执行并不是一条指令一条指令地执行,这样的效率非常低,于是引出流水线,大家可以看看关于流水线的逻辑
链接: 流水线的执行逻辑.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值