Menu Close

寄存器是如何工作的?CPU真正计算的地方

 

《寄存器是如何工作的?CPU真正计算的地方》

副标题:


 


第1章 CPU缺失的一块拼图

寄存器是如何工作的?

在前面的课程中,我们已经了解了计算机是如何工作的。

寄存器如何工作?

我们学习了晶体管

学习了逻辑门。

学习了内存如何存储数据。

也学习了CPU如何执行指令。

但是还有一个非常重要的问题没有回答。

CPU到底是在什么地方进行计算的?

CPU执行加法时。

这些数字存放在哪里?

当一个程序每秒执行数十亿条指令时。

CPU又把正在处理的数据放在哪里?

很多人会认为答案是RAM

毕竟RAM保存程序。

保存变量。

保存操作系统

保存应用程序。

但实际上。

CPU几乎从不直接在RAM中完成计算。

真正参与计算的,是一种更小、更快的存储结构。

它的名字叫:

寄存器。

寄存器就是CPU的私人工作区。

也是CPU真正工作的地方。


第2章 什么是寄存器什么是寄存器?

寄存器是位于CPU内部的一小块存储空间。

RAM不同。

RAM位于CPU外部。

而寄存器直接建造在CPU核心内部。

你可以把寄存器理解为一个小盒子。

里面存放二进制数据。

例如:

数字。

地址。

函数参数。

指令位置。

计算结果。

这些数据本质上都是0和1。

例如:


可能表示数字5。

而:


可能表示数字3。

CPU随后就可以利用这些数据进行计算。

寄存器虽然很小。

但却是整个处理器最重要的组件之一。


第3章 为什么CPU不能直接使用RAM为什么CPU不能直接用RAM

这是很多初学者都会问的问题。

既然RAM能存储数据。

为什么CPU不直接从RAM进行计算?

原因只有一个。

速度。

RAM虽然比SSD快得多。

但和CPU相比仍然非常慢。

现代CPU可能工作在:


也就是每秒40亿个时钟周期。

而一次RAM访问。

可能需要几十甚至上百个CPU周期。

如果每次加法都要等待RAM

CPU绝大部分时间都在发呆。

性能将大幅下降。

于是CPU设计师发明了寄存器。

因为寄存器就在CPU内部。

通常一个时钟周期就能访问。

速度远远超过RAM

这也是现代计算机能够高速运行的重要原因。


第4章 寄存器是如何制造出来的

寄存器不是抽象概念。

它是真实存在的电子电路。

整个结构可以表示为:


其中最关键的元件叫:

Flip-Flop

触发器。

一个触发器可以保存1个比特。

也就是:


一个64位寄存器。

就包含64个存储位。

这些存储位背后。

由大量晶体管共同组成。

所以寄存器本质上仍然是一种特殊的存储器


第5章 寄存器与ALU

为了理解寄存器。

我们必须认识另一个重要部件。

ALU。

算术逻辑单元。

ALU负责执行:

加法。

减法。

逻辑与。

逻辑或。

异或。

比较。

移位。

但是ALU并不保存数据。

它只能计算。

例如:


执行过程可能是:


ALU从寄存器读取数据。

再把结果写回寄存器。

所以寄存器就是ALU的工作台。


第6章 CPU真正的数据路径

很多人以为CPU工作流程是:


事实上并不是。

真正的流程通常是:


数据先从内存加载到寄存器。

然后ALU使用寄存器中的数据进行计算。

结果再次保存到寄存器。

只有需要时才写回内存。

这是计算机体系结构最重要的概念之一。


第7章 通用寄存器

CPU中最常见的是通用寄存器。

它们专门用于普通计算。

例如:

RISC-V:


ARM


x86:


这些寄存器保存:

变量。

循环计数器。

地址。

函数参数。

临时结果。

几乎每条指令都会使用它们。


第8章 特殊寄存器

除了通用寄存器。

CPU还有特殊用途寄存器。

例如:


每一个都有专门职责。

没有它们。

CPU根本无法执行程序。


第9章 程序计数器PC

PC。

Program Counter。

程序计数器。

它保存下一条即将执行的指令地址。

例如:


CPU读取这里的指令。

执行完成后:


然后继续执行下一条。

如此循环。

每秒几十亿次。

PC就像CPU内部的导航系统。

决定程序执行方向。


第10章 栈指针SP

函数调用需要管理内存。

这时就需要:

Stack Pointer。

栈指针。

栈中通常保存:

返回地址。

局部变量。

函数参数。

每次调用函数。

SP都会移动。

压栈。

出栈。

不断调整。

现代操作系统严重依赖栈结构。

没有SP。

函数调用几乎无法实现。


第11章 状态寄存器

每次计算结束后。

CPU都会记录结果状态。

例如:

结果是否为零?

是否产生进位?

是否溢出?

是否为负数?

这些信息保存在状态寄存器中。

之后CPU可以根据这些状态决定程序流程。

例如:


这就是程序中条件判断的基础。


第12章 寄存器与机器指令

来看一条简单指令:


意思是:


CPU执行过程:

读取R1。

读取R2。

送入ALU。

执行加法。

结果写入R3。

整个过程完全发生在CPU内部。

根本不需要访问RAM

这也是寄存器操作速度极快的原因。


第13章 寄存器与编译器

程序员很少直接操作寄存器。

通常写的是:


编译器会把它转换成机器指令。

然后使用寄存器完成计算。

编译器有一项重要工作:

寄存器分配。

也就是:

Register Allocation。

编译器需要决定:

哪些变量放进寄存器。

哪些放回内存。

寄存器分配越优秀。

程序运行越快。


第14章 寄存器与流水线

现代CPU使用流水线技术。

一条指令通常经历:


多个阶段。

多条指令同时运行。

最后一步:

Write Back。

就是把结果写回寄存器。

流水线中最常见的问题之一。

就是寄存器依赖。

前一条指令还没写完。

后一条指令已经要使用结果。

CPU必须采用复杂机制解决这些冲突。


第15章 为什么寄存器是最快的存储器

在整个存储层级中。

寄存器位于最顶端。


距离CPU越近。

速度越快。

寄存器直接位于CPU核心内部。

因此拥有最高速度。

CPU所有计算最终都围绕寄存器展开。

其它存储结构存在的目的。

本质上都是为了不断向寄存器输送数据。


结论

寄存器是CPU的私人工作区。

它保存当前正在处理的数据。

向ALU提供输入。

接收计算结果。

通过PC跟踪程序执行。

通过SP管理函数调用。

通过状态寄存器控制程序分支。

虽然寄存器容量很小。

但对CPU性能的重要性远远超过RAM

现代计算机的核心流程始终是:


如果说内存是数据居住的地方。

那么寄存器就是数据真正开始工作的地方。

而在下一期视频中。

我们将继续深入CPU内部。

看看真正负责计算的核心部件:

ALU——算术逻辑单元究竟是如何工作的。

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in 计算机科学 (编程语言)