No history yet

硬件架构基础

计算机的大脑:CPU

每台计算机的核心都是中央处理器(CPU),也就是它的“大脑”。CPU负责执行程序指令,但它的工作方式并非只有一种。计算机体系结构主要有两种基本蓝图:冯·诺依曼架构和哈佛架构。

将程序指令和数据存放在同一个存储空间中。CPU通过同一组总线(数据通道)来读取指令和数据。这种设计的优点是结构简单、灵活性高,因为内存可以根据需要动态地分配给指令或数据。然而,缺点也很明显:由于共享同一通道,CPU无法同时读取指令和数据,这会造成所谓的“冯·诺依曼瓶颈”,限制了处理速度。

相比之下,哈佛架构将指令和数据存储在两个独立的存储空间中,并使用两组独立的总线。这意味着CPU可以同时获取下一条指令并处理当前的数据,极大地提高了执行效率,尤其是在需要大量数据吞吐和指令预读的场景中。这种并行处理能力是其主要优势,但代价是硬件设计更复杂。

如今,许多高性能CPU采用了混合架构。它们在内部核心(如缓存)层面采用哈佛架构来分离指令和数据以提高速度,而在与主内存交互时则表现为冯·诺依曼架构,以保持其灵活性。

指令的生命周期

CPU的核心任务是不断地执行指令。这个过程遵循一个简单而高效的循环,称为指令周期。它主要分为三个阶段:取指、译码和执行。

  1. 取指 (Fetch): 控制单元从内存中获取下一条要执行的指令。
  2. 译码 (Decode): 控制单元解析这条指令,弄清楚它是什么操作(比如加法、存储数据),以及操作需要哪些数据。
  3. 执行 (Execute): 算术逻辑单元(ALU)执行实际的计算或逻辑操作。如果需要,结果会存回寄存器或内存中。

这个循环以惊人的速度重复着,由CPU的时钟信号驱动。每一次时钟滴答,都推动指令周期向前一步。

在这个过程中,CPU内部的几个关键部分协同工作:

  • 控制单元 (Control Unit): 就像一个交响乐团的指挥,它不亲自演奏乐器,但负责协调CPU的所有部分,确保指令被正确地取指、译码和执行。
  • 算术逻辑单元 (ALU): 这是CPU的计算核心,负责处理所有的数学运算(加、减、乘、除)和逻辑运算(与、或、非)。
  • 寄存器 (Registers): 这些是CPU内部极小但速度极快的存储单元。它们用于临时存放指令、数据和计算结果,是CPU处理信息时的“暂存区”。

从沙子到算术

当你在Java代码中写下 int c = a + b; 时,你可能不会想到,这个简单的加法操作最终会由数百万个微小的电子开关来完成。这些开关被称为晶体管,它们是构成的基础。

逻辑门是执行基本布尔逻辑(如与、或、非)的微型电路。通过巧妙地组合这些逻辑门,工程师可以构建出更复杂的电路,比如加法器。

一个最简单的加法器,称为“半加器”,可以用一个异或门(XOR)和一个与门(AND)来构建。它可以计算两个二进制位的和,并产生一个“和”位和一个“进”位。

将两个半加器和一个或门组合,就可以得到一个“全加器”,它可以处理来自低位的进位。通过将多个全加器串联起来,CPU就能计算任意长度的二进制数加法。乘法和减法等更复杂的操作也基于类似的逻辑门组合。因此,硬件决定了软件运算性能的上限。

从代码到机器

你编写的Java代码并不能直接在CPU上运行。它首先被Java编译器转换成一种中间语言,称为。当程序运行时,Java虚拟机(JVM)会解释这些字节码,或者使用即时编译器(JIT)将其翻译成CPU能够直接理解的

机器码是CPU指令集的二进制表示,是计算机唯一能懂的语言。例如,一条加法指令在机器码中可能看起来像 1000101100000001。这种二进制序列对人类来说几乎无法阅读,因此程序员通常使用汇编语言来编写底层代码。汇编语言是机器码的助记符版本,比如用 ADD R1, R2 来代表将寄存器R2的值加到寄存器R1上。汇编器会将这些助记符翻译成对应的机器码。

Lesson image

CPU的性能由其时钟频率(以赫兹Hz为单位)和每个时钟周期能执行的指令数(IPC)共同决定。时钟频率越高,指令周期的速度就越快。但是,仅仅提高频率是不够的。现代CPU通过流水线、多核等技术,在每个时钟周期内并行处理多个指令,从而大幅提升整体性能。归根结底,你的Java程序运行得有多快,最终取决于底层硬件的设计和物理极限。

准备好测试你对硬件基础的理解了吗?

Quiz Questions 1/6

冯·诺依曼架构与哈佛架构最主要的区别是什么?

Quiz Questions 2/6

CPU的指令周期通常遵循哪三个主要阶段的正确顺序?

理解这些硬件基础,有助于你更深刻地认识到软件是如何与物理世界互动的。当你下一次优化代码时,可以思考一下这些操作最终是如何在硅片上执行的。