计算机底层运转机制:多核、缓存、CPU、CU、ALU、Cache

  • 现代CPU

    编译型语言与解释型语言如何在计算机底层运行》中提到,计算机依靠编译器源代码(编译型编程代码:C之类)编译成机器码执行,准确说,就是用CPU执行。

  • 冯 诺伊曼架构

    在这里插入图片描述

    ⋅ \cdot 诺伊曼(1945)提出当前计算机的主流架构,包含以下三大部分:

    1. CPU(Central Processing Unit):包含控制单元(Control Unit)、逻辑运算单元(Arithmetic/Logic Unit);
    2. 内存:存储指令、数据;
    3. 输入输出设备;
  • 概念解析

    1. CPU(Central Processing Unit)

      CPU,中央处理器,负责执行用户和操作系统下发的指令。此处指令,是以01二进制形式组织的机器码,在物理底层,01用来控制高低电位。

    2. 指令集

      除了加减指令,CPU的电路还要实现很多其他指令:内存读取、逻辑判断。

      指令控制物理电位,不同电路厂家电路设计不同,则电路上所能进行的二进制码就不同。

      某类CPU能支持一种指令集instruction set architechture),指令集相当于一种设计图纸,规定了一种CPU架构实现哪些指令。

      常见的指令集有:

      • x86:常见
      • ARM:常见
      • MIPS
      • SPARC:龙芯
      • PowerIBM小型机

      有了指令集:

      • 硬件开发人员只需要关心如何设计电路;
      • 软件开发人员只关心如何使用01机器码实现软件功能;
  • 单核CPU的架构

    前面图片展示了冯 ⋅ \cdot 诺伊曼计算机架构,下图展示了一个单核CPU的架构:

    在这里插入图片描述

    其中包含:

    • Control UnitCU):控制单元,协调管理;

    • Arithmetic Logic UnitALU):数学逻辑单元,接受控制单元CU的命令,负责进行加减乘、与或非运算。

    • RegisterALU是负责计算逻辑,具体计算的数据是存放在寄存器Register,几KB大小)中,寄存器以极高的速度(<1纳秒)与CUALU交互。

      寄存器中的数据是临时寄存的,这些数据和指令会被ALUCU拿来立即进行计算,如果寄存器中没有CPU想要的数据,CPU会去内存或硬盘中读取。

    • BUS总线,如果寄存器中没有CPU需要的数据,CPU会去内存或硬盘中读取,这个读取内存或其他设备数据的过程,是通过Bus(总线)来实现,计算机中有多条总线。

    举例说明计算过程:

    对于一个加法运算,计算机需要知道两个问题:

    1. 本次所执行的是哪个指令;
    2. 该指令的执行对象是什么;

    具体过程:

    1. 控制单元CU取指令(Fetch)
    2. 指令译码(Decode)解析出要执行什么指令;
    3. 确认指令是对哪些数据(操作数Operand)进行操作;
    4. 操作数主存加载到寄存器中;
    5. ALU执行指令(Execute)
    6. 结果写回Store
  • 存储金字塔

    计算机的速度瓶颈,已经变成了超高速的CPU运算速度(纳秒级别)与落后的数据读取速度(百纳秒)之间的矛盾。

    CPU计算完成后,要闲置几十倍的时间,等待存取。

    在这里插入图片描述

    CPU的寄存器存取速度极快,但是造价成本太高,发热量大,不能被大量采用。通常,CPU的寄存器只有几KB

    L1 CacheL2 Cache一般设计在CPU上,访问延迟在几~几十纳秒内;

    主存的访问延迟在百纳秒内;

    速度越快,意味着成本越高。所以硬件设计是在现有技术水平、期望计算速度、成本、散热等因素之间所做的trade-off

  • 多核

    当单个CPU主频超过一定范围后,CPU成本散热成了很大的问题,主频很难突破10GHz

    为了获得更快的计算速度和更好的性能,芯片设计者决定绕过主频,采用人海战术,在一块CPU中增加多个核心Core)。

    一个核心一个可以运行指令的独立单元,它包含了ALU寄存器,并配备L1L2 Cache。多个核心共享L3 Cache

    在这里插入图片描述

    上图是一个多核处理器电路图。下图是多个多核处理器

    在这里插入图片描述

    服务器可以支持多个处理器(CPU),支持单个CPU的服务器称为单路服务器;支持两个CPU的服务器称为双路服务器。上图是Intel四路架构,系统支持四个CPU,假如每块CPU内有8个核心,系统可对外提供32核计算能力。

  • 线程与进程

    前面的知识都是硬件层面,而线程进程则是操作系统控制这些硬件而创造的软件概念

    • 进程(Process)

      进程,具有独立的计算资源,如内存空间。

    • 线程(Thread)

      线程,是进程的一个子集。

      一个进程默认启动一个线程,也可以启动多个线程,多个线程共享进程的资源。

    在多核架构出现之前,CPU在特定时刻只能执行某个程序,无法并行。

    因为CPU的处理速度是纳秒级的,在单核时代,为了同时处理多项任务,只能以多线程,CPU切换不同的线程任务。

  • 线程安全问题

    用两个线程针对 i = i + 1进行操作,理论希望是变量被加了两次。而实际情况是:

    1. 两个线程相隔时间短,加上缓存机制,计算的过程和临时结果还在寄存器和L1缓存,尚未写入主存;
    2. 线程B读到的还是主存上比较老的数据;

    就导致出现了数据不一致的情况,就是所谓的线程安全问题

    所以,Python就通过添加GIL锁来保证线程安全。

  • References

  1. 计算机基础 | 多核、缓存…现代CPU是如何工作的
  • 13
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值