欢迎来到计算机系统与架构

你有没有想过,当你轻触屏幕、打开应用程序或玩游戏时,计算机内部究竟在发生什么?乍看之下,现代计算机简直像魔法一样神奇。然而,在玻璃与铝合金外壳之下,其实是由各个基本构件紧密协作、运行井然有序且合乎逻辑的精密机器。

本章重点探讨主题 A:计算机科学概念,特别是课题 A.1 计算机基础。在这里,我们将深入探讨计算系统的基础架构:硬件组件如何构建、内存如何组织,以及中央处理器如何一步一步执行指令。

相关章节备注:有关数字、字符和媒体如何转换为原始二进制位,会在数据表示与数制中探讨;而协调这些组件运行的软件,则会在操作系统与系统软件中详细介绍。

1. 冯·诺依曼架构 (Von Neumann Architecture)

在计算技术发展的初期,计算机只能用来执行单一的特定任务。如果你想让机器做不同的计算,技术人员就必须手动重新连接线路!到了 20 世纪 40 年代,数学家兼博学家约翰·冯·诺依曼(John von Neumann)提出了一项革命性的设计,直至今天现代计算机依然沿用这个概念:存储程序概念 (stored-program concept)。

存储程序概念:程序指令与正在处理的数据,皆以相同的数字格式,一同存储在同一个电子内存空间(主存)中。

这意味着计算机不需要重新接线就能执行新任务。如果你想从电子表格切换到电子游戏,计算机只需将一组不同的指令加载到内存即可。

冯·诺依曼架构的核心组件

冯·诺依曼系统由四个基本组件组成:

• 中央处理器 (CPU):执行指令和处理数据的“大脑”。
• 主存 (RAM):存放当前正在使用的代码与活跃数据的工作空间。
• 输入及输出 (I/O) 接口:让计算机与外部世界进行通信的通道(例如键盘、显示器、传感器和网卡)。
• 辅助存储器 (Secondary Storage):即使关机后仍能保留数据的永久存储设备(例如硬盘或固态硬盘)。

生活比喻角:厨房比喻
试想象计算机系统就像一个专业厨房:
• CPU 是大厨,负责阅读食谱步骤并烹饪菜肴。
• 主存 (RAM) 是大厨的备料工作台。食材(数据)和食谱卡(指令)都放在这里,以便即时取用。
• 辅助存储器 是储藏室或冰箱。它长期存放所有食材,但大厨总不能在洋葱还留在储藏室时就动手切碎它吧!

重点总结:冯·诺依曼架构的核心在于将程序与数据一并存储于主存中,并由 CPU 按顺序获取及执行指令。

2. 深入 CPU:内部组件与寄存器

中央处理器 (CPU) 负责获取程序指令、解读指令并加以执行。CPU 内部包含三大主要部分:控制单元 (Control Unit, CU)、算术逻辑单元 (Arithmetic Logic Unit, ALU),以及称为寄存器 (Registers) 的专用高速内部存储单元。

控制单元 (CU)

控制单元就像乐团的指挥家。它本身不进行计算,也不长期存储数据。相反,它的职责是:

• 引导指令和数据在 CPU 内部的流向。
• 利用周期性的时钟脉冲,协调所有内部操作的时间节拍。
• 将每条指令解码为特定的微控制信号,指导其他组件应执行的动作。

算术逻辑单元 (ALU)

算术逻辑单元是 CPU 的计算器与决策中心。它负责执行两大类基本运算:

• 算术运算 (Arithmetic operations):基本数学计算,例如加、减、乘、除。
• 逻辑运算 (Logical operations):比较与布尔逻辑判断,例如测试两个数值是否相等,或评估如 A AND NOT B 等条件。

CPU 寄存器:极速草稿纸

寄存器 (Registers) 是直接构建于 CPU 内部、容量极小但速度极高的存储单元。它们负责存放 CPU 在执行指令时需要即时使用的数据值、内存地址或指令。

刚接触这些名称时不用担心!每个寄存器都有其专属而明确的任务:

• 程序计数器 (Program Counter, PC):存放等待从 RAM 获取的下一条指令的内存地址。指令被取出后,PC 会自动递增(前进)以指向下一个地址。

• 内存地址寄存器 (Memory Address Register, MAR):存放主存中当前正在被访问的内存地址,无论 CPU 是要从该地址读取指令/数据,还是将运算结果写入该处。

• 内存数据寄存器 (Memory Data Register, MDR):又称内存缓冲寄存器。存放刚从 RAM 读取出来的实际数据或指令,或者等待写入 RAM 的数据。

• 当前指令寄存器 (Current Instruction Register, CIR):存放刚获取回来的二进制指令,供控制单元解码为控制信号。

• 累加器 (Accumulator, ACC):暂存由 ALU 运算或逻辑测试所产生的即时结果。

寄存器记忆法:
• PC:“Pointing to next step(指向下一步)”
• MAR:“Address roadmap(地址路线图)”
• MDR:“Data courier(护送实际数据载荷的信使)”
• CIR:“Currently In Reading / Decoding(当前正在阅读/解码的指令)”
• ACC:“Accumulates answers(累积计算结果)”

