计算机硬件

一台计算机看起来又复杂又神秘:CPU、内存、硬盘、网卡、显卡、显示器……但拆开来看,所有部件都围绕一个 1945 年就定下的蓝图——冯·诺依曼结构——在分工协作。这篇笔记逐个讲清楚每个硬件是干什么的,更重要的,讲清楚它们如何被组织在一起,共同完成一件工作

一、总蓝图:冯·诺依曼结构

1. 存储程序思想

1945 年,数学家 冯·诺依曼(John von Neumann) 在《First Draft of a Report on the EDVAC》中提出了一条革命性的思想——存储程序(stored-program)

程序指令和数据一样,都是二进制数,一起存放在存储器(内存)里;计算机按顺序取出指令并执行。

在今天看来这理所当然,但在当时,计算机的"程序"是插线板上一根根的线缆和开关,改程序就是改硬件。冯·诺依曼把"程序"变成了内存中的数据——换程序不再动硬件,只需换一批数据。今天你双击一个新软件就能运行,全靠这个思想。

2. 五大部件

冯·诺依曼结构把计算机划分为五大部件

部件 现代对应物 职责
运算器(ALU) CPU 的一部分 算术运算、逻辑运算
控制器(CU) CPU 的一部分 取指令、译码、指挥其他部件
存储器 内存(RAM) 存放指令和数据
输入设备 键盘、鼠标、硬盘、网卡 把外部信息送入计算机
输出设备 显示器、硬盘、网卡 把结果送出去

注意:硬盘和网卡既是输入又是输出设备——数据进出计算机,都要经过它们。

3. 现代计算机的物理组织

flowchart LR
    subgraph CPU[CPU 核心]
        ALU[运算器 ALU]
        CU[控制器]
        REG[寄存器]
        CACHE[缓存 L1/L2/L3]
    end
    MEM[内存 DRAM] <--> CACHE
    subgraph IO[输入输出设备]
        DISK[硬盘 SSD/HDD]
        NIC[网卡]
        GPU[GPU + 显存]
        KB[键盘鼠标]
    end
    MEM <--> IO
    MEM --> DISP[显示器]
    GPU --> DISP
  • CPU:负责"想"(计算),但它自己不带数据,数据要从内存拿
  • 内存:CPU 的工作台,程序和数据在这里"现场"存放
  • 硬盘/网卡/键盘/显示器:负责"进"和"出"
  • 总线(图上没画):连接这一切的"高速公路"

关键认知:所有数据都在内存里流动。 CPU 不直接读硬盘、不直接收网卡——它只和内存打交道,所有输入输出都先把数据搬进内存,再由 CPU 处理。理解了这一点,就理解了整台计算机。

二、CPU:计算机的大脑

1. CPU 里有什么

一个 CPU 核心由三部分组成:

  • 控制单元(CU):负责"取指令 → 译码 → 指挥执行",是发号施令的总司令
  • 运算单元(ALU):负责真正的计算——加减乘除、与或非、比较
  • 寄存器(Register):CPU 内部的一小撮存储,存取速度最快,存正在运算的数
  • 缓存(Cache):CPU 内嵌的小块高速存储,下一节详说

2. 指令周期:CPU 是怎么干活的

CPU 每干一件小事,都走同一条流水线——指令周期(instruction cycle)

取指(fetch)→ 译码(decode)→ 执行(execute)→ 写回(write back)

以执行 1 + 2 为例:

  1. 取指:控制器按"程序计数器(PC)"指向的地址,从内存中取出指令
  2. 译码:控制器识别出"这是一条加法指令"
  3. 执行:ALU 把寄存器里的 1 和 2 加起来
  4. 写回:结果 3 存回寄存器(或写回内存)

主频 3 GHz 的 CPU 每秒重复这个循环约 30 亿次——所谓"3 GHz"就是每秒钟的时钟周期数。一条指令往往需要多个时钟周期。

