CPU的执行过程

1. 编译

     程序要被CPU执行,首先要编译成CPU可以执行的指令操作。要理解编译的过程,首先要理解CPU的架构,CPU架构也就是CPU指令集架构(指令:汇编指令或者机器指令,比如Add,是汇编指令,而对应的机器指令在MIPS下就是000000),CPU架构当前有Intel的X86架构、ARM的ARM架构、MIPS的MIPS架构和DEC的Alpha架构。指令集是指挥CPU如何运算的硬程序,如果没有这套指令集,就没有办法指挥CPU运转,而计算机的所有运算都需要CPU参与。其次是要理解编译的概念,编译是将一段程序转换为指令集的过程不同架构的指令集是不同的,比如同一段代码,编译过后只能运行在对应的指令集上,比如一段C++代码,在X86下编译完了,只能在运行在X86下,而不能运行在ARM架构、MIPS架构和DEC的Alpha架构。在实际上,编译得到的结果,与操作系统是紧密相关的。比如,一段程序被编译成了X86下的硬程序,但是无法同时运行在Windows上和Linux上(Windows和Linux操作系统都可以装在X86架构的CPU上),如果程序一开始是在Windows操作系统下编译的,那这段程序就无法运行在其他比如Linux操作系统中。这也说明,编译是与CPU和操作系统两者相关的。

2. 编译过程

   实际上,仅仅将程序通过编译改写成汇编指令或机器指令,在操作系统上还不能直接运行。广义的编译,其实包括预处理、编译、汇编、链接这整个过程。

1) 预处理,是把代码里引入的其他代码,插入到这段代码中,形成一个代码文件
2.) 编译,是把代码转化为汇编指令的过程,汇编指令只与CPU相关的,也就是说C代码和python代码,代码逻辑如果相同,编译完的结果其实是一样的。
3) 汇编,是把汇编指令转为机器码的过程,机器码可以被CPU直接执行。
4) 链接,就是将一段我们需要的已经编译好的其他库,与我们的汇编结果连起来,这样才是最终程序完整的形式,操作系统才可以运行。不同操作系统编译好的其他库形式不同,而且链接的方式也不同,得到最终程序的形式也不同,所以编译好的程序只能在特定的操作系统下运行。

3. CPU执行过程

RAM、CPU概念

RAM:指内存,断电后内容无法保存,叫做易失性存储;

ROM:一般指外存,比如硬盘。RAM的速度远快于ROM,CPU与内存直接进行数据交换。

CPU:计算机的所有计算操作都由它执行,它是一块有输入和输出的集成电路就行了。

Instruction:指令,是CPU进行操作的基本单元,包含操作对象、操作对象的地址、对操作对象进行何种操作。

RAM相关结构

 程序要想被CPU执行,首先要编译成CPU可以执行的指令操作,放在内存中。内存中存放的数据分为两类,一类是指令;另一类是数据,不管是指令还是数据都有其对应的地址。下图就是内存结构图(来自这个视频:How does CPU execute program),

在上图中,地址100、104、108、112 存放了的一系列指令;地址2000、2004、2008中存放了一系列数据。

CPU相关结构

这里只给出CPU的执行指令时涉及的基本结构,真实的CPU结构会复杂很多。这里涉及到的结构有Program Counter(程序计数器)、Instruction Register(指令寄存器)、Data Register(数据寄存器)、ALU(算数逻辑单元),可以将计数器、寄存器理解为存放数据的器件。程序计数器用来存放指令的地址,指令寄存器用来存放指令,数据寄存器存放参与计算的数据,下图中的A、B、C都是数据寄存器;ALU是算术逻辑单元,用于计算的器件。

执行过程

此执行过程仅涉及到CPU和内存间的数据交换

1)程序计数器初始内容为100,指向内存中的某一项指令,这里的100指的是地址;
2)指令寄存器根据程序计算器的指向地址,将内存中地址为100的指令抓取到自身,此时存放LOAD A,2000;
3)CPU按照指令内容,将内存地址为2000的数据,上载到数据寄存器A中,此时CPU和RAM的状态如下图所示;


4)以上3步已完成一个指令的基本操作步骤。接下来程序计数器依次指向104指令地址、108指令地址、112指令地址,分别完成将2004地址的数据赋值给B数据寄存器;ALU将A、B内的数据相乘赋值给C数据寄存器;将C数据寄存器数据写入内容地址2008中。
5)这样就完成了50×0.1这个简单程序的计算,最后CPU和RAM所处状态如下图所示。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值