【降维打击,带你深度学习CPU(上)】

系列文章目录

1.《带你深挖计算机底层逻辑,打通你计算机基础知识的任督二脉》

2.《深度学习计算机底层原理,深度剖析存储器》

3.《基于内存全面理解高速缓冲存储器》

4.《深度学习计算机指令系统,彻底搞懂指令十大寻址方式》

5.《降维打击,带你深度学习CPU(上)》



前言

        中央处理器(CPU)是整个计算机的中心,也是整个计算机系统最难的部分,我将用最浅显易懂的方式带你领略数据通路的分析、指令执行阶段的节拍与控制信号、指令流水线等等问题,这篇文章将让你对整个计算机系统有一个最基本的理解,从此只要别人一提到CPU,你的脑海当中一定可以浮现出CPU的动态动态概念图,如果有考研的小伙伴,我相信这篇文章也一定能够带给你不一样的体验。

        由于CUP内容庞杂,且很多知识不好理解,我仅仅只是在学习CPU的过程当中,从基础概念到深度理解再到刷题的过程我用了将近20个小时,所以CPU系列我将为大家分成上、中、下三个篇章来依次为大家讲解。


提示:以下是本篇文章正文内容,下面案例可供参考

一、CPU的功能

1概述

        中央处理器(CPU)有运算器和控制器组成,这也是整个CPU最为核心的部件。

        控制器:负责协调并控制计算机各部件的指令序列,包括取指令、分析指令、执行指令。

        运算器:对数据进行加工,例如算术运算、逻辑运算等。

 

2.功能

  1. 指令控制:完成取指令、分析指令和执行指令的操作,也就是程序的顺序控制。
  2. 操作控制:一条指令的功能往往由若干操作信号的组合来实现,我们都知道指令最开始是存放在主存当中的,那么指令是如何到CPU当中来的呢?这也就是CPU的另外一个功能,CPU管理并产生相应的信号,指挥主存取出指令并且送往CPU当中,不仅如此CPU还将产生各种信号用以操作其他相应的部件按指令的要求进行操作。
  3. 时间控制:各种操作在时间上都有一个时间控制,时间控制位每条指令按时间顺序提供应有的控制信号。
  4. 数据加工:对数据进行一系列的运算,例如算术运算和逻辑运算。
  5. 中断处理:对计算机运行过程中出现的异常情况和特殊情况进行处理(针对异常和中断我在后续的篇章当中会为大家进行讲解)。

详解:

  1. 可能还有小伙伴对于程序的概念不太理解,我们平常在用电脑的时候我们所下载的一个个APP其实就是一个程序,例如QQ、微信等等,我们平常所见的QQ.exe就是一个程序。
  2. 我们只要对程序用鼠标双击(运行),这个时候程序就会借助I/O总线从磁盘(外存)当中直接加载到内存当中,这里用到了一种传输技术叫做DMA(直接存取存储技术),DMA使得程序不经过CPU可以直接到内存当中,DMA后续在讲到《深度理解I/O设备》的时候会为大家介绍,今天就不做过多的说明了。
  3. 程序由两个部分组成(指令+数据),这也就是为什么程序的执行总是伴随着指令的存在,指令其实就是命令,他是告诉CPU想要对数据进行怎样的加工,例如ADD指令就是要对数据做加法运算(我的上一篇文章已经为大家详细地介绍了指令的全部细节,今天在这里就不做过的介绍了)。
  4. 程序加载到主存以后,会通过总线(地址总线、数据总线、控制总线)将相应的指令以及数据传输到CPU,这个时候就是CPU要开始工作的时候了。
  5. 而且当程序进入到内存以后(内存是一个存放字节序列的线性数组,所以以后只要一提到内存就要想到这样的一个数组)。
  6. 内存就是主存,之前说过程序是由指令和数据两个部分组成的,所以程序到达内存以后,会自动被拆分成两个部分,并且按照一定的次序排列好。
  7. 排列好以后,将通过总线和CPU进行交互,详情见下图:

 

在这里已经为大家做好了铺垫,接下来我们将进入今天最精彩的内容。 


二、CPU的基本结构 