3. 核心、线程与超线程

  • 核心(core):一个核心 = 一条独立的指令周期流水线,多核 = 多个"大脑"可以真并行
  • 线程(thread):操作系统调度的最小单位,一个核心同一时刻只能跑一个线程
  • 超线程(Hyper-Threading):Intel 2002 年引入的技术,把一个物理核模拟成两个逻辑核——核心内很多部件(缓存、控制逻辑)在执行一条指令时是空闲的,超线程让它们同时伺候第二条指令。8 核 16 线程,就是"8 个物理核,当 16 个逻辑核用"

注意区分:核心是硬件概念,线程是软件概念。超线程让"线程"有了硬件影子,这也是操作系统课程里让人头大的地方。

4. 缓存:CPU 和内存之间的缓冲带

CPU 太快了,内存太慢了。一个 CPU 时钟周期约 0.3 纳秒,而访问一次内存要 几十到上百纳秒——CPU 的运算速度比内存快两个数量级。如果每次取数都去内存,CPU 大部分时间都在干等,这种现象叫内存墙(memory wall)

解法是在 CPU 里塞几层小容量、超高速的缓存:

缓存 容量 速度 特点
L1 几十 KB ~1 纳秒(几个时钟周期) 分指令缓存和数据缓存,每核独有
L2 几百 KB ~几纳秒 每核独有
L3 几 MB ~ 几十 MB ~十几纳秒 多核共享
  • 缓存用 SRAM(静态随机存储器)实现,内存用 DRAM(动态随机存储器)。SRAM 快但贵,所以只能做一小块;DRAM 慢但便宜,所以能做成几个 GB 的内存条
  • 缓存的魔法在于局部性原理:程序访问的数据在时间和空间上都是扎堆的(循环、连续数组),CPU 会把整块(64 字节一个 cache line)一起搬进缓存,下一次访问直接命中
  • 多核共享 L3 带来一个新问题:核 A 改了某个数据,核 B 的缓存里还是旧值。CPU 通过缓存一致性协议(如 MESI)保证各核缓存同步

小知识:L1 延迟是纳秒级,内存延迟是百纳秒级,硬盘是毫秒级。 记住这三个数量级,后面所有"为什么这么设计"都有答案了。

三、内存:程序的舞台

1. 内存是什么

内存(Memory,RAM) 是程序运行的"现场":程序指令、数据、变量、打开的文件内容,运行期间都摆在内存里。内存的两个特点决定了它的角色:

  • 随机访问:按地址直接存取任意位置,速度恒定(所以叫 RAM,Random Access Memory)
  • 断电丢失:内存是易失性存储(volatile),关机后数据清空——所以关机前要"保存",保存就是写进硬盘

中文里"内存"这个名字很贴切:它就像人的短期记忆,正在想的事都在这,但睡一觉(关机)就忘;硬盘是长期记忆,笔记本写下来,十年后还在。

2. 为什么内存是 DRAM

内存条上的颗粒是 DRAM(动态随机存储器)。它的原理是电容存电荷表示 0/1,但电容会漏电,所以必须每隔几毫秒"刷新"(重新充电)一次——"动态"就是指这个持续刷新。

  • 内存访问延迟约 50~100 纳秒,比 L3 缓存还慢一个数量级
  • 现在的内存是 DDR SDRAM(双倍速率),DDR4 常见 2133~3200 MHz,DDR5 已到 4800+ MHz。每个时钟周期传两次数据,所以叫"双倍"

3. 地址空间:内存的"门牌号"

内存按字节编址,每个字节有一个地址。CPU 通过地址总线指定要访问哪个位置:

  • 32 位地址总线 → 最多 2^32 = 4 GB,这就是老电脑"内存到 4G 就上不去"的原因
  • 64 位地址总线 → 2^64 ≈ 160 亿 GB,物理上不可能用满

4. 虚拟内存:给每个程序一块"虚拟大陆"

这是操作系统与硬件协作的经典例子:虚拟内存(virtual memory)。操作系统给每个程序一个虚构的巨大地址空间(64 位下约 16 EB),程序以为自己独占整个内存;真实的物理内存由 OS 统一分配,通过 MMU(内存管理单元,CPU 内的硬件)完成虚拟地址 → 物理地址的映射。内存不够时,OS 把暂时不用的页挪到硬盘上的交换分区(swap / 页面文件),用的时候再换回来。

