你有不有被问过?有一次我就被问到一脸懵逼。。
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开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!