【计组详析】CPU的前世今生

  • CPU是干什么的
    • 流水线式
  • 物理结构
  • 操作流程(影响CPU性能的主要因素)
    • 主频
    • 架构
  • 工厂比喻
  • 新的问题
  • 其他概念
    • 进程和线程
      • 线程切换
      • 线程开销
    • 串行,并发与并行
    • 多核下线程数量选择
    • 总结
  • 参考资料

CPU是干什么的

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

流水线式

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

  • 流水线方式:在t4t4t4时间内,完成了第111个指令,第二个指令完成34\frac{3}{4}43​,第三个指令完成12\frac{1}{2}21​,第四个指令完成14\frac{1}{4}41​
  • 串行方式 :在t4t4t4时间内,完成111条指令
    在同一个时间内,流水线方式可以完成更多的指令,CPUCPUCPU的执行效率大大提高。

物理结构

cpucpucpu内部主要是由一大堆的运算器、控制器、寄存器组成。

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

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

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

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

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

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

主频

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

架构


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

工厂比喻

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

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

新的问题

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

其他概念

进程和线程

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

线程切换

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

线程开销

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

串行,并发与并行

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

多核下线程数量选择

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

总结

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

参考资料

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

【计算机组成原理】CPU的前世今生相关推荐

  1. 计算机组成原理 控制器.ppt,计算机组成原理(CPU的控制器部件)课件.ppt

    <计算机组成原理(CPU的控制器部件)课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<计算机组成原理(CPU的控制器部件)课件.ppt>文档 ...

  2. 计算机组成原理单周期mips,计算机组成原理CPU单周期数据通路(MIPS)

    计算机组成原理CPU单周期数据通路(MIPS) [计算机组成原理]CPU:单周期数据通路(MIPS) 寄存器传送语言RTL 1)R(r)表示寄存器r的内容 2)M(address)表示主存储器地址ad ...

  3. 计算机组成原理CPU与译码器,计算机组成原理CPU的结构和功能.ppt

    计算机组成原理CPU的结构和功能 算术逻辑单元 状态条件寄存器 程序记数器PC 地址寄存器AR 地址总线ABUS 数据总线DBUS 累加器AC 缓冲寄存器DR CPU ALU 指令寄存器IR 指令译码 ...

  4. 简单了解计算机组成原理 -- CPU与操作系统

    本文主要是从程序运行来看计算机组成原理 我们平时常说的程序, 大多指的是一个可执行文件 .exe, 当双击 .exe文件运行时, 操作系统就会读取这个文件, 将其加载到内存中, 由CPU中的寄存器读取 ...

  5. 概念模型计算机实验总结,计算机组成原理——cpu的简单模型实验报告

    #cpu与简单模型机 姓名:学号: 班级:计科班 实验名称:CPU与简单模型机实验性质:综合型实验时间:2018.12.1 一.实验目的 (1) 掌握一个简单 CPU 的组成原理. (2) 在掌握部件 ...

  6. 计算机组成原理 cpu图,计算机组成原理和结构图式(第三章 CPU子系统)(示例代码)...

    计算机组成原理和结构图式(第三章 CPU子系统) 1.运算部件 ?图3-39 M:存储部件(存储单元在存储部件中) R:通用寄存器组 ALU:逻辑运算部件 任务:输入/直送,加工,输出 运算器构成 输 ...

  7. 计算机组成原理cpu模型详解,计算机组成原理第九讲(CPU模型).ppt

    <计算机组成原理第九讲(CPU模型).ppt>由会员分享,可在线阅读,更多相关<计算机组成原理第九讲(CPU模型).ppt(29页珍藏版)>请在装配图网上搜索. 1.计算机组成 ...

  8. 计算机组成原理——cpu的简单模型实验报告

    #cpu与简单模型机 姓名: 学号: 班级:计科班实验名称:CPU与简单模型机 实验性质:综合型实验 时间:2018.12.1 一.实验目的 (1) 掌握一个简单 CPU 的组成原理. (2) 在掌握 ...

  9. 计算机组成原理 — CPU — 流水线与执行周期

    目录 文章目录 目录 CPU 流水线 时钟周期.机器周期.指令周期和总线周期 CPU 流水线 不同的 CPU 指令集架构在执行指令的过程会有所差别,以经典的 RISC(精简指令集架构)为例,存在以下步 ...

  10. 计算机组成原理 — CPU — 指令集架构类型

    目录 文章目录 目录 主流 CPU 指令集架构 CISC(复杂指令集计算机) x86 系列处理器 RISC(精简指令集计算机) ARM 系列处理器 PowerPC 系列处理器 MIPS 架构 RISC ...

最新文章

  1. 如何彻底禁用VS 2008的智能感知功能
  2. TypeScript类型检查机制
  3. UE4版本和vs版本的对应关系
  4. lz4压缩算法--速度之王
  5. 《九章算术》中更相减损术----求最大公约数
  6. 尺度不变特征变换(SIFT算法)Matlab程序代码测试例子的说明(Lowe的代码)
  7. pytorch加载自己的数据集图片格式
  8. dis 密集光流_密集光流估计的自监督注意力机制
  9. [JNI]开发之旅(6)JNI函数中访问java类中对象的属性
  10. 人大经济论坛SAS入门到高级教程
  11. java 钩子程序,在kill 的时候程序平滑退出
  12. 苹果手机怎么查看已连接的wifi密码_如何查看已连接的WiFi密码,可以这样做!...
  13. SLAM学习-论文综述(一)
  14. Java——类与对象
  15. Hexo搭建个人博客(十五)| 酒香也怕巷子深,让百度收录你的站点
  16. 分享一个VS写的PDF打印控件
  17. Debian 下安装中文语言包和中文输入法
  18. 【附源码】计算机毕业设计SSM校园流浪猫关爱系统
  19. ubuntu下命令行禁用笔记本触摸板
  20. 宋晓丽 20190919-6 四则运算试题生成,结对

热门文章

  1. 极智AI | 昇腾 CANN ATC 模型转换
  2. 第一篇:如何在Win10安装iis
  3. 23、基于51单片机温控风扇红外遥控智能温度控制系统设计
  4. iOS 蓝牙开发资料记录
  5. slickedit调试linux内核,SlickEdit介绍
  6. modbusCRC 、CRC-CCITT(0xFFFF) 校验
  7. 由于找不到opencv_world430d.dll,无法继续执行代码的解决办法
  8. 树莓派 3B+ 使用微雪2-CH CAN FD HAT
  9. 【Tomcat】tomcat logs 目录下各日志文件的含义
  10. MoocTest下载出错解决方案