乐趣区

关于java:面试官CPU-是如何工作的我一脸懵B

你有不有被问过?有一次我就被问到一脸懵逼。。

CPU(中央处理器),也被称为微处理器,是计算机的心脏和 / 或大脑。本文让咱们一起深刻理解计算机的外围,以帮忙咱们高效地编写计算机程序。

以下为译文:

“工具通常比机器简略,通常用手来应用,而机器通常由动物或蒸汽能源驱动。”

——查尔斯·巴贝奇

计算机是一种机器,次要由电力驱动,但其灵活性和可编程性帮忙实现了其作为一种工具的简略性。

CPU 是计算机的心脏和 / 或大脑。负责执行提供给它们的指令。它的次要工作是执行算术和逻辑运算,并将指令协调在一起。在深刻到本文的次要局部之前,让咱们先看看 CPU 的次要组成部分,以及它们的作用别离是什么。

1、CPU 的两个次要组成部分

管制单元 — CU

管制单元(CU)是 CPU 的一部分,它帮忙协调指令的执行。它通知 CPU 应该做什么。它的主要职责是依据指令,帮忙激活连贯 CPU 和计算机其余不同部件(包含 ALU)的线路。管制单元是 CPU 的第一个接管解决指令的部件。

管制单元有两种类型:

  • 硬接线管制单元。
  • 微型可编程(微编程)管制单元。

硬接线管制单元是一种硬件,它须要在硬件上进行更改以实现对其工作形式的批改,而微型可编程管制单元则能够进行编程以更改其工作形式。硬接线管制单元在解决指令方面更快,而微型可编程管制单元则更灵便。

算术逻辑单元 —  ALU

算术逻辑单元(ALU),顾名思义,就是负责所有的算术和逻辑运算。算术逻辑单元执行加法运算,减法运算等操作。算术逻辑单元是由执行这些操作的逻辑电路或逻辑门组成。

大多数逻辑门承受两个输出并产生一个输入。

上面是一个半加法器电路的例子,它承受两个输出并输入后果。这里 A 和 B 是输出,S 是输入,C 是进位。

2、存储 – 寄存器和存储器

CPU 的次要工作是执行提供给它的指令。在大多数状况下,为了解决这些指令,它须要数据。有些数据是两头数据,有些是输出,另一些是输入。这些数据连同指令一起存储在下列存储器中:

寄存器

寄存器是一组能够存储数据的小中央。寄存器是锁存器(Latches)的组合。锁存器也称为触发器(flip-flops),是存储 1 位信息的逻辑门的组合。

锁存器有一条输出线,一条写入和输出线,和一条输入线。咱们能够启用写入线对存储的数据进行更改。当写入线被禁用时,输入始终保持不变。

CPU 由寄存器来存储输入数据。因为是两头数据,它们被发送到主存储器(RAM)的速度会慢。这些数据被发送到由总线连贯的其它寄存器。寄存器能够存储指令、输入数据、存储地址或任何类型的数据。

存储器(RAM)

RAM – 随机存取存储器是寄存器的汇合,它们以优化的形式排列和压缩在一起,以便存储更多的数据。随机存取存储器(RAM)是易失性的,当咱们关闭电源时,它存储的数据会失落。因为 RAM 是用于读 / 写数据的寄存器的汇合,因而 RAM 能够用于存储 8 位地址的输出、用于存储理论数据的数据输出,和用于贮存最初的和锁存器一样工作的读写启用码。

3、什么是指令

指令是计算机能够执行的最小粒度运算。CPU 能够解决各种类型的指令

指令类型包含:

  • 算术运算指令,如加法和减法运算
  • 逻辑运算指令,如逻辑与(AND)、逻辑或(OR)和逻辑非(NOT)运算
  • 数据传送指令,如数据挪动、输出、输入、加载和存储
  • 程序控制指令,如条件 / 无条件转移指令(if…goto,goto),转子指令和转移指令(call,return)
  • 告诉 CPU 程序已完结的 Halt 指令

指令通过以下形式提供给计算机:应用汇编语言间接提供,或由编译器生成,或用某些高级语言解释给出。

这些指令在 CPU 外部是硬连线的。算术和逻辑运算指令包含在 ALU(算术逻辑单元)中,而程序控制指令由 CU(管制单元)治理。

通常在一个时钟周期(clock cycle)内,计算机能够执行一个指令,然而古代的计算机能够同时执行多个指令。

计算机能够执行的一组指令称为指令集。

4、CPU 时钟

时钟周期

计算机的速度由其时钟周期 (Clock cycle) 掂量。它是指计算机每秒工作的时钟周期数。单个时钟周期十分小,大概 250*10^(-12)秒。每秒时钟周期数越高,处理器速度越快。

