计算机硬件组成
计算机硬件组成
复习定位
打开机箱看到的每块硬件都是冯诺依曼五部件的物理实现——CPU=运算器+控制器、内存=存储器、键鼠显示器=I/O设备。但它们不是直接插在CPU上——主板的总线系统把它们连接起来。理解每块硬件的角色和它们之间的数据通路是理解"程序为什么能跑"的前提。
从冯诺依曼部件到物理硬件
冯诺依曼的五部件(运算器、控制器、存储器、输入设备、输出设备)在物理上被实现为若干块独立的芯片和电路板,通过主板上的总线连接。
CPU——运算器和控制器的合体封装。内部包含ALU(运算器核心)、控制单元(控制器核心)、寄存器组(包括PC和IR)、Cache(缓解冯诺依曼瓶颈的多级缓冲)。CPU靠针脚与主板连接——AMD的AM5接口有1718个针脚,Intel的1700接口有1700个触点。功能不同的针脚——电源(Vcc,约600个)、接地(GND,约600个)、地址总线(50个左右)、数据总线(64个左右)、控制信号(各种协议)。CPU的散热问题无法回避——现代CPU在满负载下可产生约200W热量——这相当于一个小型电暖器在一个指甲盖大小的硅片上释放。散热器+风扇将热量从芯片带走——如果散热器脱落,CPU在几秒内可达到100℃以上导致热节流甚至物理烧毁。
内存——冯诺依曼模型中的存储器。内存条通过DIMM插槽插入主板——触点条数是DDR5内存条边缘的金手指(288个触点)。内存每秒从CPU的数据总线接收指令和发送数据。DDR(double data rate,双倍数据率)的含义是——在时钟上升沿和下降沿各传输一次数据——内存在一个时钟周期内传输两次数据,等效频率=时钟频率×2。
主板——承载所有硬件的印刷电路板。PCB层数通常为4-8层,每层之间互相绝缘并通过过孔连接。主板上的芯片组(目前已被CPU承载的I/O子系统取代大部分功能)负责协调CPU和I/O接口。
硬盘——冯诺依曼模型中的存储器在持久化场景下的补充。固态硬盘由NAND闪存构成——数据以电荷形式存储在浮栅晶体管中。NAND在擦除时必须先以块为单位(512KB-8MB)擦除整个块才能重新写入页(4-16KB)。这种读写不对称性使得GC(垃圾回收)在SSD中极其重要——否则写入性能会在写满后骤降三到五倍。
显卡——包含GPU(图形处理器)——一个专门为大规模并行运算优化的协处理器。现代GPU有数千个核心(shader units)——每个核心运行在不同的数据上但有同样的指令——这就是SIMD(单指令多数据流)的极致。CPU卸载后端的画面渲染和并行浮点计算给GPU完成——CPU负责提交渲染命令,GPU通过PCIe直接拉取缓存中的纹理数据和顶点数据。
电源——将220V/110V交流电转换为+12V、+5V、+3.3V等多路直流电。+12V供CPU和显卡的主要功率需求、+5V供USB和部分逻辑电路、+3.3V供芯片组和内存电压。电源模块输出最关键的线缆是CPU的8+4+4针EPS12V供电——CPU在大负载时的瞬间电流可以超过200A——如果12V线缆阻抗稍高,电压会在瞬间跌出CPU工作允许的容差之外导致系统蓝屏重启。
各硬件的启动顺序
按下电源键→电源通过PS_ON信号被拉低、启动内部PWM开关电路、开始向全主板各组件供电——电源在稳定输出所有电压后向主板发送POWER_OK信号、等待所有电压提升到稳定区间→芯片组的计时器、CPU等待芯片组发出的复位信号被释放后从复位向量指向的BIOS ROM在x86下的复位地址为0xFFFFFFF0开始执行第一条指令。
CPU上电时的初始状态:寄存器和Cache处于未定义状态、分页和分段未开启、CPU处于实模式(只有20位地址线、最大寻址1MB)。BIOS和UEFI在实模式下执行的程序必须足够简单——它们的代码依赖于从复位向量跳到ROM入口后、初始化CPU和芯片组、检测内存、初始化硬件、再加载引导程序。这一连串步骤耗时约2-10秒——主要是POST自检和检测各硬件配置所需要的时间。
总线的数据传输
CPU和内存通信的具体路径:CPU把要读的地址加载到地址总线→通过地址总线的50根线送到内存控制器(目前集成在CPU内部称为IMC)→IMC进行CAS和RAS时序选择→从内存阵列读出数据帧→通过数据总线的64根数据线返回CPU。这一过程受限于总线时钟频率和协议——DDR5-6000的数据总线带宽大约为6000MT/s×64bit/8=48GB/s。
总线在大幅度集成之前是由芯片组中的北桥管理的——北桥连接CPU到内存和显卡的高频通信——南桥管理SATA、USB和PCI插槽等较慢速外设。近年Intel和AMD的CPU逐步把内存控制器和PCIe控制器直接集成到CPU内——芯片组(现在的PCH或FCH)专注于南桥的功能。
CPU和显卡通信:通过PCIe总线的双向差分串行链路。PCIe的每条lane由两对差分信号线组成——一对发送一对接收——使用8b/10b或128b/130b编码。PCIe 5.0的×16通道每个方向可获得约64GB/s的带宽。CPU通过MMIO操作显卡的寄存器来递交命令——显卡的DMA引擎自动从系统内存读取它渲染需要的顶点/纹理/索引数据——无须CPU逐包搬运。
硬盘和内存通信:SATA协议的硬盘写入一条指令的流程——CPU向硬盘控制器写入ATA命令寄存器(指定要读写的LBA扇区号、传输扇区数)→硬盘控制器将命令传给硬盘——硬盘通过DMA引擎向主内存的缓冲区直接传输数据——传输完成后硬盘通过中断请求线向IO APIC发送中断。SATA的单向带宽约为600MB/s(SATA 3.0)。NVMe SSD通过PCIe x4挂载在CPU的PCIe控制器上——带宽为4×2GB/s≈8GB/s——NVMe的命令队列可以深排到64K条(相比于AHCI的1条队列32条命令)大幅提高SSD的IO并发度——随机读写性能可达数十万IOPS,比SATA盘快一个数量级。
硬件兼容性和性能指标
CPU系列与主板芯片组之间是否兼容由插槽类型决定——同代CPU在同一插槽类型下可互换——跨代可能需要BIOS更新。Intel的12/13/14代CPU共用LGA1700插槽但需要BIOS微码更新支持——主板厂商在出厂BIOS版本上可能不对较新的CPU提供支持需要用户手动刷写BIOS用Q-Flash或USB BIOS Flashback刷新主板外接电源时刷新的Flash。
内存的兼容性主要看JEDEC标准——DDR4内存条不能插入DDR5内存槽(DDR5槽的防呆豁口位置不同)。内存频率超过CPU官方支持的最高规格——CPU内部的IMC无法稳定运行在过高频率——可能导致系统不定时死机。XMP(Intel)和EXPO(AMD)对内存进行超频——读取内存条SPD芯片中预存的超频配置——自动应用更高的电压和频率设置。但手动超频需要权衡性能和稳定性——把内存延迟时序从CL36压到CL30可以带来约5%的内存延迟提升——但需要增加内存电压(从1.35V升到1.45V)并加强散热。
硬盘的兼容性主要由接口标准: SATA→SAS→NVMe各不相通。PCIe 3.0的NVMe SSD插在PCIe 5.0的插槽上可以正常工作切换到PCIe 3.0模式但速度被限制在PCIe 3.0x4的约4GB/s。反过来PCIe 5.0的NVMe SSD插在PCIe 3.0的插槽上也可以向下兼容同样限速。因此SSD的速度和插槽版本彼此制约,在预算受限制的情况下用PCIe 4.0的盘已够大多数用户的需求而PCIe 5.0的盘则被极端延迟苛刻的编辑器和数据库OLTP场景所必需。
程序运行过程中各硬件的协作
以"双击微信图标"这个动作为例,各硬件的协作全程:
1. 键盘/触摸板产生输入事件→USB控制器→中断→CPU→OS读取输入
2. OS检查事件类型→在文件系统中找到微信可执行文件路径
3. CPU向NVMe SSD发送READ命令(通过PCIe+DMA)
4. SSD主控器从NAND闪存读取微信的代码页→DMA传输到系统内存
5. 传输完成→SSD发中断→OS分配进程PCB→设置页表→跳转到入口
6. CPU从内存读取微信的指令→指令进入L3→L2→L1I→译码执行
7. 微信初始化→调图形接口→CPU向GPU提交渲染命令(通过PCIe)
8. GPU读取显存中的帧缓冲数据和主内存中的纹理数据→渲染完成→写入显存
9. 显示控制器从显存读取下一帧画面→通过HDMI/DP转换器传给显示器
10. 显示器面板像素根据LVDS信号点亮不同颜色的OLED子像素→用户看到微信图标在键盘被按下到屏幕上出现新窗口之间的几百毫秒里——CPU、内存、SSD、GPU、总线、电源全部参与——现代计算机每秒执行数十亿条指令、传输数GB数据。绝大多数协作用户看不到——但任何一环成为瓶颈都会影响整体的"是否感觉流畅"。
复习检查
CPU针脚中哪些是负责"CPU和内存之间读数据"的——地址线、数据线和控制线各自的功能范围是什么?
POST过程中CPU处于什么模式——为什么在这种模式下不能直接访问超过1MB的内存?
为什么NVMe SSD通过DMA传输数据比CPU用IN/OUT指令搬数据快——DMA的优势体现在哪两个层面?
电源模块的PS_ON信号如果被主板拉低后POWER_OK信号没有在指定时间内到达——系统会如何处理?
一条DDR5-6000内存的数据带宽约48GB/s——如果CPU要从中读取64字节——多久可以完成传输?