1. CPU工作原理:核心引擎
CPU是计算机系统的“大脑”,负责执行程序指令、处理数据、协调其他组件。其核心功能模块包括:
-
ALU - 核心计算单元:
- 功能: 执行所有的算术运算和逻辑运算。算术运算包括加、减、乘、除(可能由协处理器或多次移位相加实现)。逻辑运算包括AND、OR、NOT、XOR、移位、比较等。
- 操作数来源: 从寄存器或指令本身(立即数)获取输入数据。
- 结果存储: 将计算结果输出到寄存器、标志位,有时也直接到内存。
- 是CPU速度和能力的核心体现。 设计高效的ALU是提升性能的关键。
-
寄存器 - CPU的“超级快速内存”:
- 功能: 存储CPU当前处理所需的数据和状态信息。访问速度极快(纳秒级),但容量很小。
- 类型:
- 通用寄存器: 程序员可用的主要工作空间,存储操作数和中间计算结果。ARM Cortex-M/A、RISC-V、MIPS都有多个(如MIPS的32个,ARM Cortex-M 的 R0-R12)。
- 特殊功能寄存器:
- 程序计数器: 存储下一条待执行指令的内存地址。执行指令或发生跳转/中断时会改变。
- 指令寄存器: 保存当前正在执行的指令本身。
- 状态寄存器/标志寄存器: 存储ALU运算结果的状态或系统状态。关键标志位有:
- 零标志: 结果为零时为1。
- 进位标志: 算术运算产生进位或借位时为1。
- 溢出标志: 有符号运算结果超出表示范围时为1。
- 中断启用标志: 允许/禁止响应可屏蔽中断。
- 负标志: 结果最高位为1时为1(表示负数)。
- 堆栈指针: 指向内存中栈顶的地址。用于存储函数调用时的返回地址、传递参数、保存寄存器内容(上下文切换)。
- 链接寄存器: 在某些架构中专门用于存储函数调用的返回地址(ARM、RISC-V)。
- 其他: 架构相关的特殊寄存器,如控制寄存器(如MMU配置)、调试寄存器、SIMD寄存器(ARM NEON, RISC-V Vector, MIPS MSA)。
-
指令集架构 - CPU的语言:
- 定义: 定义了CPU能够理解和执行的所有指令的集合,以及指令的格式(编码)、寻址模式、操作数类型、寄存器的使用规则、内存访问方式、特权级别、中断和异常处理方式等。是软件和硬件之间的契约。
- 重要代表:
- ARM Cortex-M/A: 精简指令集,主导嵌入式/移动/高性能领域。 特点:
- 统一寄存器组: Thumb-2 兼容模式使其高效灵活。
- Load/Store架构: 数据处理指令只操作寄存器,访存通过专门的
ldr/str指令完成。 - 丰富的条件执行: 很多指令可条件执行(避免分支预测开销)。
- 多种模式: 特权模式、用户模式、中断/异常模式(在A系列更复杂)。
- Thumb指令集(16位/32位混合): 提高代码密度。
- NEON(A系列): 强大的SIMD扩展。
- TrustZone: 硬件隔离的安全扩展。
- 标准中断控制器: NVIC。
- RISC-V: 开源的精简指令集。 特点:
- 模块化/可扩展: 核心RV32I/RV64I指令集+可选标准扩展(乘除法M、原子A、单/双精度浮点F/D、压缩指令C、向量V等)。高度定制化。
- 清晰的指令编码: 指令格式规整,解码相对简单。
- 丰富的寄存器: RV32/64提供 32个通用整数寄存器。
- Load/Store架构。
- 特权级别: 用户/监管/机器模式。可扩展为更多级别。
- 强大的社区和生态。
- MIPS: 经典的精简指令集架构之一。 特点:
- 固定32位指令长度: 早期设计目标之一。
- 32个通用寄存器: 使用规范清晰。
- 典型的5级流水线: IF(取指)、ID(译码)、EX(执行)、MEM(访存)、WB(写回)。
- 延迟槽: 分支指令后的一条指令总是被执行。现代编译器可以较好地优化。
- 清晰的Load/Store分离: 数据存取严格分开。
- ARM Cortex-M/A: 精简指令集,主导嵌入式/移动/高性能领域。 特点:
- 关键概念:
- CISC vs RISC: ARM, RISC-V, MIPS都是RISC思想的代表,强调指令数量精简、格式规整、指令周期相对一致(单周期指令为主)、通过增加寄存器数量来减少访存、Load/Store分开。相比之下,x86主要属于CISC(复杂指令集)。
- 流水线: CPU通过将指令执行分解成多个阶段(如取指、译码、执行、访存、写回),让多条指令的不同阶段重叠执行,显著提升吞吐量。现代CPU有很深的流水线(10+级)。
- 执行指令的步骤:
- 取指: 根据PC中的地址,从内存/指令缓存中取出指令放入IR。
- 译码: 硬件解码IR中的指令,确定操作码、操作数地址(来自寄存器、内存或立即数)。
- 执行:
- 若需要数据,ALU可能执行计算。
- 若需要访存,计算有效地址(寻址模式)。
- 若为控制流指令(跳转、分支、调用),可能修改PC。
- 访存: 如果指令需要访问内存(读或写),则执行该操作。Load指令将从内存读取的数据放入寄存器。Store指令将寄存器内容写入内存。
- 写回: 将执行结果写入寄存器文件(目标寄存器)。取指、译码、执行、访存、写回这五个步骤构成了经典的五级流水线。指令按照顺序通过流水线阶段,不同指令的不同阶段可以并行执行。
2. 总线结构:信息高速公路
总线是CPU、内存、外设之间传输地址、数据和控制信号的一组共享通信线。
- 目的: 提供一种标准化的、高效率的、解决组件互连通信问题的方法。
- 层级结构: 现代高性能系统通常采用层次化的总线:
- 专用点对点链接: CPU核心与高速缓存之间的链接(通常是芯片内部的)。
- 系统总线: 连接CPU、缓存、内存控制器、高速DMA通道等。要求高带宽、低延迟(如QPI, HyperTransport, Infinity Fabric - 主要用于x86/AMD高端CPU)。
- I/O总线 / 扩展总线: 连接慢速外设控制器(声卡、网卡、USB控制器等)或扩展槽(PCI, PCIe)。
- AMBA - ARM的总线标准:
- 背景: ARM开发并推广的用于片上系统互联的总线协议家族。是嵌入式SoC中事实上的总线标准。
- 主要成员:
- AHB:
- 定位: 高性能、高带宽、低延迟连接。连接高性能主设备(CPU、DSP、DMA控制器)到高性能从设备(片上RAM、硬件加速器、高带宽外设控制器)。
- 特点: 单一时钟边沿操作(简单),流水线操作(更高吞吐),多个主设备仲裁,突发传输(更有效利用带宽),32/64/128位传输。
- APB:
- 定位: 低功耗、低复杂度连接。连接低带宽外设(UART, SPI, I²C控制器, GPIO,配置寄存器)。通常通过AHB-APB桥与AHB连接。
- 特点: 协议简单,非流水线,同步传输。易于外设设计,降低功耗。
- AXI:
- 定位: 更先进的高性能互连标准,替代和扩展AHB。
- 特点: 独立的地址/控制和数据通道(无序传输成为可能),支持无序完成(Out-Of-Order)、突发传输(AXI4)、数据宽度大(1k位)、低功耗、多个未完成事务(提升性能)、更复杂的互连拓扑(如Network-on-Chip)。是当前高性能ARM Cortex-A系列处理器和复杂SoC的核心互连协议。
- AHB:
- 总线传输关键概念:
- 仲裁: 当多个主设备(如多个CPU核、DMA)同时请求总线时,决定由哪个主设备获得总线控制权。
- 时序: 数据在总线上传输需要遵守特定的时钟同步要求。
- 宽度: 并行数据线的数量(32位, 64位等)。直接决定了每次传输能携带的数据量。
- 带宽: 总线传输数据的速率(总线宽度 * 时钟频率)。
- 等待状态: 当从设备(如慢速内存或外设)无法在标准时间内响应时,会插入等待周期,使主设备等待,降低了总线效率。
3. 存储器层次结构:速度与容量的平衡术
计算机程序对数据有“局部性”规律(访问过的地方短期内可能再访问;访问一个地方后倾向于访问临近的地方)。存储器层次结构利用这一规律,将容量小但速度极快的存储介质放在CPU附近,远离CPU的则容量大但速度慢。
- 核心目标: 以尽可能接近最快(L1 cache)的速度,提供接近最大容量(磁盘/闪存)的存储空间,同时成本尽可能低。
- 关键层:
- CPU寄存器:
- 位置: CPU内部(最快)。
- 速度: 访问速度极快(≈时钟周期)。
- 容量: 极小(几十到几百个字节)。
- 功能: ALU的直接操作数。
- 高速缓存:
- 位置: CPU芯片上或非常靠近CPU的独立芯片。
- 目的: 保存近期被CPU访问过的内存数据副本。命中高速缓存就能避免访问速度慢得多的主内存(DRAM)。
- 层次: L1(速度最快,容量最小,通常分指令缓存L1i和数据缓存L1d)、L2(较大、较慢)、L3(可能共享,更大、较慢)。
- 管理: 硬件管理(程序员通常不可见控制细节)。
- 映射: 决定主存块能放到Cache的哪些位置:
- 直接映射: 主存块只能放在Cache的一个固定位置。简单但容易冲突。
- 全相联映射: 主存块可以放在Cache的任意位置。命中率高但查找慢、硬件复杂、昂贵。
- 组相联映射: Cache分多组,主存块可以放在指定组内的任意位置(通常每组4-16路)。是实际中最常用的方式,平衡了效率和复杂度。如4路组相联。
- 主内存:
- 类型: 主要是DRAM。
- 速度: 比缓存慢1-2个数量级(纳秒级)。是构成“内存墙”的主要瓶颈。
- 特点: 需要周期性刷新以保持数据(漏电)。掉电数据丢失。
- 二级存储 / 外部存储器: 用于持久化存储程序和数据。CPU不能直接访问其内容(需加载到主内存)。
- 关键技术与对比:
- 硬盘:
- 速度: 毫秒级(寻道)+MB/s级(读写)。
- 寿命: 机械磨损(马达、磁头)、冲击损坏。数据理论上可永久保存(取决于磁性稳定性)。
- 访问方式: 随机访问(寻道慢)。
- Flash闪存(NAND为主):
- 技术: 电荷存储。需专门的控制器进行复杂的读写/擦除管理(FTL层)。
- 速度: 比硬盘快得多(随机读接近DRAM速度?需澄清:闪存的随机读远快于机械硬盘,但仍远慢于DRAM,约在微秒级;顺序读写可达几百MB/s甚至GB/s)。
- 寿命: 限制主要来自擦写次数:
- SLC: ~10万次。
- MLC: ~3000-10000次。
- TLC: ~500-3000次。
- QLC: ~100-1000次。
- 表现: 写入放大因子(实际写入量远大于用户请求写入量)、读取干扰(读取操作会引起邻近单元电荷泄漏)、数据保持期。
- 操作单位: 页(Page)读写(4KB+)、块(Block)擦除(128KB-2MB)。写之前必须先擦除(慢操作)。
- 类型:
- NOR Flash: 随机访问好(XIP - eXecute In Place),适合存储代码。容量小,价格贵。
- NAND Flash: 容量大,价格便宜,适合存储大量数据(SSD、手机/嵌入式存储、SD卡、U盘)。随机访问性能差。
- EEPROM:
- 技术: 电可擦除可编程ROM。
- 速度: 比NOR Flash慢,比NAND写快(因按字节写)。
- 寿命: 相对较高(10万-100万次),但仍有限制。
- 特点: 可直接按字节擦写(无需像NAND那样先擦大块再写页)。容量小。
- 用途: 存储参数配置(如主板BIOS设置、设备序列号)。
- 硬盘:
- 关键技术与对比:
- CPU寄存器:
4. 中断机制与DMA:提高效率的利器
-
中断机制 - 处理异步事件:
- 目的: 允许CPU在正常执行程序的过程中,及时响应硬件设备(如键盘输入、网络包到达、定时器到期)或软件异常(如除以零、非法指令)发出的服务请求。本质上是一种硬件驱动的受控程序执行流切换。
- 核心组件与流程:
- 中断源: 能发出中断请求的设备或事件(内部/外部)。
- 中断请求: IRQ信号被置位。
- 中断控制器 (如ARM NVIC): 集中管理多个中断源:
- 使能/屏蔽: 控制是否允许某个中断源发出请求。
- 优先级: 决定哪个中断请求更重要。优先级高的可以打断优先级低的正在处理的中断,即中断嵌套。
- 中断向量号/标识: 区分是哪个中断源发出的请求。
- CPU响应: 如果CPU处于允许中断状态(状态寄存器中中断使能位开启),且当前执行的指令不是关键区域,CPU在完成当前指令后:
- 保存现场:将关键寄存器(至少PC和状态寄存器)压入当前栈(硬件自动完成)。
- 关中断(可选/架构相关):在切换到中断模式时可能硬件自动关中断(防止更低优先级的打断,更高优先级由中断控制器决定能否打断)。
- 查找中断向量表: 硬件根据中断向量号(由中断控制器提供),从内存固定位置的中断向量表中取出对应的中断服务程序入口地址。
- 执行ISR: CPU跳转到入口地址,开始执行中断服务程序。ISR主要做两件事:
- 处理中断: 清中断标志(向设备确认中断已处理)、读取/写入设备数据等。
- 恢复现场并返回: 结束时,从栈中恢复之前保存的寄存器状态(特别是PC和状态寄存器),执行中断返回指令(如ARM的
BX LR或专用ISR_RETURN指令),使CPU恢复到被中断程序的下一条指令继续执行。
- 中断优先级与嵌套: 中断控制器比较多个活动中断请求的优先级,只有优先级最高的(且未被屏蔽)能送达CPU。如果新中断的优先级高于当前正在服务的中断的优先级,则发生中断嵌套:当前ISR被打断,CPU转而去执行更高优先级的ISR,执行完后再回来继续执行被中断的ISR。需要栈空间支持多级嵌套。配置不当会导致栈溢出或优先级反转。
-
DMA - 解放CPU进行数据搬运:
- 问题: CPU通过普通
load/store指令在内存和外设之间搬运大量数据(如从硬盘加载文件到内存,音频数据流传输)效率极低(消耗大量CPU周期在循环和控制上)。 - 解决方案: DMA控制器 (DMAC) 作为一个专用的硬件引擎,可以在无需CPU干预的情况下,在内存与外设(或内存的不同区域) 之间直接传输数据块。
- 工作原理:
- CPU配置DMA: CPU初始化DMA控制器,告诉它:
- 源地址(内存地址或外设端口)
- 目标地址(内存地址或外设端口)
- 传输字节数
- 传输方向(内存->外设, 外设->内存, 内存->内存)
- 传输方式(单次请求、块请求、请求模式等)
- 可选中断:传输完成时是否通知CPU。
- 启动传输: CPU启动DMA传输(通过写DMAC寄存器)。此时CPU可以继续执行其他程序。
- DMA请求/控制总线:
- DMA控制器等待外设发出数据就绪信号(或内部定时器触发)。
- 仲裁总线: DMAC与CPU竞争系统总线控制权(当CPU也需要访问总线时)。
- 接管总线: DMAC获得总线控制权后,直接操控地址总线和控制总线,并利用数据总线在源和目标之间搬运数据(字节、字、或突发传输)。
- 传输完成: DMAC完成指定字节数的传输后:
- 停止占用总线。
- 如果有配置,则通过中断信号线向CPU发出中断请求,通知CPU传输已完成。
- CPU处理完成: CPU响应中断(如果配置了),执行ISR进行后续处理(如确认DMA完成,通知应用程序数据已到位)。
- CPU配置DMA: CPU初始化DMA控制器,告诉它:
- 优势:
- 将CPU从低速的I/O数据搬运任务中彻底解放出来,提高CPU利用率。
- 由于是硬件直接操作总线并批量传输,数据搬运效率远高于CPU用软件循环搬运。
- 与中断的关系: DMA通常利用中断来通知CPU传输完成(或错误)。但在传输过程中,DMA控制器本身会发出总线请求来争用总线,这可能导致CPU访问总线/内存时延迟增加(总线仲裁)。现代高性能系统通过分离总线(如内存总线、I/O总线)或复杂的QoS控制来缓解冲突。
- 问题: CPU通过普通
总结: 理解CPU(ALU、寄存器、ISA)、总线(AMBA)、存储层次(Cache/DRAM/Flash特性差异)以及中断/DMA,是掌握计算机如何高效协同工作的基石。ARM Cortex-M/A、RISC-V等ISA的选择深刻影响着系统的性能、功耗和编程模型。AMBA总线架构解决了复杂SoC的高效互连。存储层次通过Cache弥补了CPU和主存的速度鸿沟。中断机制使CPU能及时响应外部事件,而DMA则极大释放了CPU进行高速数据搬移的压力。
1527

被折叠的 条评论
为什么被折叠?