这一节是操作系统章节的引子,硬件层面的知识到"MMU 做地址翻译、按页(4 KB)管理"即可。

四、硬盘:持久的大仓库

1. 机械硬盘 HDD:会转的唱片

机械硬盘把数据写在盘片(铝合金/玻璃圆盘)表面的磁性涂层上,读写靠一个悬在盘片上方几纳米处的磁头

  • 盘片以 5400 / 7200 转/分钟 旋转,磁头在盘片表面"扫"出一个个磁道、扇区
  • 读数据要经历寻道(磁头移动到目标磁道)→ 旋转等待(等目标扇区转到磁头下)→ 读取
  • 机械运动决定了它随机读写很慢(毫秒级延迟),但顺序读写还行(百 MB/s 级)

2. 固态硬盘 SSD:没有机械部件的闪存

SSD 用 NAND 闪存存储:每个存储单元是一个浮栅晶体管,靠电荷有无表示 0/1,没有盘片、没有磁头、没有马达:

  • 随机读写也是微秒级,比机械硬盘快两个数量级,这正是电脑"换 SSD 如换新机"的原因
  • 接口:老式 SATA(理论 6 Gb/s ≈ 750 MB/s),现代 NVMe 走 PCIe 总线(Gen3 x4 约 3.5 GB/s),快数倍
  • 代价:闪存有擦写寿命(每个单元约 1千~10万次),主控通过磨损均衡把写入摊到所有单元上;机械硬盘寿命则取决于物理磨损

3. 存储金字塔:整个计算机的"粮仓体系"

把前面讲过的所有存储放在一起,是一张经典的金字塔

flowchart TD
    REG[寄存器 ~1ns<br/>几十字节] --> C1[L1 缓存 ~1ns<br/>几十 KB]
    C1 --> C2[L2 缓存 ~几ns<br/>几百 KB]
    C2 --> C3[L3 缓存 ~十几ns<br/>几~几十 MB]
    C3 --> RAM[内存 DRAM ~百ns<br/>8~64 GB]
    RAM --> SSD[固态硬盘 ~几十µs<br/>几百 GB~几 TB]
    SSD --> HDD[机械硬盘 ~几ms<br/>几 TB]
    HDD --> TAPE[磁带 / 云存储 秒级<br/>无限]

越往上越快、越贵、越小;越往下越慢、越便宜、越大。 整个计算机的性能,本质上就是操作系统和硬件共同在这条金字塔上做"搬运"——把常用的数据往上挪,把不常用的往下放。没有哪一层能互相替代,这就是为什么缓存、内存、硬盘三者缺一不可

五、主板与总线:把部件连起来的纽带

1. 总线:部件之间的高速公路

CPU、内存、硬盘、网卡、显卡都插在主板(Motherboard)上,主板用总线(bus)把所有人连起来。总线按传输内容分三类:

总线 干什么 由什么决定
数据总线 传数据 宽度决定一次传多少字节(64 位 = 一次 8 字节)
地址总线 说"我要访问哪个地址" 宽度决定寻址空间(32 位 = 4 GB)
控制总线 发命令(读、写、中断) ——

2. 从南北桥到 PCIe:总线架构的变迁

  • 2008 年以前:内存控制器、各种设备控制器都挂在主板芯片组上,分"北桥"(管内存、显卡,快)和"南桥"(管硬盘、USB,慢)。CPU 访问内存要绕道北桥
  • 2008 年(Intel Nehalem)内存控制器被集成进 CPU,CPU 直连内存,延迟大降。北桥名存实亡,剩下的南桥改叫芯片组(PCH)
  • 今天:CPU 与显卡、NVMe 硬盘、网卡之间用 PCIe(PCI Express) 总线直连

PCIe 是现代的通用高速总线,由若干条 lane(通道) 组成,每条 lane 是一个双向高速串行链路:

版本 每条 lane 单向带宽
PCIe 3.0(2010) ~1 GB/s
PCIe 4.0(2017) ~2 GB/s
PCIe 5.0(2019) ~4 GB/s
  • 显卡占 x16 条 lane,NVMe 硬盘 x4,网卡 x1~x8
  • 显卡 4K 游戏每帧要传几 GB 数据,全靠 x16 的带宽;这就是"插错插槽显卡降速"的原因

3. 一次典型的"搬运":CPU 读硬盘文件

把 CPU、内存、总线、硬盘串起来看一次读文件:

1. 程序执行 read() → 操作系统收到请求
2. CPU 通过总线告诉硬盘控制器:"把扇区 100 的数据读到内存地址 0x400000"
3. 硬盘 DMA(直接内存访问)——数据由硬盘控制器直接写进内存,不经过 CPU
4. 数据就位后,硬盘控制器向 CPU 发一个【中断】,CPU 从内存读取数据继续干活

这里有个计算机体系里最重要的思想:DMA + 中断。硬盘、网卡这类慢速设备,如果让 CPU 盯着它逐字节拷贝,CPU 会被彻底拖死。所以设备直接和内存之间搬运数据(DMA),搬完再喊 CPU 一声(中断)。CPU 只负责发起和收尾,不负责搬运。

六、网卡:与世界连接

1. 网卡是谁

网卡(NIC,Network Interface Card) 是计算机与外部世界(局域网、互联网)之间的唯一通道。它要做的事比想象中多:

  • :把网线/无线信号里的比特流解析成一个个以太网帧,检查帧头里的 MAC 地址(48 位,出厂时烧录、全球唯一)是不是自己的,是就收下
  • :把要发送的数据封装成帧,打上自己的 MAC 和目标的 MAC,转成电信号/无线信号发出去

2. 数据怎么进出内存

网卡是典型的"DMA 设备":

  • 接收:网卡收到数据 → 直接 DMA 写入内存中的接收缓冲区 → 发中断通知 CPU → 操作系统把数据交给应用程序
  • 发送:程序把数据写到内存 → CPU 通知网卡"去 0xXXXX 拿数据" → 网卡 DMA 读出并发出

整个收发过程,数据流过内存但不经过 CPU 的"手"——CPU 只在开始和结束时各点一次头。高端网卡还有多队列(多个 CPU 核可以并行处理不同连接)、校验和卸载(帧校验由网卡硬件算,不再占 CPU),目的只有一个:把 CPU 从 IO 中解放出来做计算

顺带一提:服务器网卡早已不是"一块卡",而是几十 Gbps 的智能网卡,自带 CPU 和内存,能卸载更多协议处理——这是云计算的硬件底座之一。

七、GPU:专职并行计算的"画图工"

1. 显示器为什么需要显卡

先看显示器:它本质是几百万个发光点的栅格阵列(如 1920×1080 = 207 万个像素)。显示器自己不"想"画面,它只做一件事——以固定频率(刷新率,60/120/144 Hz)刷新屏幕,而屏幕上每个像素显示什么颜色,需要某个处理器去算。

GPU(Graphics Processing Unit) 就是干这个的处理器。整个链条是:

CPU 告诉 GPU"画这个场景"(顶点、光照、纹理数据)
   → GPU 按渲染管线逐像素算出颜色,写入显存(VRAM)中的帧缓冲(framebuffer)
   → 显卡以 60 次/秒 的频率把帧缓冲扫描输出为视频信号(HDMI/DP)
   → 显示器收到信号,点亮对应像素

2. 为什么 GPU 这么快:大规模并行

和 CPU 的设计哲学完全相反:

CPU GPU
核心 几个~几十个强核心,单核极快 数千个弱核心,单核很慢
擅长 复杂的串行逻辑、分支判断 简单的并行计算,越多越好
比喻 一个精通十八般武艺的老师傅 一千个只会"乘法"的流水线工人