CPU 时钟频率 (clock rate) 的测量单位为 GHz(千兆赫兹)。1Ghz 等于 10 ⁹Hz(赫兹)。一赫兹意味着一秒钟。所以一千兆赫兹意味着每秒 10 ⁹个时钟周期。

时钟周期越小,CPU 能够执行的指令数量越多。时钟周期等于时钟频率的倒数,而 CPU 工夫 = 时钟周期数 / 时钟频率

这意味着为了改良(缩小)CPU 工夫,咱们能够通过进步时钟频率,或优化咱们提供给 CPU 的指令来缩小指令须要的时钟周期的数量。一些处理器提供了进步时钟频率的能力,但因为这是一个物理变化,可能会呈现过热,甚至冒烟 / 起火。

5、指令是如何执行的

指令按顺序存储在随机存取存储器(RAM)上。对于一个假如的 CPU 指令,它由操作码(OP code)和存储器或寄存器地址组成。

管制单元(CU)内有两个寄存器:用于加载指令操作码的指令寄存器(IR),和用于加载以后正在执行的指令地址的指令地址寄存器。CPU 中还有其余寄存器,用于存储一个指令的最初 4 位的地址中存储的值。

让咱们以一组实现两个数字相加操作的指令为例。上面是这些指令及其阐明:

第一步 – LOAD_A 8:

该指令最后保留在 RAM 中,比如说指令 <1100 1000>。它的前 4 位是操作码。这决定了这个指令要做什么。而后该指令被读取到管制单元的指令寄存器(IR)中。指令被译码为 load_A,这意味着它须要加载地址 1000 中的数据,地址 1000 是存储在寄存器 A 中的指令的后 4 位。

第二步 – LOAD_B 2:

与下面相似,它将内存地址 2(0010)中的数据加载到 CPU 的寄存器 B 中。

第三步 – ADD B A

接下来的这条指令是把这两个数字相加。在这里,管制单元(CU)通知算术逻辑单元(ALU)执行加法操作并将后果保留回寄存器 A 中。

第 4 步 – STORE_A 23

将后果保留回寄存器 A 中。

这是一组非常简单的指令,实现了两个数字的相加操作。

当初,咱们胜利地失去了两个数字相加的和值!

总线

CPU,寄存器,存储器和 IO 设施之间的所有数据都通过总线传输。要将方才两数相加失去的和数保留到存储器中,CPU 将存储器地址放入地址总线,将失去的后果(和数)放入数据总线,而后在管制总线中启用正确的信号。这样,数据在总线的帮忙下被保留到存储器中。

缓存

CPU 还具备将指令预取到其缓存中的机制。咱们晓得,一个处理器能够在一秒钟内实现数百万条指令。这意味着从存储器(RAM)中获取指令所破费的工夫比执行指令所破费的工夫要多。所以 CPU 会预取一些指令和数据到其缓存中,以放慢执行速度。

如果缓存中的数据和操作内存中的数据不同,则将数据标记为脏位(dirty bit)。

指令流水线

古代 CPU 在指令执行中采纳指令流水线技术实现取指(FI)、译码(DI)、执行(EI)的并行化。当一条指令实现“取指”后进入“译码”的同时,下一条指令就能够进行“取指”了,这样就进步了指令的执行效率。

然而,当一条指令和另一条指令有依赖关系时,这种技术会产生问题。所以,指令流水线技术只可能让处理器以不同的程序执行相互之间没有依赖关系的指令。

多核计算机

它基本上是有不同的 CPU,然而有一些共享资源,比方缓存等。

6、性能

CPU 的性能取决于它的执行工夫。性能 =1/ 执行工夫

假如一个程序执行须要 20 毫秒。CPU 性能为 1 /20=0.05ms。绝对性能 = 执行工夫 1 / 执行工夫 2

影响 CPU 性能的因素是指令执行工夫和 CPU 的时钟速度(时钟频率)。因而,为了进步程序的性能,咱们要么进步 CPU 的时钟速度(时钟频率),要么缩小程序中的指令数量。处理器的速度无限,古代多核计算机每秒能够反对数百万条指令。然而,如果咱们编写的程序有太多的指令,就将导致整体性能的升高。

大 O 符号(Big O notation)计算方法能够用来确定在给定输出的状况下 CPU 的性能将如何受到影响。

为了尽可能地进步 CPU 的速度,很多优化工作曾经在 CPU 中进行。而咱们在编写任何程序时,都须要思考如何尽可能地缩小咱们提供给 CPU 的指令数量,以进步计算机程序的性能。

原文:https://milapneupane.com.np/2…

作者:Milap Neupane

译者:苏本如,责编:屠敏

出品:CSDN(ID:CSDNnews)

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿(2021 最新版)

2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!

3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!

4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版