重点总结:CU 指挥调度,ALU 负责运算与逻辑,而寄存器则是处理器内部的极速暂存位置。

3. 系统总线:内部的高速公路

CPU、主存和 I/O 设备之间是如何互相通信的?它们通过一组并行的导电线路进行通信,这组线路称为系统总线 (system bus)。系统总线细分为三条专用通道:

• 地址总线 (Address Bus):将物理内存地址由 CPU(具体由 MAR)发送至主存或 I/O 控制器。地址总线是单向的 (unidirectional),意味着地址只能从 CPU 传出至内存。地址总线的宽度决定了处理器能直接寻址的最大内存容量。

• 数据总线 (Data Bus):在 CPU(具体由 MDR)、内存及外设之间传输实际的程序指令、数值或文本数据。数据总线是双向的 (bidirectional),因为在读取操作时数据需流入 CPU,而在写入操作时数据需流出 CPU。

• 控制总线 (Control Bus):传输由控制单元产生的同步信号、状态更新和命令指令(例如内存读取、内存写入、时钟脉冲和中断请求)。控制总线是双向的,以允许信号在各系统组件之间往来传递。

常犯错误提醒:千万不要混淆地址总线与数据总线!地址总线传递的是“位置”(就像信封上的地址),而数据总线传递的则是“内容”(信封里的信件本身)。

重点总结:地址总线单向传输内存地址,数据总线双向穿梭传输数据,而控制总线则在整个系统中传递协调信号。

4. 机器指令周期(取指—译码—执行)

计算机所执行的每一项工作——由计算 \(Delta = b^2 - 4ac\) 到渲染高清图像——都可以分解为数以百万计名为“取指—译码—执行”周期 (Fetch-Decode-Execute / FDE cycle)(亦称为机器指令周期)的微小步骤。CPU 在开机运行期间会不断重复这个循环。

第一阶段:取指 (Fetch)

此阶段的目标是从主存 (RAM) 中检索下一条指令,并带入 CPU 内部:

1. 程序计数器 (PC) 内的地址被复制到内存地址寄存器 (MAR)。
2. 控制单元 (CU) 沿控制总线向主存发送读取信号。
3. 存储在 MAR 中的地址通过地址总线传输至 RAM。
4. 该内存位置的内容经由数据总线传回,并存储在内存数据寄存器 (MDR) 中。
5. 与此同时,PC 自动加一,指向下一个内存地址。
6. MDR 中的指令被复制到当前指令寄存器 (CIR)。

第二阶段:译码 (Decode)

此阶段的目标是理解指令的具体含义:

1. 控制单元检查存储在 CIR 中的指令。
2. 指令被拆解为操作码 (Opcode)(操作代码,例如 ADD、LOAD 或 STORE)及操作数 (Operand)(数据值或存放该数据的内存地址)。
3. CU 将此操作码翻译成内部控制信号,为 ALU 和系统总线做好执行该特定任务的准备。

第三阶段:执行 (Execute)

此阶段的目标是落实执行指定的指令:

• 如果指令涉及算术或逻辑运算,ALU 会执行计算并将结果存储在累加器 (ACC) 中。
• 如果指令需要从 RAM 读取数据,操作数中指定的内存地址会被加载到 MAR,并通过数据总线获取数据。
• 如果指令需要写入数据,CPU 会将结果输出至内存或输出接口。
• 如果指令是跳转或分支命令,PC 会被更新为一个全新的地址,而不再是顺序递增。

一旦执行完毕,周期便会紧接着下一条指令重新开始!

快速复习:
• 取指 (Fetch):RAM \(\rightarrow\) 总线 \(\rightarrow\) MDR \(\rightarrow\) CIR(PC 指向下一地址)。
• 译码 (Decode):CU 解读 CIR 中的操作码。
• 执行 (Execute):完成操作(ALU 运算、更新寄存器或传输数据)。

重点总结:机器指令周期就像 CPU 连续不断的心跳律动,有条不紊地从 RAM 取出指令、解读其含义,并执行相关命令。

5. 内存与存储组织架构

计算机采用了存储层次结构 (memory hierarchy)。越靠近 CPU 的组件访问速度极快,但容量有限且制造成本高昂;距离 CPU 越远,存储容量随之大增,但访问时间亦相对变慢。

主存:RAM 与 ROM

主存是指 CPU 能通过系统总线直接访问的内存。

1. 随机存取存储器 (RAM):
• 易失性 (Volatile):一旦切断电源,RAM 内的全部内容便会立刻消失。
• 可读写:CPU 可以快速读取任何 RAM 位置的数据,亦可写入新数据。
• 功能:存放操作系统模块、正在运行的应用程序代码,以及当前正在处理的即时用户数据。

