高级语言对应CPU执行流程

首先要先说的是,CPU只认识一种确定的语言,叫做机器码(或者叫做机器指令),就是一条一条的基本操作的指令,什么C、Java、Python一律不认识。所以,我们平时说的高级语言,一般指的是这种语言的编译器(或解释器),他们的作用就是,把按照某种约定的方式书写的高级语言的代码,转化成机器码,然后让CPU执行。机器码都是一些数字,不方便记忆,不利于编程,所以又有了一套助记符,和机器码是一一对应的,这一套符号我们成为汇编语言。汇编语言,实际上是机器码的人类语言表示。

取指,我们一般不说从cache中取,cache是一个对于CPU透明的一个部件,CPU执行的指令中,所有的地址表示的都是内存和寄存器的地址,他并不知道有cache这种东西存在。

指令是在内存中的,CPU要执行,当然要先把这条指令读进来,然后分析一下这条指令表示什么意思,然后再执行,最后写回执行结果,一般教科书都把这个叫做取指令(IF)、分析指令(ID)、执行(EX)和写回(WB)。

分支预测,是在流水线机里面才有的东西。我们以刚才说的那四个过程为例,假设一个CPU执行一条指令的时候,需要这四个步骤,即IF、ID、EX和WB,而且显然,这四个步骤每一步都有一套自己的硬件取完成相应的工作。如果CPU只执行一条执行,那么显然每一个时刻,都有至少有三个部件是在空闲的。所以,CPU执行部件往往拆分成好几个部分,比如上面的四个部分。

首先先取指令,即CPU根据IP寄存器的值,到内存中把指令取回来,存在CPU的寄存器里面;然后指令进入第二步ID,在ID处理指令的时候,为了不让IF空闲,IF去取下一条指令回来。这样的流水线就使得每一个部件都处于工作状态,提高CPU的利用率。

如果遇上的跳转指令,那么CPU是要到EX这个步骤才能知道,跳转是不是实际已经发生(因为跳转的条件并不总是成立)。如果发生跳转,这个时候,上两级流水线预读的指令,实际上是无效的,是不应该被执行的,所以这个时候要清空流水线,也就是,那两条指令的取指和分析工作都白做了,然后取实际跳转到的位置,重新开始取值、分析。显然,清空流水线会降低CPU的运行效率。

分支预测的话,确实是有另外的硬件去处理,不过,这个预测,并不一定是完全正确的,也就是说,分支预测是会有失败的。不过在正确率高的情况下,效率也是可观的。CPU的指令中,能够进行跳转的指令并不多,就是jxx一套,还有loop之类的循环,所以只要对这些指令专门进行处理就好了。

一个比较简单的例子,我们都知道,循环语句一般是会执行很多次的,如果我们预测循环语句的判断条件总是成立,那么对于一个需要循环n次的循环,那么显然就有n-1次预测成功,1次失败。这样子,这整个循环的过程,只有一次(也就是最后一次)需要清空整个流水线。

<<<通过编程语言建立起人类和CPU之间的翻译工作。>>>


电脑的硬件有CPU(中央处理器)、RAM(内存)、Hard Disk(硬盘)、BIOS(基本输入输出系统)等;

电脑的软件有操作系统,编译器,应用软件等。

其中最关键的是CPU和操作系统的交互。CPU拥有ISA(指令集),操作系统通过将高级语言编写的程序转化为汇编语言(能被CPU翻译成机器语言的特定汇编语言)后,再进一步转化为CPU能够识别的机器语言,CPU利用自身的指令集将二进制代码翻译为相应的指令。

这里面涉及到信息的传输,数字信号作为一种信息在是以电磁波或者电信号的形式传输的。以电信号为例,数字信号依靠电流的有无或电压的高低分别代表1或0,只要电流或电压不高于某上限值,都会被认为代表0;只要电流或电压不低于某下限值,都会被认为代表1,当然同一电路中下限值一定大幅度高于上限值,电流或电压略高或略低写并不影响其含义。

说到这里,回到计算机的硬件与软件的交互问题。软件是以硬件为载体的,在计算机中就是存储器,其中包括有硬盘、CMOS芯片、BIOS芯片、内存条、软盘、光盘等。构成存储器的存储介质,目前主要采用半导体器件和磁性材料。存储器中最小的存储单位就是一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储元,它可存储一个二进制代码。由若干个存储元组成一个存储单元,然后再由许多存储单元组成一个存储器。 所以,与其说软件与硬件的交互,不如说,从一开始软件就是硬件的一部分,它是以二进制代码的形式通过硬件的半导体器件和磁性材料存储于硬件存储器中。如此,下面就好理解了。

在电脑上电后,根据电路、模电、数电原理,该通电的都通上电了,存储在硬件存储器中的信息由于有了“动力”,便开始工作了,信息以电压或电流的形式传输起来,实际上由简单的二进制的高低信号构成了复杂的物理动作,这些物理动作可以被叫做指令集(ISA)的东西所解释。可以理解为,物理动作就是0,1组成的机器语言,而指令集能够“翻译”机器语言,也许用“理解”更恰当,因为一般认为机器语言是机器能够直接听懂的语言,就像汉语是中国人能够直接理解的语言一样。我们也不是天生就懂汉语的,大脑在环境中不断适应过程中,形成了记忆,也可以说形成了“指令集”,对于传输过来的信息——汉语,我们可以很快的明白什么意思,并作出反应。指令集可以根据二进制信号明白对方的意思,作出加减乘除运算,然后进行存储或者传输等动作。完整的描述为:CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。 例如,要求一个加法运算,算数逻辑单元(ALU,Arithmetic Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里,运算溢出(Arithmetic Overflow)标志可能会被设置(参见以下的数值精度探讨)。信息的传输和指令的执行都是以晶振周期为最小单位时间动作的。

每一个有思想的硬件都是有类似于CPU这样的芯片的。它们其中集成了一些指令集,可以听懂“别人的话”。如硬盘有硬盘控制器,处理器本身有控制器;CMOS芯片只有存储功能,对于硬件参数比对的工作还需要交给CPU来做。

操作系统之所以重要,是因为它是硬件与应用软件的中间人,它将通过自己的平台开发出来的应用程序解析为汇编语言和机器语言与硬件交互。

总结:计算机的发明是二十世纪最重要的事件之一。人类能够设计出这样的一个如此精密的机器足以体现出人类的智慧。再复杂的事物也是由最基本的东西所组成,计算机的复杂之处在于它的高速性与准确性,而这一切的实现是由最基本的电子管、晶体管、集成电路完成的,这些都是硬件。人类历史的又一大发明是第三代信息载体,它是在信息传播中携带信息的媒介,是信息赖以附载的物质基础,也是用于记录、传输、积累和保存信息的实体。包括以能源和介质为特征,运用声波、光波、电波传递信息的无形载体和以实物形态记录为特征,运用纸张、胶卷、胶片、磁带、磁盘传递和贮存信息的有形载体。 信息和计算机相依为命,没有信息,计算机便是一堆废铁;没有计算机,我们现在的时代因为信息处理的缓慢,定不会如此高速的发展。

简而言之:二进制信号(软件)在载体(硬件)中传输,经由固体电子元件(硬件)得以执行,然后又可以以二进制信号(软件)的形式存储在载体(硬件)中。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值