”你谁啊?“ ”我CPU啊,你刚才还看我呢。“

“不好,居然睡过去了!”

我一跃而起,猛然睁开了眼,打算抄起书本接着看CPU的内容。

结果发现,我书没了,桌子也没了,卧槽,四周白茫茫的,这哪儿呢?

面前还站着一个年轻人,挖着鼻孔盯着我,然后仰头就说:“小老弟,机械式看书有啥意思,问吧,什么问题我都能给你解答。”

“你谁啊?”

“我CPU啊,你刚才还看我呢。”

我愣了,仔细打量,这人衣着宽松,一副慵懒得吊儿郎当的样子,搭上那嬉皮笑脸的样子,整体显得有点猥琐。

我实在难以将这人与精准计算的CPU扯上勾,吐槽了一句:”要你是CPU,那运算得多不靠谱啊。“

”此言差矣,别说人了,CPU也不可貌相。“年轻人抬手认真说理了一番,又问:”你们都是怎么介绍我的?“

我一琢磨,也是,我认识的那些程序员大佬,又哪几个长得像我一样俊俏,认可了他的身份,回答说:”一说到你,经常就是甩过来一句:CPU是中央处理器,是计算机的大脑。“

”额···“年轻人愣了一下,”然后这句话有什么用?“

”仅仅是被告诉这句话,并没有卵用,只是外行人拿来忽悠小朋友的。“我也是看了一点书才知道,真要掌握编程能力,就得要直到CPU是如何运行的,还得清楚指令和数据是如何保存的,谁知才看了一点,就睡过去了,真是不争气。

”你到底是怎么解释程序然后运行它的,又是怎么转换成机器语言的?“我皱着眉头,眼里满是疑惑。

”这个啊,简单,其实我是由寄存器,控制器,运算器和时钟组成的。“年轻人一听有人对自己感兴趣,立马露出了兴致:”就相当于我的口袋,四肢,大脑和心脏一样,这样一对比,他们的功能就能从中窥探一二了。“

寄存器:

暂存指令和数据

”既然是相当于口袋,那肯定是用来存放东西的,放的就是指令和数据。“

控制器:

将指令和数据存入寄存器,并利用运算结果来控制计算机

”我是如何进行数据输入和数据输出的,靠的就是这‘四肢’来协调数据进出和掌握全局,比如你们经常用的打印和显示器的输出,鼠标键盘的输入,还有内存和磁盘的输入输出,靠的这就是这控制器,它不要求有什么高深的本领,但是一定要确保指令的正确执行和异常事件处理。“

运算器:

读取寄存器的数据

“既然有了数据,还保存好了数据,接下来就当然是用我这个聪明的‘大脑’进行计算了。”

时钟:

发出CPU开始工作的时钟信号

“这心脏是我能‘活着’的源泉,当它开始跳动的时候,我就知道我该工作了,不过有些时钟是位于外部的,从体外为我提供生命的跳动。”

“简单点划分就是下面这样:”

看着年轻人不知从哪里抽出了这样一张图,我仔细瞅了一眼,虽然画的相当简陋,却一目了然,而且,我还发现了一点。

”你这连线,是不是说明其实控制器、运算器和时钟都是可以人为去控制寄存器进行配置的?“

“是的,甚至可以这样认为,我们CPU就是寄存器的集合体,不过在这里我必须郑重生命一点,我们CPU内部的组成多而复杂,远远不止这四个,起主要作用的就是这四个,与你们编程息息相关的也是这四个,你可别跟我扛。“

年轻人收起了那张图,又接着说:”控制器和运算器你们无法作主,但是却可以通过寄存器时刻进行监督和配置,因为组成它们的,大部分也是寄存器。“

“就好比控制器中就有:”

地址寄存器:

简称AR,存放内存的地址,供CPU访问,直到内存的读写操作完成。

指令译码器:

简称ID,就是对指令进一步分析成更加底层的指令。

指令寄存器:

简称IR,当CPU要执行一条指令的时候,会先从内存读取出来(访问内存就是用的地址寄存器),先放进数据缓冲寄存器(这里后面会讲到),然后再放进IR中,最后由译码寄存器解释成更加贴近硬件的微指令操作,直接控制硬件动作。

程序计数器:

简称PC,存放着CPU下一条要执行指令的地址

年轻人讲到这里稍微顿了顿,语气稍微正经了起来:“这个程序计数器需要重视一下,这家伙儿不仅决定你们程序的执行流程,还还是你们编程中分支和循环机制的原理,来,上图。”

