做者:Milap Neupane前端
翻译:疯狂的技术宅编程
原文:www.freecodecamp.org/news/how-do…前端工程化
未经容许严禁转载缓存
CPU,也被称为微处理器,是计算机的大脑。让咱们经过深刻了解计算机的核心,来帮助本身有效地编写计算机程序。工具
“工具一般比机器更简单,它通常用手就能够操做,而机器须要被动物或蒸汽动力启动。”性能
—— Charles Babbage优化
计算机是由电力驱动的机器,但其灵活性和可编程性有助于实现工具的简单性。翻译
CPU 是计算机的大脑。它执行提供给它的指令。它的主要工做是执行算术和逻辑运算并一块儿编排指令。在深刻了解主要部分以前,咱们先来看看CPU的主要组件以及它们的做用分别是什么:3d
控制单元 CU 是 CPU 的一部分,用来帮助协调指令的执行,它告诉 CPU 该作什么。根据该指令,激活将 CPU 链接到计算机的其余不一样部分的电路,其中包括 ALU。控制单元是 CPU 接收处理指令的第一个组件。code
控制单元有两种类型:
硬连线控制单元是硬件,须要更改硬件来修改它的工做方式;可编程控制单元能够经过编程来改变其行为。硬连线 CU 在处理指令时更快,而可编程 CU 则更灵活。
算术和逻辑单元 ALU 进行全部的算术和逻辑计算。 ALU 执行加法、减法等操做。 ALU 由执行这些操做的逻辑电路或逻辑门组成。
大多数逻辑门有两个输入端和一个输出端。
下图是半加器电路的一个例子,它接收两个输入并输出结果。A 和 B 是输入,S 是输出,C 是进位。
CPU 的主要工做是执行提供给它的指令。一般要处理这些指令,它须要数据。一些数据是中间数据,其中一些是输入,另外一些是输出。这些数据以及指令存储在如下存储中:
寄存器是一小组能够存储数据的地方。寄存器是锁存器的组合。 锁存器也称为触发器,是逻辑门的组合,它可以存储 1 bit 信息。
锁存器有两根输入线:写入和输入线,还有一根输出线。咱们可使写入线更改存储的数据。当禁用写入线时,输出始终保持不变。
CPU 用寄存器来存储输出数据。由于它是中间数据,因此把它送到主存储器(RAM)会很慢。该数据被发送到由**总线(BUS)**链接的其余寄存器中。寄存器能够用来存储指令、输出数据、存储地址或其它类型的数据。
RAM 是一个用优化的方式被紧凑的排列在一块儿的寄存器的集合,以便它能够存储更多的数据。 RAM(随机存取存储器)是易失性的,当关闭电源时它的数据会丢失。
指令是计算机能够执行的粒度级的计算。 CPU 能够处理各类类型的指令。
指令包括:
指令经过使用汇编语言提供给计算机,也能够由编译器生成,或以某些高级语言的形式进行解释。
这些指令在 CPU 内部是硬连线的。 ALU 包含算术和逻辑运算,其中控制流由 CU 管理。
在一个时钟周期内计算机能够执行一条指令,但现代计算机能够执行多个指令。
计算机能够执行的一组指令称为指令集。
时钟周期
计算机的速度是由其时钟周期决定的。它是计算机每秒时钟周期的数量。单个时钟周期很是小,大约是 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 的指令数量将可以提升计算机程序的性能。