CPU对每个程序员来说,是个既熟悉又陌生的东西?
如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。
随我一起,来好好认识下CPU这货吧
把CPU掰开来看
对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东西,构造一定是极其复杂的,毕竟是超高科技玩意,所以啊,我们今天说的组成什么的,都是指的主要的,对我们程序员有用的,需要了解的那一部分,切莫抬杠哦
首先嘞,我希望你先记住这句话:
CPU所负责的就是解释和运行最终转换成机器语言的程序内容
另外啊,说起CPU,一定离不开内存,在今天的介绍中,也会简单的说说内存,因为后期也会单独出一篇讲解下内存,毕竟了解这些对我们程序员来说很重要的,所以CPU和内存经常在一块来讲,他们其实是有很多的晶体管组成的,一般称他们为IC,也就是集成电路的意思。
接下来我们就来看看CPU的组成,注意我之前说的,这里说的组成一般是指的主要部分,毕竟CPU结构复杂。
我们需要知道的CPU结构
重点需要关注寄存器
运算器
字面意思理解就是跟运算有关的,简单说就是负责运算从内存读取到寄存器中的数据,可以看作一个数据加工厂,就是对寄存器中的数据做运算,这些运算包含基本的算术和逻辑运算。
然后对于运算器来说,我们要了解其中的几个重要角色,接下来我会挨个介绍:
算术逻辑单元(ALU)
这个是运算器中重要的一个组成,主要负责的就是对数据的处理,从而实现对数据的算术和逻辑运算
累计寄存器(AC)
通常叫做累计器,是一个通用寄存器,这个有啥用呢?上面说的ALU,当ALU处理完算术运算或者逻辑运算之后,会得到一个结果,这个结果就会保存在AC中
数据缓冲寄存器(DR)
这个DR也是存放数据的,存放的主要是从内存读取过来的数据,会暂时存放在这个DR中,这里就相当于内存和CPU之间做数据传送的一个中转站,为啥会有这个,大家都是到CPU和内存的速度是有很大差别的,中间引入一个DR,一定程度上起到了速度上的缓冲作用,不至于速度相差太猛
状态条件寄存器(PSW)
这个貌似有点不好理解,首先寄存器还是保存数据的,所以PSW自然也是保存某一类数据的,它保存的主要是由算术指令和逻辑指令运行或者测试的结果建立的各种条件码内容,一般分为状态标志和控制标志,知道就行
我们需要了解以上的这几个组成部分,这都是运算器的核心,另外需要特别说一下的就是它们每一个其实都有一个英文缩写,比如ALU就是算术逻辑单元的意思,为啥要说这个嘞,因为英文缩写毕竟简便而且有逼格,所以我们一般交流的时候会说ALU而不是算术逻辑单元,因此,记住他们的缩写也很重要哦。
不然跟别人交流起来的话,别人一出口就是ALU,DR啥的,你很容易跟不上节奏啊。
对CPU中的运算器有个基本认识以后,我们再来看看另外一个重要组成 控制器
控制器
控制控制,也就是起到一个控制作用,上面介绍的运算器只是起到了运算的功能,但是控制器就比较牛,它是控制整个CPU的工作,对于控制器,一般要能够保证程序的正确执行以及能够处理异常事件
同样的,对于控制器来说,我们需要重点关注如下几个:
指令寄存器(IR)
寄存器是保存东西的,指令寄存器自然就是保存指令的,也就是说CPU要执行一条指令的话,需要先把指令从内存上读取,然后放到我们上面说的数据缓冲寄存器中,之后再从DR放到IR中,接着嘞,会有一个叫做指令译码器的东西根据IR的内容生成很多的微操作指令,从而去控制其他部件已完成相应的功能
程序计数器(PC)
这个学过Java内存结构的应该了解,它保存着下一条要执行的指令,也就是说当一个程序要执行的时候,会把这个程序的起始地址存到这个PC中,如果这个指令被执行的话也不用担心,CPU会自动修改,使得PC存放下一条要执行的指令
地址寄存器(AR)
这个就是保存着CPU访问内存上的那一块内存的内存地址,为啥要保存这个,因为CPU和内存速度相差比较大,所以CPU要保存着正在访问的那块内存的地址,直到内存的读写操作完成,不然,找不到之前访问的是哪个内存单元了啊
指令译码器(ID)
简单点就是对指令做分析的,看看你这个指令要干啥
不知道你有没有发现,我们上面无论再介绍运算器还是控制器的时候,都大量提及寄存器,这足以说明寄存器的重要性,不是有句话说其实CPU就是寄存器的集合体,不过在说寄存器之前,我们还是很有必要先来简单的看看内存。
简单说下内存(以后会单独说)
CPU和内存总是分不开的,这里简单对内存坐下介绍,方便对CPU的理解,内存自然而然是存储部件,存储的是啥呢?一般来说,就是数据和指令,而且我们常说的内存指的就是电脑中的内存条,就是用来存储程序啊,数据啊,指令啊这些东西。
形象点说,其实内存可以看作一个个的小格子,每个格子都是用来存储数据的,而且每个格子还有编号,也就是内存地址,根据它可与拿到对应内存存储的数据,还需要知道的就是,如果断电的话,内存中的数据会被清除的。