说着又不知道从哪里抽出一张图片来。

我一看这图片怎么这么熟悉呢,忽然醒悟过来,卧槽,我刚看过。

“你这盗图手法挺熟练啊,不过这个PC我熟。”我摆了摆手。

“哦?那你说说。”年轻人摸了下巴,能懂和能说是两码事。

我也就不客气,直接说道:“CPU都是将数据存储在连续的地址上,而程序计数器就相当于CPU的引路人,告诉CPU下一步需要执行哪个地址上的数据,当执行完一条指令的时候,程序计数器的值会+1,相当于告诉CPU地址+1了,CPU就知道下一步应该执行地址+1那里的指令。”

“没错,你小子记得不错。”年轻人肯定的点了点头,补充道:“虽然这图片上每个指令都占据了一个地址,但是实际上我们CPU在处理的时候是将一个指令或者数据放在多个地址上的。,不过执行的原理都一样。”

而且如此一讲,便自然而然知道了分支和循环操作是怎么实现的:

编程界都知道这一行有三大执行力,分别是顺序执行,分支执行和循环执行。

同时还有这样一条谁也无法打破的定理,那就是一切操作都是由顺序执行,分支执行和循环执行来完成。

而顺序执行,内部原理自然就是程序计数器不断+1,CPU不断按照+1的地址执行指令;

分支指令和循环指令,无非就是程序计数器的值设定为任何值,那么CPU就可以随意跳转到任意地址执行,甚至还可以返回到上一次执行过的地址。

比如以下的条件分支:程序开始运行的地址是0100,随后程序计数器不断+1,到了地址0102的时候,跳转到地址0104执行其中的指令内容。而要完成跳转这个动作,就是用到跳转指令(JUMP指令)(这里关于指令的部分就不展开了,我担心自己扯远了。)

 

 

“控制器大概就是这些情况,接下来是运算器:”

算术逻辑单元:

简称ALU,负责对数据的算术运算和逻辑运算

累计寄存器:

简称AC,ALU处理完之后将结果存放于AC中

条件状态寄存器:

简称PSW,指令完成后产生的状态标志和控制标志,就放这寄存器中

数据缓冲寄存器:

简称DR,从内存读取的数据会暂时存放于DR中

这个就刚才说到的当从内存读取指令会先放在这个数据缓存寄存器中,而且从它的名字中我也不难猜想出来,这一定是起到了某些缓冲的作用,“难道是速度吗?”

年轻人笑了笑,“接着说。”

“因为我知道CPU的工作频率比内存的读写频率要大得多,两者相差这么多,那必定是需要有一个驿站来做缓冲。”

“哈,你知道的还是挺可以的。”年轻人得意一笑,“那你知道什么叫单核和双核吗?”

“每一块CPU上都嵌有一块运算单元,这就是单核,双核不就是嵌入了两块运算单元吗?”这点我还是清楚的,而且,从15年起,主流的CPU就已经是双核架构了。

“那多核呢?”

“····”我白了他一眼,这家伙是侮辱我智商吗,“多核不就是嵌入了两块以上运算单元吗,你在逗我呢。”

“哈哈,那超线程呢?”年轻人没有在意,又接着问了。

不过这一问,却难倒我了,线程我是知道,超线程是个什么鬼?

“世界很大,小老弟知道得还是不够啊。”年轻人微微摇了摇头,一副卖弄的样子。

“别扯犊子,快告诉我。”对于新鲜东西,我是挺想去摸清楚的。

“超线程技术被称为HT技术,是在不增加内存资源的情况下开辟出更多的核。要知道我们CPU执行指令的周期太快了,大部分事件都处于空闲状态,即使有了多任务系统,让众多程序不断切换执行,让我们看似在同时执行两份程序,可尽管如此我们CPU还是没有物尽其用,这时候就有人站出来了,能不能让CPU真正意义上同时执行两份程序呢。”

“很快HT技术就出来了,而机制就是将CPU的寄存器资源分成两份,然后给两组程序使用,这一次不是采用多任务分配的方法,而是让这两组程序同时使用CPU的运算单元。所以以后你有机会去检测CPU内核的时候,会发现虽然CPU名义上是n核,但是检测出来的却有2n核,毫无疑问,用的就是超线程技术,可以从逻辑上同时运行2n个程序。”

“哦哦。”我焕然大悟,没想到还有这种东西,果然世界之大。

“”最后就是对程序员最重要的寄存器了,这些家伙太多了,但是从种类来区分可以分成八类:“