画面渲染正是"流水线工人"的活:207 万个像素,每个像素的颜色怎么算互不相关——完美并行。GPU 让上千个核心各算各的像素,几十毫秒就算完一帧;用 CPU 硬算,一帧要几秒。

  • 显存(VRAM)是 GPU 自己的高带宽内存(GDDR),带宽是内存的数倍——渲染一帧要读写海量像素数据,带宽比容量更关键
  • 视频播放看似是"播放器"在干活,其实是 GPU 硬件解码(H.264/H.265 专用电路)把 CPU 彻底解放

3. GPGPU:GPU 不只是画图

2006 年 NVIDIA 发布 CUDA,开放 GPU 的并行能力给通用计算,GPU 从此变成通用并行处理器(GPGPU)

  • AI 训练:深度学习就是海量矩阵乘法,GPU 的数学本质和它渲染像素的数学本质一模一样
  • 挖矿:加密货币的哈希运算,同样是海量并行计算
  • 科学计算、视频转码、光线追踪

今天"显卡"这个词已经名不副实——GPU 是计算机里仅次于 CPU 的第二大处理器,某些场景下(AI 训练)它才是主角。

八、完整的一天:硬件如何协作

把前面所有部件串起来,走一遍"早晨打开电脑看一个视频"的全过程:

1. 开机:从没电到操作系统

按下电源键
 → 主板供电,CPU 上电,从主板 BIOS/UEFI(固化在闪存里的固件)取第一条指令
 → POST 自检:检查内存、显卡、硬盘是否就位
 → UEFI 从启动盘(SSD)读出引导程序(bootloader)
 → 引导程序把操作系统内核从硬盘读到内存
 → 内核接管一切:初始化内存管理、设备驱动……

开机的一瞬间,是硬件和固件在跳舞:CPU 此刻还不知道"硬盘"是什么,它只是按地址去取指令,而这些指令恰好来自 BIOS,BIOS 又恰好把内核从硬盘搬进了内存。

2. 打开浏览器:请求的旅程

flowchart LR
    N[网卡] --DMA--> M[内存]
    C[CPU] <--> M
    M --> G[GPU]
    G --> D[显示器]
    H[硬盘] --DMA--> M
  1. 点图标:鼠标(输入设备)通过中断把"点击"送给 CPU → CPU 运行操作系统的图形界面代码,找到浏览器程序
  2. 加载程序:操作系统向硬盘控制器发 DMA 请求,浏览器程序代码从 SSD 读进内存(要用哪部分才读哪部分,这就是虚拟内存的按需分页)
  3. 请求视频:浏览器把"给我这个视频"的数据交给网卡,网卡 DMA 发出;对方服务器把数据发回来,网卡 DMA 写入内存并中断通知 CPU
  4. 解码渲染:CPU 把视频数据的"解码"任务交给 GPU 硬件解码器,GPU 把每帧画面算进显存帧缓冲,扫描输出到显示器——你看到了画面
  5. 中间穿插:整个过程中,CPU 在内存、缓存、寄存器之间跑来跑去执行着几十万个指令周期,硬盘和网卡都在用 DMA 悄悄搬运,GPU 在几千个核上并行算像素

3. 总结:这台机器的"组织分工"

部件 在整体中的角色
CPU 决策者:执行指令,指挥全局;不做数据搬运
内存 舞台:所有数据都在这里汇聚、流动
缓存/寄存器 CPU 身边的速记本:热点数据就近存放
硬盘 仓库:断电也不丢数据,DMA 进出
网卡 外交官:与世界交换数据,DMA 进出
GPU 画师:并行算图、算矩阵;显存帧缓冲直通显示器
总线 高速公路:连接一切,决定搬运速度
显示器/键盘鼠标 脸和手:人机交互的进出口

一台计算机工作的本质:所有数据汇聚在内存,CPU 负责"想",GPU 负责"画",硬盘和网卡用 DMA 负责"搬",总线负责"连通",操作系统负责"调度"。硬件提供能力,协作产生结果——任何一台电脑,无论多贵,干活的都是这套组合拳。