1.概述

        在计算机系统当中,中央处理器主要由两大部分组成,具体组成见下图。

2.运算器

        运算器接受从控制器送来的命令执行相应的动作,对数据进行加工处理,运算器是对数据进行加工处理的中心,它主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器(Ri)、程序状态字寄存器、移位器、计数器(CT)等部件组成。

  1. 算术逻辑单元:主要功能时进行算术运算和逻辑运算。
  2. 暂存寄存器:从主存当中读取出来的数据,而且这些数据不能够存放在通用寄存器当中,在进行运算之前必须先存放到运算器的暂存器当中去,否则其原有的内容很有可能就会丢失,暂存器对程序员是透明的(程序员不可见也不可修改)。
  3. 累加寄存器(ACC):用于暂时存放ALU运算结果的信息,也可以作为加法运算的一个输入端,通常处理但地址指令的运算(详情见上一篇文章《深度理解计算机指令系统》)。
  4. 通用寄存器:用于存放操作数(源操作数、目的操作数)、运算后的结果以及各种的地址信息。
  5. 程序状态字寄存器(PSW):ALU运算完成以后,运算结果必然会产生很多的运算状态,例如溢出标志(OF),符号标志(SF)用来标记操作结果的正负等等标志。
  6. 移位器:ALU在对操作数在进行运算的时候难免会发生移位的操作,这由移位器进行处理。
  7. 计数器(CT):控制乘除运算的操作步骤进行一个计数,一共运算几步,到第几步的时候结束运算。

        注释:运算器内部的寄存器远不止这些,上文当中只是对运算器内部做了一个简要的介绍,你只需要知道运算器的核心就是ALU(算术逻辑单元)他就是用来计算的,至于他是怎么完成计算的,计算的原理以及电路是怎样实现的,这个我们不需要知道,当然如果有小伙伴很感兴趣的话可以后续学习一下《数字电路》、《数字电子技术》这两门课程(真的是太难了,博主表示头发快不够用了),那么其他的一系列寄存器就是为了帮助ALU完成运算就可以了,CPU内部的所有寄存器都是通过内部总线完成交路的,各部件之间通过系统总线相连,不过这个后续的文章我会为大家进行讲解。

3.控制器 

        这部分的内容才是我们接下来要进行重点讲解的部分,前面都只是小试牛刀而已。控制器是整个CUP的指挥中枢,相当于我们人类大脑的中枢神经,只有在控制器的指挥下运算器、存储器、寄存器、输入输出设备才有可能构成一个完整的有机体,才能够顺利地合作下去,每一条指令之所以能够执行就是因为控制器发出了一些列的微操作命令,在背后进行着指挥。

  1. 程序计数器(PC):用于存放当前指令的地址,以及用于指向下一条指令的地址所在,指令通常是顺序执行的(也有跳转执行的),所有PC有自增共功能
  2. 指令寄存器(IR):用于保存当前正在执行的指令,并且将指令拆分成地址码和操作码两个部分,将地址码传送给MAR,将操作码传送给指令译码器进行译码,这也算是个中转站的作用吧。
  3. 指令译码器:仅对操作码字段进行翻译,因为操作码字段携带者指令的各种信息,指令的类型是加法运算还是减法运算还是移位运算等等,都需要指令译码器对其进行翻译。
  4. 存储器地址寄存器(MAR):用于存放要访问的主存的存储单元的地址。
  5. 存储器数据寄存器(MDR):用于存放要向主存当中读出或者写入的信息。
  6. 时序系统:有系统分频控制产生各类的时许信号。
  7. 微操作信号发生器:发出控制整个计算机系统的信号,电脑的中枢神经。

注意:计算机当中的寄存器可以分为两种,一类是用户可见的,一类是用户不可见的。


三、CPU工作原理

  

 在为大家介绍了上述的一系列的基础知识以后,现在将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的基本功能已经为大家讲解完了,希望大家能够从我的文章当中有所收获,那么下一篇文章将会带大家认识指令具体的执行过程,以及数据流的概念。


你的支持就是我最大的动力,请问你学会了吗

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清灵白羽 漾情天殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值