【计算机组成原理】CPU的前世今生

CPU是干什么的

众所周知,计算机只能识别 1 1 1 0 0 0,为什么呢?根本原因在于 C P U CPU CPU 或者说所有的电子元件,只能有两种状态:变 ( 1 ) (1) (1)、不变 ( 0 ) (0) (0)/ 开 ( 1 ) (1) (1)、关 ( 0 ) (0) (0) 。但是知道这个和 C P U CPU CPU有什么关系呢, C P U CPU CPU的根本任务就是执行指令预算,也就是 10 1 0 10, 1010101010101000101010101010101010010101010101010101001 1010101010101000101010101010101010010101010101010101001 1010101010101000101010101010101010010101010101010101001这个过程到底是怎样实现的呢。这就要从 C P U CPU CPU的内部结构开始说起了:

流水线式

C P U CPU CPU并不是等一条指令完成后,再开始第二条指令。而是采用流水线,把 C P U CPU CPU的工作分成个四个流程,当取指令完成后,不是等待而是取第二条指令。
采用流水线技术后,并没有加速单条指令的执行,每条指令的操作步骤一个也不能少,只是多条指令的不同操作步骤同时执行,因而从总体上看加快了指令流速度,缩短了程序执行时间
两种方式比较:

  • 流水线方式:在 t 4 t4 t4时间内,完成了第 1 1 1个指令,第二个指令完成 3 4 \frac{3}{4} 43,第三个指令完成 1 2 \frac{1}{2} 21,第四个指令完成 1 4 \frac{1}{4} 41
  • 串行方式 :在 t 4 t4 t4时间内,完成 1 1 1条指令
    在同一个时间内,流水线方式可以完成更多的指令, C P U CPU CPU的执行效率大大提高。

物理结构

c p u cpu cpu内部主要是由一大堆的运算器、控制器、寄存器组成。
在这里插入图片描述

  • 运算器负责算术运算( + − ∗ / + - * / +/ 基本运算和附加运算)和逻辑运算(包括移位、逻辑测试或比较两个值等)

  • 控制器则高级一点,负责应对所有的信息情况,调度运算器把计算做好。正如工厂的物流分配部门,控制单元是整个CPU的指挥控制中心,由指令寄存器、指令译码器、和操作控制器三个部件组成,对协调整个电脑有序工作极为重要,它根据用户预先编好的程序,以此从存储器中取出各条指令,放在指令存储器中通过指令译码器分析确定应该进行什么操作,最后通过操作控制器按时序,向相应的部件发出微操作控制信号,操作控制器,主要包括 节拍脉冲发生器 控制矩阵 时钟脉冲发生器,复位电路和启停电路等控制逻辑。

  • 寄存器 就稍微复杂一点,既要对接控制器的命令,传达命令给运算器;还要帮运算器记录处理完或者将要处理的数据。CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短,采用寄存器可以减少CPU的访问内存次数,从而提高了CPU的工作速度,但是因为受到芯片面积和集成度所限制,寄存器组的容量不可能很大,寄存器组可分为专用寄存器和通过寄存器,专用寄存器的作用是固定的,分别寄存相应的数据,而通过寄存器通途广泛并可以由程序员规定其用途,通用寄存器的数目因微处理器而异。

  • 在这三种元件外,还有缓存( c a c h e cache cache)(见新的问题小板车);
    总线就像工厂中各个部位之间的联系渠道,总线实际上是一组导线,是各种公共信号线的集合,用于作为电脑中所有各组成部分传输信息公共使用的公路,直接和CPU相连的总线,其中包括 数据总线 地址总线 控制总线 其中书库总线用来传输数据信息 地址总线用于传送CPU发出的地址信息,控制总线用来传送控制信号,时序信号和状态信息等;
    核心显卡等

操作流程(影响CPU性能的主要因素)

C P U CPU CPU的工作原理就像一个工厂对产品的加工过程:进入工厂的原料(程序指令),经过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出成品(处理后的数据)后,再存储在仓库(存储单元)中,最后等着拿到市场上去卖(交由应用程序使用)。在这个过程中,我们注意到从控制单元开始, C P U CPU CPU就开始了正式的工作,中间的过程是通过逻辑运算单元来进行运算处理,交到存储单元代表工作的结束。

主频

首先,指令指针( I n s t r u c t i o n    P o i n t e r Instruction\,\, Pointer InstructionPointer)会通知 C P U CPU CPU,将要执行的指令放置在内存中的存储位置。因为内存中的每个存储单元都有编号(称为地址),可以根据这些地址把数据取出,通过地址总线送到控制单元中,指令译码器从指令寄存器 I R IR IR中拿来指令,翻译成 C P U CPU CPU可以执行的形式,然后决定完成该指令需要哪些必要的操作,它将告诉算术逻辑单元( A L U ALU ALU)什么时候计算,告诉指令读取器什么时候获取数值,告诉指令译码器什么时候翻译指令等等。
假如数据被送往算术逻辑单元,数据将会执行指令中规定的算术运算和其他各种运算。当数据处理完毕后,将回到寄存器中,通过不同的指令将数据继续运行或者通过 D B DB DB总线送到数据缓存器中。
基本上, C P U CPU CPU就是这样去执行读出数据、处理数据和往内存写数据3项基本工作。但在通常情况下,一条指令可以包含按明确顺序执行的许多操作, C P U CPU CPU的工作就是执行这些指令,完成一条指令后, C P U CPU CPU的控制单元又将告诉指令读取器从内存中读取下一条指令来执行。这个过程不断快速地重复,快速地执行一条又一条指令,产生你在显示器上所看到的结果。我们很容易想到,在处理这么多指令和数据的同时,由于数据转移时差和 C P U CPU CPU处理时差,肯定会出现混乱处理的情况。为了保证每个操作准时发生 C P U CPU CPU需要一个时钟,时钟控制着 C P U CPU CPU所执行的每一个动作。时钟就像一个节拍器,它不停地发出脉冲,决定CPU的步调和处理时间,这就是我们所熟悉的CPU的标称速度,也称为主频。主频数值越高,表明 C P U CPU CPU的工作速度越快。

