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从寄存器读取数据。

再把结果写回寄存器。

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


第6章 CPU真正的数据路径

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


事实上并不是。

真正的流程通常是:


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

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

结果再次保存到寄存器。

只有需要时才写回内存。

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


第7章 通用寄存器

通用寄存器

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

它们专门用于普通计算。

例如:

RISC-V:


ARM


x86:


这些寄存器保存:

变量。

循环计数器。

地址。

函数参数。

临时结果。

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


第8章 特殊寄存器

特殊寄存器

除了通用寄存器。

CPU还有特殊用途寄存器。

例如:


每一个都有专门职责。

没有它们。

CPU根本无法执行程序。


第9章 程序计数器PC

程序计数器PC

PC。

Program Counter。

程序计数器。

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

例如:


CPU读取这里的指令。

执行完成后:


然后继续执行下一条。

如此循环。

每秒几十亿次。

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

决定程序执行方向。


第10章 栈指针SP

栈指针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的私人工作区

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

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

向ALU提供输入。

接收计算结果。

通过PC跟踪程序执行。

通过SP管理函数调用。

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

虽然寄存器容量很小。

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

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


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

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

而在下一期视频中。

我们将继续深入CPU内部。

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

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

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