2. 只读存储器 (ROM):
• 非易失性 (Non-volatile):即使计算机处于断电状态,ROM 仍能永久保留其中存储的数据。
• 只读:数据在出厂制造时已被写入,在正常运行情况下无法轻易修改。
• 功能:存放系统最初的开机引导指令(例如引导加载程序 (bootstrap loader) 或基本输入输出固件),负责初始化硬件,并指示系统将主要操作系统从辅助存储器加载到 RAM 中。

高速缓存 (Cache Memory)

纵使 RAM 速度已相当快,但现代 CPU 的运行速度远超一般 RAM 芯片。如果 CPU 每次需要数据都要等待 RAM,它将有大部分时间处于闲置状态。这种延迟被称为内存瓶颈 (memory bottleneck)。

高速缓存正是为了解决这个问题而生。它是一种容量极小但速度奇快无比的易失性存储器,直接内建在 CPU 芯片上或紧邻其旁。

• 运行原理:高速缓存存储常用指令和数据的副本。当 CPU 需要数据时,会先检查高速缓存(称为缓存命中 cache hit)。若缓存中没有该数据(称为缓存未命中 cache miss),才会转而向较慢的 RAM 读取。
• 缓存层级:第 1 级 (L1) 缓存容量最小、速度最快,直接设于处理器核心内部。第 2 级 (L2) 和第 3 级 (L3) 缓存容量逐步扩大、速度稍逊,作为 L1 与主 RAM 之间的缓冲过渡区。

辅助存储器 (Secondary Storage)

由于主要 RAM 具易失性且容量有限,计算机需要辅助存储器来长期保留程序、文件和操作系统。

• 非易失性:计算机关机后,存储内容依然完好无损。
• 大容量且成本低:能以经济实惠的成本提供吉字节 (GB) 或太字节 (TB) 的存储空间。
• CPU 无法直接访问:辅助存储器中的数据必须先复制到主存 (RAM) 中,CPU 才能执行或处理。

常见的存储技术包括采用闪存半导体存储器的固态硬盘 (SSD)、利用磁化磁盘盘片的机械硬盘 (HDD),以及使用激光读取反射光盘的光盘存储介质。

重点总结:高速缓存速度最快且最接近 CPU;RAM 为活跃程序提供快速、易失的工作空间;ROM 安全存放永久的开机代码;而辅助存储器则提供大容量、非易失的长期存储。

6. 影响处理器性能的因素

你有没有想过,为什么两台外观相似的计算机,实际运行表现却有天壤之别?CPU 的性能取决于多项互相影响的硬件规格协同运作:

1. 主频 (Clock Speed)

CPU 内置一个石英晶体振荡器,能以稳定的频率发出脉冲来同步各项操作。指令周期的每一个微小步骤都紧随时钟脉冲发生。

• 主频以赫兹 (Hz) 为单位,其中 \(1\text{ Hz} = 1\text{ cycle per second(每秒一次周期)}\)。
• 现代处理器普遍以吉赫 (GHz) 标示,其中 \(1\text{ GHz} = 1 \times 10^9\text{ cycles per second}\)。例如,一颗 \(3.2\text{ GHz}\) 的 CPU 每秒脉冲振荡高达 \(3.2\text{ billion(32 亿)}\) 次。
• 影响:主频越高,指令执行通常越快。然而,更高的主频会产生明显更多的热量并消耗更多电能。

2. 处理器核心数 (Number of Processor Cores)

以往的 CPU 只包含单一处理单元。现代处理器均为多核心 (multicore) 设计,在单一芯片上封装了两个、四个、八个甚至更多独立的 CPU 核心。

• 影响:多核心支持并行处理 (parallel processing)(同时执行不同指令)与多任务处理 (multitasking)(在不同核心上分别运行各个应用程序,无须争夺同一个 ALU/CU)。
• 限制:核心数目加倍并不代表系统速度会自动翻倍!软件必须经过特别编程,才能将工作拆分至多个核心。如果一项任务本质上是循序渐进的(步骤二严格依赖步骤一的结果),额外的核心便无法加速其处理。

3. 缓存大小 (Cache Size)

由于访问芯片内置缓存的速度远快于读取外部 RAM,较大的缓存容量可让 CPU 在触手可及之处存储更多指令与数据。

• 影响:较大的缓存可带来更高的缓存命中率,意味着 CPU 可以减少因等待数据从 RAM 经外部数据总线传输而浪费的时钟周期。

重点总结:CPU 的数据吞吐量取决于主频(每秒运算周期)、核心数(并行执行能力)以及缓存大小(减少检索数据延迟)三者之间的平衡。

本章复习与自我检测题目

通过以下复习题目,测试一下你对计算机系统与架构的理解:

1. 解释存储程序概念与早期计算机器之间的主要区别。
2. 指出哪个 CPU 寄存器负责存放等待被获取的下一条指令的地址。
3. 就传输方向性及所传输的内容两方面,区分地址总线与数据总线的不同。
4. 描述在机器指令周期的译码阶段会发生什么。
5. 解释为什么计算机既需要主存 (RAM),同时又需要辅助存储器。