CPU-是怎样工作的

32次阅读

共计 3222 个字符,预计需要花费 9 分钟才能阅读完成。

作者:Milap Neupane

翻译:疯狂的技术宅

原文:https://www.freecodecamp.org/…

未经允许严禁转载

CPU,也被称为微处理器,是计算机的大脑。让我们通过深入了解计算机的核心,来帮助自己有效地编写计算机程序。

“工具通常比机器更简单,它一般用手就可以操作,而机器需要被动物或蒸汽动力启动。”

—— Charles Babbage

计算机 是由电力驱动的 机器,但其灵活性和可编程性有助于实现工具的简单性。

CPU 是计算机的大脑。它执行提供给它的指令。它的主要工作是执行算术和逻辑运算并一起编排指令。在深入了解主要部分之前,我们先来看看 CPU 的主要组件以及它们的作用分别是什么:

处理器的两个主要组件

  • 控制单元 — CU(Control unit)
  • 算术和逻辑单元 — ALU(Arithmetic and logical unit)

控制单元 — CU

控制单元 CU 是 CPU 的一部分,用来帮助协调指令的执行,它告诉 CPU 该做什么。根据该指令,激活将 CPU 连接到计算机的其他不同部分的电路,其中包括 ALU。控制单元是 CPU 接收处理指令的第一个组件。

控制单元有两种类型:

  • 硬连线 控制单元
  • 可微编程(微编程)控制单元

硬连线 控制单元是硬件,需要更改硬件来修改它的工作方式;可编程 控制单元可以通过编程来改变其行为。硬连线 CU 在处理指令时更快,而可编程 CU 则更灵活。

算术和逻辑单元 — ALU

算术和逻辑单元 ALU 进行所有的算术和逻辑计算。ALU 执行加法、减法等操作。ALU 由执行这些操作的逻辑电路或逻辑门组成。

大多数逻辑门有两个输入端和一个输出端。

下图是半加器电路的一个例子,它接收两个输入并输出结果。A 和 B 是输入,S 是输出,C 是进位。

存储 — 寄存器和内存

CPU 的主要工作是执行提供给它的指令。通常要处理这些指令,它需要数据。一些数据是中间数据,其中一些是输入,另一些是输出。这些数据以及指令存储在以下存储中:

寄存器

寄存器是一小组可以存储数据的地方。寄存器是 锁存器 的组合。锁存器 也称为 触发器 ,是 逻辑门 的组合,它能够存储 1 bit 信息。

锁存器有两根输入线:写入和输入线,还有一根输出线。我们可以使写入线更改存储的数据。当禁用写入线时,输出始终保持不变。

一个 SR 锁存器,由一对交叉耦合的或非(NOR)门组成

CPU 用寄存器来存储输出数据。因为它是中间数据,所以把它送到主存储器(RAM)会很慢。该数据被发送到由 总线(BUS)连接的其他寄存器中。寄存器可以用来存储指令、输出数据、存储地址或其它类型的数据。

内存(RAM)

RAM 是一个用优化的方式被紧凑的排列在一起的寄存器的集合,以便它可以存储更多的数据。RAM(随机存取存储器)是易失性的,当关闭电源时它的数据会丢失。

什么是指令

指令是计算机可以执行的粒度级的计算。CPU 可以处理各种类型的指令。

指令包括:

  • 算术运算,如
  • 逻辑指令,如
  • 数据指令,如 移动 输入 输出 加载 存储
  • 流程控制指令,例如 gotoif … gotocallreturn
  • 通知 CPU 程序已结束的 halt 指令

指令通过使用汇编语言提供给计算机,也可以由编译器生成,或以某些高级语言的形式进行解释。

这些指令在 CPU 内部是硬连线的。ALU 包含算术和逻辑运算,其中控制流由 CU 管理。

在一个 时钟周期 内计算机可以执行一条指令,但现代计算机可以执行多个指令。

计算机可以执行的一组指令称为 指令集

CPU 时钟

时钟周期

计算机的速度是由其时钟周期决定的。它是计算机每秒 时钟周期 的数量。单个时钟周期非常小,大约是 250 * 10^-12 秒。时钟周期越短处理器的速度也越快。

CPU 时钟周期以 gHz(千兆赫兹 )为单位。1gHz 等于 10⁹Hz( 赫兹)。赫兹意味着每秒的周期数。所以 1 千兆赫表示每秒 10⁹ 个周期。

时钟周期越高,CPU 可以执行的指令就越多。时钟周期 = 1 / 时钟速率 CPU 时间 = 时钟周期数 / 时钟速率