架构

在这里插入图片描述
4 4 4 C P U CPU CPU就是拥有四个独立的中央机构,都具备相同的工作能力和权限,但是每个核心都会负责不同的事务。 4 4 4 8 8 8线程就是四个独立的中央机构,每一个中央机构都拥有两套完整的工作班子,每套工作班子权限也一样。
这时候问题又出现了,例如某个中央机构负责的事特别多,忙不过来,而其他的中央机构负责的事很少,闲的发慌,那怎么办?这时候,我们的架构又出现了,好办!今天你这个核心负责的事多,就你来主导,让其他事少的核心辅助你工作。明天另外一个核心负责的事多,就由它来主导,其他核心辅助它工作。

工厂比喻

如果这么说你理解不了,没有关系,我们用一个例子来说明一下:假设
CPU 是一个工厂,一个核心就是工厂的一个车间

  • 运算器 就是工厂里的普工,只负责生产(运算)
  • 寄存器 就是一个工具人,有时需要传递信息(数据),有时需要搬运物资(数据)。
  • 控制器则是车间主管,管理调剂所有普工和工具人,压榨他们的劳动价值。

新的问题

但是,渐渐的,又有新问题出现,工具人虽然效率高,但是数量不多,而随着越来越多的原材料(数据)涌入,工具人搬不过来。这时工厂就整了一个小板车( c a c h e cache cache),专门用来运输、寄存工具人搬不过来的数据,而且各工厂可以共享其中一部分( i n t e l intel intel L 3    c a c h e L3\,\,cache L3cache)。
直到有一天,工厂发现一个==车间(核心)==效率不够,就只能增加车间(核心)来提高整个工厂效率,这就是核心。
随着车间数量(核心数目)增加到八,工厂发现有些时候出货量挺高的(全车间都开工),但有些时候只有一两个个车间开工,其它车间都在围观(调度问题)。而且整个工厂一起开工,用电量和发热量也急剧上升,但是各车间的效率(频率)就是上不去,此外,还要担心电力供给、散热、物资(数据)运输等各类问题。终于,在投入了大研发后,工厂的厂房布局设计(架构)有了大改进,各部门之间的交通更便利了;并且,工厂也重新招聘短小精悍的工人(提升制程工艺),将以前那种牛高马大,光吃不干的大块头全部淘汰了。至此,同样大的车间,能融入更多的工人干活了,而且短小精悍的工人,吃的饭还少(功耗低)
C P U CPU CPU处理数据的一个大单位,理论上来说,核心数越多,干活的效率越高,或者说可以同时干的事情越多,就像一个工厂,这个车间可以生产这个零部件,那个车间可以生产另外一个零部件。

其他概念

进程和线程

进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位。
线程是 C P U CPU CPU调度和分配的基本单位。我们打开的聊天工具,浏览器都是一个进程。进程可能有多个子任务,比如聊天工具要接受消息,发送消息,这些子任务就是线程。资源分配给进程,线程共享进程资源。

线程切换

C P U CPU CPU给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。从保存线程 A A A的状态再到切换到线程 B B B时,重新加载线程B的状态的这个过程就叫上下文切换。而上下切换时会消耗大量的CPU时间。

线程开销

上下文切换消耗线程创建和消亡的开销线程需要保存维持线程本地栈,会消耗内存

串行,并发与并行

  • 串行:多个任务,执行时一个执行完再执行另一个。比喻:吃完饭再看视频。
  • 并发:多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。比喻:一会跑去厨房吃饭,一会跑去客厅看视频。
  • 并行:每个线程分配给独立的核心,线程同时运行。比喻:一边吃饭一边看视频。

多核下线程数量选择

  • 计算密集型程序:主要为复杂的逻辑判断和复杂的运算 C P U CPU CPU的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。
  • I O IO IO密集型程序:主要为 I O IO IO操作,比如磁盘 I O IO IO(读取文件)和网络 I O IO IO(网络请求)。因为 I O IO IO操作会阻塞线程, C P U CPU CPU利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高 C P U CPU CPU利用率。

总结

提高性能的一种方式:提高硬件水平,处理速度(主频)或核心数。另一种方式:根据实际场景,合理设置线程数(架构),软件上提高cpu利用率。

参考资料

认识CPU的工作原理
CPU科普文:5分钟让你看懂CPU的结构和工作原理

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一拳Marx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值