CPU,寄存器,缓存,内存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aliang_godlike/article/details/78993410

CPU是什么?

我们通过计算机的输入设备(键盘,鼠标,触摸屏啊啥的)给计算机下达指令还有参数,计算机就是通过CPU计算出结果,然后通过输出设备(显示屏,打印机等)把运算结果传达给我们。这里的CPU就是扮演着核心角色,从CPU的名称也可以看出来他的地位:Central Processing Unit,中文名就是中央处理器。那CPU由哪些部分组成呢?按照我的理解,我把CPU分为两个部分:一部分是控制单元和逻辑运算单元,这部分的功能肯定就是进行运算和控制数据的流进流出了。那它从哪得到数据,运算的结果又放到哪呢?这就是第二部分的功能了。

寄存器(Register)和缓存(Cache)

上面谈了CPU的第一部分,现在聊聊CPU的第二个组成部分。第一部分负责运算和控制数据的流进流出,这里的数据就是由第二部分存储单元,也就是寄存器传输的。控制单元控制寄存器和算术单元交换数据(CPU内部交换),寄存器就像中间层一样,因为寄存器也和CPU的外存也就是我们所谓的内存交换数据(CPU和外部交换)。而内存还可以和计算机的磁盘(硬盘或软盘)等交换数据。这里有个问题,寄存器的存取速度是非常非常快的,内存和寄存器一比,速度太慢太慢。寄存器从内存那存取数据的时候,运算单元只能在那干等了,这样时间不就浪费了吗?所以后来产生了高速缓存区(这里的缓存可不是我们写程序经常提到的“缓存”)这么个玩意儿。寄存器从内存那读取的数据或指令可能会有一部分重复性极高,把这部分数据或指令放到离CPU更近的地方,这样不就节省了时间,所以高速缓存区就是这么个作用。Linux可以通过lscpu来查看CPU各项参数,我用我的2011年笔记本老爷机来演示下。

我选几个参数说明下:

  • Architecture:CPU采用的架构,这里是x86_64架构,架构就是一种规范吧。因为英特尔有一款芯片叫8086,后来又有了80286,80386,都是以86结尾的,所以这一系列也就叫x86系列了。x86应该是个人PC最流行的系列了,一开始是32位,后来出了64位,为了区分,所以给x86的64位命名为x86_64。你的机器能不能装64位系统就看他的了,64位CPU可以装32和64位的系统,32位的CPU只能装32位系统了,不过现在32位CPU应该灭绝了吧。
  • CPU(s):CPU核数。
  • CPU max:2100 MHz,2100*1000*1000次动作每秒,每个动作包含一些指令。因为不同CPU的指令集是不一样的,所以这个参数只能和同系列CPU相比。
  • L1 d Cache:一级缓存区,缓存数据
  • L1 i Cache:一级缓存区,缓存指令
  • L2 Cache:二级缓存,速度没一级快
  • L3 Cache:三级缓存,速度没二级快(缓存区不是越多越好的,虽然数据缓存了读起来快,但是找起来也是要时间的,100个缓存区,一个个找,找不到就去内存找,还不如直接读内存了)

捋一下目前所谈到的:寄存器先去L1读,读不到就到L2,再读不到就到L3,再读不到就只能读内存了,读到了就叫命中,读不到就没命中,这里又涉及命中算法了。

内存(Memory)

内存这个词太常见了,我们下的软件游戏和文档等等肯定是放到硬盘里的,想运行或查看?那就得把硬盘的数据读到内存里,然后我们就可以看到游戏的刀光剑影,word文档的内容了。刀光剑影和尚未保存的文档,都是在内存里的,断电就么的了,所以只要不存盘,写到磁盘里,下次打开就白白工作了。至于内存又分为RAM和ROM,一个是随即读取内存,一个是只读内存(BIOS的用户设置就是会写进ROM的),RAM中的数据可读可写,但断电就消失,而ROM的数据只允许一次写入永久只能读,断电了还是存在的。

磁盘缓存

寄存器速度是最快的,其次是高速缓存区,然后内存,然后磁盘。既然寄存器和内存之间可以介入缓存,那内存和磁盘呢?当然也是有缓存的,这个缓存就是磁盘缓存了,速度位于内存和磁盘之间,这个缓存的空间可就比高速缓存大多了。

总结

CPU分为运算部分和存储部分,运算部分的所需数据只能从CPU的寄存器存取,寄存器会先从高速缓存区读取数据,不命中才会从内存读数据。而内存中的数据也是先从磁盘缓存区(disk cache)读数据,或者在磁盘缓冲区(disk buffer)存数据,最后才会交际最慢的磁盘。

猜你喜欢

转载自blog.csdn.net/aliang_godlike/article/details/78993410