这意味着可以提高时钟速率,通过改善 CPU 时间来优化 CPU 执行指令的速度。某些处理器提供了提高时钟周期的能力,但由于它是物理变化,因此可能存在使 CPU 过热甚至被烧毁的问题。

如何执行指令

指令按顺序存储在 RAM 中。假设我们有一个 CPU,其指令包括 OP 代码(操作代码)和 存储器或寄存器地址

控制单元内有两个 指令寄存器(IR),它用来加载指令的 OP 代码和 指令地址寄存器,它用来加载当前执行指令的地址。在 CPU 的内部还有其他寄存器,用于保存存储在指令最后 4 位地址中的值。

接下来我们举一个添加两个数字的指令的例子。以下是指令和说明:

STEP 1 — LOAD_A 8:

该指令最初保存在 RAM 中,比如说 <1100 1000>。前 4 位是操作码,它决定了指令是什么。该指令被 提取到控制单元的 IR 中。指令被 解码 为 load_A,这意味着它需要加载地址 1000 中的数据,地址 1000 是寄存器 A 指令的最后 4 位。

STEP 2 — LOAD_B 2

与上面类似,这将存储器地址 2(0010)中的数据加载到 CPU 寄存器 B 中.

STEP 3— ADD B A

现在下一条指令是对这两个数字进行加法运算。在这里 CU 告诉 ALU 执行加法操作并将结果保存回寄存器 A.

STEP 4 — STORE_A 23

这是一组非常简单的指令,可以对两个数字进行加法运算。

我们已经成功的对两个数字进行了加法运算!

总线

CPU、寄存器、存储器和 IO 设备之间的所有数据都通过总线进行传输。要将前面进行加法运算的数据加载到存储器中,CPU 需要将存储器地址写入地址总线,并将运算的结果写入数据总线,还要在控制总线中启用正确的信号。通过这种方式,数据在总线的帮助下加载到存储器中。

缓存

CPU 还有将指令预取到其缓存的机制。据我们所知,处理器可以在一秒钟内完成数百万条指令。这意味着从 RAM 中获取指令所花费的时间比执行它们要多。因此 CPU 缓存会预取一些指令和数据以使执行速度更快。

如果高速缓存和操作存储器中的数据不同,则数据被标记为 脏位

指令流水线

现代 CPU 使用 指令流水线 来执行指令并行化。获取 - 解码 - 执行。当一条指令处于解码阶段时,CPU 可以处理另一条指令用于获取阶段。

但是当一条指令依赖于另一条指令时会有问题。因此处理器执行没有依赖且按不同顺序执行的指令。

多核计算机

它基本上是不同的 CPU,但有一些共享资源,例如缓存。

性能

CPU 的性能由它的执行时间决定。性能 = 1 / 执行时间

假设执行一个程序需要 20ms。CPU 的性能是 1/20 = 0.05ms 相对性能 = 执行时间 1 / 执行时间 2

CPU 性能考虑的因素是指令执行时间和 CPU 的时钟速度。因此为了提高程序的性能,我们需要提高时钟速度或减少程序中的指令数。处理器的速度有限,具有多核的现代计算机可以每秒支持数百万条指令。但是如果我们编写的程序有很多指令,这将会降低整体性能。

Big O 表示法 根据给定的输入确定性能使如何受到影响的。

工程师在 CPU 中进行了大量优化使其更快,并尽可能多地执行指令。在编写任何程序时,我们需要考虑如何减少提供给 CPU 的指令数量将能够提高计算机程序的性能。


本文首发微信公众号:前端先锋

欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

欢迎继续阅读本专栏其它高赞文章:

  • 深入理解 Shadow DOM v1
  • 一步步教你用 WebVR 实现虚拟现实游戏
  • 13 个帮你提高开发效率的现代 CSS 框架
  • 快速上手 BootstrapVue
  • JavaScript 引擎是如何工作的?从调用栈到 Promise 你需要知道的一切
  • WebSocket 实战:在 Node 和 React 之间进行实时通信
  • 关于 Git 的 20 个面试题
  • 深入解析 Node.js 的 console.log
  • Node.js 究竟是什么?
  • 30 分钟用 Node.js 构建一个 API 服务器
  • Javascript 的对象拷贝
  • 程序员 30 岁前月薪达不到 30K,该何去何从
  • 14 个最好的 JavaScript 数据可视化库
  • 8 个给前端的顶级 VS Code 扩展插件
  • Node.js 多线程完全指南
  • 把 HTML 转成 PDF 的 4 个方案及实现

  • 更多文章 …
正文完
 0