累加寄存器:

存储运算后的数据

标志寄存器:

存储运算后CPU的状态(比如正数、负数、零、存放溢出、奇偶校验等等)

程序计数器:这个咱们刚才讨论过。

存储下一条指令所在内存地址,它决定着程序的流程

指令寄存器:这个咱们刚才好像也讨论过。

存储指令,这一部分是供CPU内部处理的,程序员无法操作

栈寄存器:咱们这个刚才也好像···哦没说过。

存储栈区域的起始地址

基址寄存器:跟下面那个寄存器相辅相成的。

存储数据内存的起始地址

变址寄存器:还记得刚才讲到的存储访问的内存地址的地址寄存器吗,二者要区分来,不要混淆。

存储相对于基址寄存器的相对地址

通用寄存器:

存储任意数据

”在以上八种寄存器种,只有基址寄存器、变址寄存器和通用寄存器是可以有多个的,其他5个寄存器都只有一个。”

“好了,大致上CPU内部环境,就是这么多了。”年轻人吐了口气,显得轻松多了。

但是我的疑惑并没有因此而减少,整理了一下,发现了一个问题,“你输了这么多关于CPU的东西,但是这CPU究竟是长什么样子呢?”

“这个你就别纠结了,CPU你是看不到的,市面你能看到的,都是CPU与内存的结合产物,按照你们的说法,就是IC,我找了两个IC兄弟的自拍照你看了就明白了。”

“你这两兄弟长得还挺别致。”我差点笑出了声,还以为他会拿出什么来,不过这也让我脑子一下子就通了,一直一来对CPU只是抽象种的存在,现在终于脑子中有了个框架。

“那你这两个兄弟,哪一个的性能好点呢?应该是第2号兄弟吧,我看针脚挺多的。”我摸着脑袋,又生出一问。

“没错,但是在性能好坏这方面,单单只看引脚数量是不准确的,应该从以下三个方面及西宁判断:”

一、指令集

CPU内部含有指令集,不同的指令集会影响CPU的工作效率

二、CPU频率,即主频

首先要明确知道什么是频率,就是CPU一秒钟能进行多少次工作,比如3.6GHZ的CPU频率,表示可以一秒钟内进行3.6 * 10^9次工作。

当然了,以上说的是CPU内部自身的频率,既然有内部,自然就会有外部频率,而CPU与外部组件进行数据传输的速度,就叫外频。

此外还要牵涉一个概念——倍频,倍频就是CPU内部调节频率的倍数,所以外频与倍频相乘,才是CPU的主频。

“当然,有些装机党喜欢手动将倍频的倍数设置超过最大倍频倍数,就是超频。虽然CPU频率和外频都会得到提升,但是由于超频并非是正常速度,我都记不清楚戎机多少次了。"

“不过庆幸的是,如今的CPU会主动根据计算机的使用情况进行超频,这才让我的工作压力轻松许多。”

三、CPU的位宽

”我不清楚你对于内存的理解有多少,不过这里只要知道CPU的所有数据都是从内存来的即可。“

既然如此,那么CPU每次能从内存取到的数据量越大,性能也会提高。因此就有了“位宽”的概念,位宽就是CPU每次工作能从内存中取到多少位数据,目前就有8位、32位、64位

”就是以上三者判断需要结合,既不能单纯的以指令集来判断性能高低,也不能仅仅凭借CPU频率来判断性能高低,更不能认为位宽更高,性能越好。一切都要结合实际需要与实际执行情况。“

”啧啧啧。“听完后,我不禁咂舌,原来这里头还有这么多道道,今儿收获不亏啊。

”叮~“

”呦,时间到了,该走了。“年轻人看了下没有带表的手腕。

”啊?什么时间,你要走了?别啊,再多讲点。“我还沉浸在消化刚刚听到的信息,一听他要走竟然有些低沉。

”这个怕是不行了,不过你下次有需要的话可以联系我。“说着塞给了我一张纸,”上面有我联系方式。欢迎下次惠顾。“

”惠顾?“我没懂这啥意思呢,赶紧看了一下纸条,那竟然是一张账单,上面清晰写着:咨询付费总额 xxx天堂币。

卧槽,我什么时候要付费咨询了,这天堂币又是个什么鬼?

”尼玛···“刚想问候一下,抬手一看人没了,回想起刚才他那么热情给我解答的样子,不禁一声感慨:

全TM是套路啊。

猜你喜欢

转载自blog.csdn.net/weixin_41904238/article/details/104931594