程序员需要了解的硬核知识之CPU

大家都是程序员 , 大家都是和计算机打交道的程序员 , 大家都是和计算机中软件硬件打交道的程序员 , 大家都是和CPU打交道的程序员 , 所以 , 不管你是玩儿硬件的还是做软件的 , 你的世界都少不了计算机最核心的 - CPU
CPU是什么CPU 的全称是 Central Processing Unit , 它是你的电脑中最硬核的组件 , 这种说法一点不为过 。 CPU 是能够让你的计算机叫计算机的核心组件 , 但是它却不能代表你的电脑 , CPU 与计算机的关系就相当于大脑和人的关系 。 它是一种小型的计算机芯片 , 它嵌入在台式机、笔记本电脑或者平板电脑的主板上 。 通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU 。这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算 , 也就是说 CPU 决定了你电脑的计算能力 。
程序员需要了解的硬核知识之CPU文章插图
CPU 实际做什么CPU 的核心是从程序或应用程序获取指令并执行计算 。 此过程可以分为三个关键阶段:提取 , 解码和执行 。 CPU从系统的 RAM 中提取指令 , 然后解码该指令的实际内容 , 然后再由 CPU 的相关部分执行该指令 。
RAM : 随机存取存储器(英语:Random Access Memory , 缩写:RAM) , 也叫主存 , 是与 CPU 直接交换数据的内部存储器 。 它可以随时读写(刷新时除外) , 而且速度很快 , 通常作为操作系统或其他正在运行中的程序的临时数据存储介质
CPU 的内部结构说了这么多 CPU 的重要性 , 那么 CPU 的内部结构是什么呢?又是由什么组成的呢?下图展示了一般程序的运行流程(以 C 语言为例) , 可以说了解程序的运行流程是掌握程序运行机制的基础和前提 。
程序员需要了解的硬核知识之CPU文章插图
在这个流程中 , CPU 负责的就是解释和运行最终转换成机器语言的内容 。
CPU 主要由两部分构成:控制单元 和 算术逻辑单元(ALU)

  • 控制单元:从内存中提取指令并解码执行
  • 算数逻辑单元(ALU):处理算数和逻辑运算
CPU 是计算机的心脏和大脑 , 它和内存都是由许多晶体管组成的电子部件 。 它接收数据输入 , 执行指令并处理信息 。 它与输入/输出(I / O)设备进行通信 , 这些设备向 CPU 发送数据和从 CPU 接收数据 。
从功能来看 , CPU 的内部由寄存器、控制器、运算器和时钟四部分组成 , 各部分之间通过电信号连通 。
程序员需要了解的硬核知识之CPU文章插图
  • 寄存器是中央处理器内的组成部分 。 它们可以用来暂存指令、数据和地址 。 可以将其看作是内存的一种 。 根据种类的不同 , 一个 CPU 内部会有 20 - 100个寄存器 。
  • 控制器负责把内存上的指令、数据读入寄存器 , 并根据指令的结果控制计算机
  • 运算器负责运算从内存中读入寄存器的数据
  • 时钟 负责发出 CPU 开始计时的时钟信号
接下来简单解释一下内存 , 为什么说 CPU 需要讲一下内存呢 , 因为内存是与 CPU 进行沟通的桥梁 。 计算机所有程序的运行都是在内存中运行的 , 内存又被称为主存 , 其作用是存放 CPU 中的运算数据 , 以及与硬盘等外部存储设备交换的数据 。 只要计算机在运行中 , CPU 就会把需要运算的数据调到主存中进行运算 , 当运算完成后CPU再将结果传送出来 , 主存的运行也决定了计算机的稳定运行 。
主存通过控制芯片与 CPU 进行相连 , 由可读写的元素构成 , 每个字节(1 byte = 8 bits)都带有一个地址编号 , 注意是一个字节 , 而不是一个位 。 CPU 通过地址从主存中读取数据和指令 , 也可以根据地址写入数据 。 注意一点:当计算机关机时 , 内存中的指令和数据也会被清除 。
CPU 是寄存器的集合体在 CPU 的四个结构中 , 我们程序员只需要了解寄存器就可以了 , 其余三个不用过多关注 , 为什么这么说?因为程序是把寄存器作为对象来描述的 。
说到寄存器 , 就不得不说到汇编语言 , 我大学是学信息管理与信息系统的 , 我就没有学过汇编这门课(就算有这门课也不会好好学hhhh) , 出来混总是要还的 , 要想作为一个硬核程序员 , 不能不了解这些概念 。 说到汇编语言 , 就不得不说到高级语言 , 说到高级语言就不得不牵扯出语言这个概念 。
计算机语言我们生而为人最明显的一个特征是我们能通过讲话来实现彼此的交流 , 但是计算机听不懂你说的话 , 你要想和他交流必须按照计算机指令来交换 , 这就涉及到语言的问题 , 计算机是由二进制构成的 , 它只能听的懂二进制也就是机器语言 , 但是普通人是无法看懂机器语言的 , 这个时候就需要一种电脑既能识别 , 人又能理解的语言 , 最先出现的就是汇编语言 。 但是汇编语言晦涩难懂 , 所以又出现了像是 C , C++ , Java 的这种高级语言 。