CPU 是怎样工做的?

做者:Milap Neupane前端

翻译:疯狂的技术宅编程

原文:www.freecodecamp.org/news/how-do…前端工程化

未经容许严禁转载缓存

CPU 是怎样工做的?

CPU,也被称为微处理器,是计算机的大脑。让咱们经过深刻了解计算机的核心,来帮助本身有效地编写计算机程序。工具

“工具一般比机器更简单,它通常用手就能够操做,而机器须要被动物或蒸汽动力启动。”性能

—— Charles Babbage优化

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

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

处理器的两个主要组件

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

控制单元 — CU

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

控制单元有两种类型:

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

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

算术和逻辑单元 — ALU

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

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

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

img

存储 — 寄存器和内存

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

寄存器

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

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

img

一个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 须要将存储器地址写入地址总线,并将运算的结果写入数据总线,还要在控制总线中启用正确的信号。经过这种方式,数据在总线的帮助下加载到存储器中。

img

缓存

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

若是高速缓存和操做存储器中的数据不一样,则数据被标记为脏位

指令流水线

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

img

可是当一条指令依赖于另外一条指令时会有问题。所以处理器执行没有依赖且按不一样顺序执行的指令。

多核计算机

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

性能

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

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

CPU 性能考虑的因素是指令执行时间和 CPU 的时钟速度。所以为了提升程序的性能,咱们须要提升时钟速度或减小程序中的指令数。处理器的速度有限,具备多核的现代计算机能够每秒支持数百万条指令。可是若是咱们编写的程序有不少指令,这将会下降总体性能。

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

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

欢迎关注前端公众号:前端先锋,领取前端工程化实用工具包。

相关文章
相关标签/搜索