中央处理器(CPU)是整个计算机的中心,也是整个计算机系统最难的部分,我将用最浅显易懂的方式带你领略数据通路的分析、指令执行阶段的节拍与控制信号、指令流水线等等问题,这篇文章将让你对整个计算机系统有一个最基本的理解,从此只要别人一提到CPU,你的脑海当中一定可以浮现出CPU的动态动态概念图,如果有考研的小伙伴,我相信这篇文章也一定能够带给你不一样的体验。
由于CUP内容庞杂,且很多知识不好理解,我仅仅只是在学习CPU的过程当中,从基础概念到深度理解再到刷题的过程我用了将近20个小时,所以CPU系列我将为大家分成上、中、下三个篇章来依次为大家讲解。
提示:以下是本篇文章正文内容,下面案例可供参考
中央处理器(CPU)有运算器和控制器组成,这也是整个CPU最为核心的部件。
控制器:负责协调并控制计算机各部件的指令序列,包括取指令、分析指令、执行指令。
运算器:对数据进行加工,例如算术运算、逻辑运算等。
详解:
- 可能还有小伙伴对于程序的概念不太理解,我们平常在用电脑的时候我们所下载的一个个APP其实就是一个程序,例如QQ、微信等等,我们平常所见的QQ.exe就是一个程序。
- 我们只要对程序用鼠标双击(运行),这个时候程序就会借助I/O总线从磁盘(外存)当中直接加载到内存当中,这里用到了一种传输技术叫做DMA(直接存取存储技术),DMA使得程序不经过CPU可以直接到内存当中,DMA后续在讲到《深度理解I/O设备》的时候会为大家介绍,今天就不做过多的说明了。
- 程序由两个部分组成(指令+数据),这也就是为什么程序的执行总是伴随着指令的存在,指令其实就是命令,他是告诉CPU想要对数据进行怎样的加工,例如ADD指令就是要对数据做加法运算(我的上一篇文章已经为大家详细地介绍了指令的全部细节,今天在这里就不做过的介绍了)。
- 程序加载到主存以后,会通过总线(地址总线、数据总线、控制总线)将相应的指令以及数据传输到CPU,这个时候就是CPU要开始工作的时候了。
- 而且当程序进入到内存以后(内存是一个存放字节序列的线性数组,所以以后只要一提到内存就要想到这样的一个数组)。
- 内存就是主存,之前说过程序是由指令和数据两个部分组成的,所以程序到达内存以后,会自动被拆分成两个部分,并且按照一定的次序排列好。
- 排列好以后,将通过总线和CPU进行交互,详情见下图:
在这里已经为大家做好了铺垫,接下来我们将进入今天最精彩的内容。
在计算机系统当中,中央处理器主要由两大部分组成,具体组成见下图。
运算器接受从控制器送来的命令执行相应的动作,对数据进行加工处理,运算器是对数据进行加工处理的中心,它主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器(Ri)、程序状态字寄存器、移位器、计数器(CT)等部件组成。
注释:运算器内部的寄存器远不止这些,上文当中只是对运算器内部做了一个简要的介绍,你只需要知道运算器的核心就是ALU(算术逻辑单元)他就是用来计算的,至于他是怎么完成计算的,计算的原理以及电路是怎样实现的,这个我们不需要知道,当然如果有小伙伴很感兴趣的话可以后续学习一下《数字电路》、《数字电子技术》这两门课程(真的是太难了,博主表示头发快不够用了),那么其他的一系列寄存器就是为了帮助ALU完成运算就可以了,CPU内部的所有寄存器都是通过内部总线完成交路的,各部件之间通过系统总线相连,不过这个后续的文章我会为大家进行讲解。
这部分的内容才是我们接下来要进行重点讲解的部分,前面都只是小试牛刀而已。控制器是整个CUP的指挥中枢,相当于我们人类大脑的中枢神经,只有在控制器的指挥下运算器、存储器、寄存器、输入输出设备才有可能构成一个完整的有机体,才能够顺利地合作下去,每一条指令之所以能够执行就是因为控制器发出了一些列的微操作命令,在背后进行着指挥。
注意:计算机当中的寄存器可以分为两种,一类是用户可见的,一类是用户不可见的。
在为大家介绍了上述的一系列的基础知识以后,现在将CPU到底是如何工作的为大家做一个详细的总结。
当程序(指令和数据的集合)运行进入到内存(存放字节序列的先行数组)以后,汇编指令、运算要用到的数据都按照一定的次序存放在内存当中,控制总线会最先决定CPU要到内存当中是进行读操作还是写操作,决定读操作以后,这个时候首先CPU要从内存当中通过MAR寄存器取走(复制)指令的地址,然后再由MAR寄存器将指令的地址复制给PC,PC会存放来自MAR的指令地址。
紧接着内存通过数据总线将指令本身传递给MDR寄存器,当然这个时候依然需要控制总线来决定CPU到内存当中进行读操作还是写操作,指令传递给MDR以后,MDR会将指令复制给IR寄存器,IR寄存器将指令进行拆分,其中指令的操作码部分(说明指令的类型,操作数要进行怎样的操作)传递给控制单元(CU),控制单元进行指令的译码,翻译以后CU会发出控制信号,告诉ALU(算术逻辑单元)接下来要进行怎样的操作。
而指令的另外一部分地址码(操作数的地址)则会被IR传送给MAR,MAR会根据操作数的地址通过地址总线将数据从内存当中取回。
取回的操作数会被存放在CPU当中的通用寄存器(通常由16个,每个操作数存占用一个寄存器)当中,这时候ALU由于已经接到了CU的控制信号,那么他就会从通用寄存器当中取出操作数,这个时候ALU会进行一系列的运算(算数运算、逻辑运算),当然ALU当中也有一系列的寄存器来辅助ALU进行运算,如ACC(累加寄存器)、MQ(商除寄存器)、X(操作数寄存器)等。
ALU运算工作完成以后会将结果在放回CPU的通用寄存器当中,CPU会将结果复制到MDR中,控制总线这个时候会发出控制命令,命令CPU到内存当中进行写操作,将运算结果再写入内存当中,传输数据的时候通过数据总线。
这个时候其实还会出现一个新的问题,就是ALU计算后将结果写回通用寄存器中所用的时间是CPU访问内存的1%,也就是CPU的性能远远超过了内存,两者之间相互访问的速度差太大,为了解决这一问题引入了高速缓冲寄存器。他的访问速度远远快与访问内存,所以将内存当中的数据在这里做一个备份,CPU可以直接访问缓存,这样就大大地提高了系统的效率。
拓展1——主存
1.结构组成
1)存储体、MDR、MAR。2)内存本质上是一个存储字节的线性数组,这个数组中的存储单元存储着数据、指令等内容,每一个存储单元旁边都有唯一的二进制地址来对其进行唯一的标识。
2.概念图
3.概念图详解:
1)存储体当中有着许多的存储单元,每个存储单元都有着一个存储元件,每一个存储元件都可以存储一个比特位(0或1)。2)MDR存储着数据、MAR存放着数据的地址。
3)这两个寄存器虽然是主存的组成部分但是却集成在CPU的芯片上面,这两个寄存器是连接处理器(CPU)和主存的桥梁。
拓展2——进程与线程
1)进程的概念:
我们将代码写好以后会以文件的形式存放在磁盘当中,这个时候他是一个程序,当我们运行他以后,他会借助主机的一项技术(DMA,直接存储存取技术),此时磁盘当中的程序可以不经过CPU而直接复制到内存当中,这个就是我们平常所说的进程(进程就是程序的一次活动、进程就是程序的抽象,一个程序可以产生很多个进程)。
2)线程的概念:
既然提到了进程的概念那么就不得不谈一谈线程的概念,线程就是轻量级的进程,一个进程当中可以包含很多个线程,线程在进程当中资源共享并且相互独立,彼此间互不干扰。
可能说到这里依然会有很多的小伙伴感到很困惑,感觉线程还是很抽象,其实我只要举个例子大家就能很容易的明白了,相比大家都对360杀毒软件有着很深的了解,那么我们就以他为例,360这个软件本身只是一个程序,你只要不去碰它,他就是一个在磁盘的文件当中存放的一个程序,但是只要我们双击这个程序,这个程序就会立刻在内存当中形成一个进程,这个时候我们的任务管理器就有了360这个进程,那么360这个软件当中是由很多的子功能的,其中包括(木马查杀、垃圾清理、病毒扫描等等一系列的子功能),那么请问这些子功能之间的实现是否相互干扰呢?他们之间是否彼此独立呢?答案是肯定的,垃圾清理和病毒扫描之间是可以同时进行的,这些子功能就是这个进程里面的线程,如果没有这些线程的话,那么这些子功能只能按照顺序来执行,显然这样会降低程序执行的效率。
3)并发和并行的概念:
并发:指在一个时间间隔内进程或线程按照一定的次序(涉及到调度算法,这里就不做详细的介绍了)先后执行,从宏观上来看是同时发生的,但是从微观角度上来看的话其实是一个一个来执行的。
并行:这个就是严格意义上讲的同时运行,在同一时刻同时运行,并行是有着一定的物理极限的,一个CPU通常每次只能运行一个线程,现代计算机(四核八线程),四个CPU每次可以运行八个线程,这就好比我们每个人只有两只手同一时刻只能同时做两件事一样,但是在一个时间间隔内,虽然我们只有两只手但却可以做很多件事情,前者是并行后者是并发。
CPU的基本功能已经为大家讲解完了,希望大家能够从我的文章当中有所收获,那么下一篇文章将会带大家认识指令具体的执行过程,以及数据流的概念。