2.2 计算机硬件
2.2.2 处理器
冯诺依曼架构VS哈弗架构
冯・诺依曼:指令、数据共用同一条总线、同一个存储器;
哈佛结构:指令存储器、数据存储器相互独立,两套总线,可以同时取指令 + 读写数据。代表:MCU、DSP
指令集
- 复杂指令集 CISC 代表:Intel、AMD X86
- 简单指令集 RISC 代表:ARM
常见处理器分类
| 类型 | 全称 | 核心定位 | 特点 | 典型用途 | 存储架构 |
|---|---|---|---|---|---|
| CPU | Central Processing Unit中央处理器 | 通用计算主控,复杂逻辑调度 | 擅长分支判断、复杂逻辑、串行任务;控制能力强,并行算力弱;指令集通用(x86/ARM/RISC-V) | PC、服务器、手机主控核心,操作系统运行、业务逻辑处理 | 冯・诺依曼(现代 CPU 有分离 L1 缓存,考试按冯诺依曼作答) |
| GPU | Graphics Processing Unit图形处理器 | 大规模并行浮点计算 | 大量简单计算核心,适合重复、同类型并行运算;逻辑分支能力差 | 图形渲染、AI 训练 / 推理、科学计算、视频编解码 | 冯・诺依曼 |
| NPU | Neural Processing Unit神经网络处理器 | AI 神经网络专用 | 针对矩阵乘法、卷积做硬件加速,专门优化深度学习算子;低功耗 AI 推理 | 手机 AI、安防摄像头、边缘盒子、大模型端侧推理 | 专用哈佛 / 类哈佛架构 |
| DSP | Digital Signal Processor数字信号处理器 | 数字信号实时处理 | 硬件支持乘累加 (MAC),适合信号滤波、FFT;定点运算强,实时性好 | 音频处理、雷达、通信基带、传感器信号处理 | 哈佛架构 / 改进哈佛架构 |
| MCU | Microcontroller Unit微控制器 | 小型嵌入式控制 | CPU + 少量 RAM/ROM + 外设集成,极简,低功耗;算力弱,无 OS 或 RTOS | 家电、传感器、遥控器、单片机、工业小控制板 | 经典 51:哈佛Cortex‑M:改进哈佛(考题无改进选项选哈佛) |
| SoC | System on Chip片上系统 | 单芯片集成完整系统 | 不是单独一类处理器,是芯片集成方案;内部可包含 CPU+GPU+NPU+DSP + 外设 | 手机芯片、平板、车机、高端嵌入式(如麒麟、骁龙) | 无统一架构,内部各个核独立(CPU 核冯诺依曼,DSP/NPU 核哈佛) |
| FPGA | Field Programmable Gate Array现场可编程门阵列 | 可硬件重构的可编程电路 | 硬件逻辑可反复烧录修改;并行度高,流片前原型验证;主频一般,开发门槛高 | 芯片原型验证、通信基站、高速信号处理、边缘加速 | 可自定义搭建,无固定原生架构 |
| ASIC | Application Specific Integrated Circuit专用集成电路 | 为单一应用定制的硬件芯片 | 硬件逻辑固定,不可修改;性能最高、功耗最低,一次性流片成本极高 | 比特币矿卡、专用 AI 芯片、专用编解码芯片 | 按需设计,可冯诺依曼 / 哈佛 |
CPU组成
运算器
- 算术逻辑单元ALU:数据的算术运算和逻辑运算
- 累加寄存器AC:通用寄存器,为ALU提供一个工作区暂存数据
- 数据缓冲寄存器DR:写内存时暂存指令或数据‘
- 状态条件寄存器PSW:存状态标志与控制标志
控制器
- 程序计数器PC:存储下一条要执行指令的地址
- 指令寄存器IR:存储即将执行的指令
- 指令译码器ID:对指令中的操作码字段进行分析解释
- 时序部件:提供时序控制信号
2.2.3 存储器
存储器分类
存储器硬件结构分类
按照硬件结构分为:SRAM、DRAM、NVRAM、Flash、EPROM、Disk。
| 器件 | 断电保存 | 刷新需求 | 擦写粒度 | 读写速度 | 典型场景 |
|---|---|---|---|---|---|
| SRAM | 丢失 | 不需要 | 字节读写 | 最快 | CPU Cache |
| DRAM | 丢失 | 必须刷新 | 字节读写 | 快 | 主机内存 |
| EPROM | 保留 | 无 | 整片紫外擦除 | 读快写极慢 | 老式固件 |
| E2PROM | 保留 | 无 | 电信号按字节擦除 | 读快写慢 | 适合保存小量配置 |
| Flash(NAND/NOR) | 保留 | 无 | 按块擦除,页写入 | 中等 | SSD/U 盘 / 固件 |
| NVRAM | 保留 | 电池 / 新材料 | 字节随机读写 | 很快 | 关键配置数据 |
| Disk(HDD) | 保留 | 无 | 扇区读写 | 最慢 | 大容量文件存储 |
Flash 是按块擦除;EEPROM 是字节擦写(这是 EEPROM 和 Flash 最大区别)
存储器分层分类
存储器按照与处理的物理距离可以分为4个层次:片上缓存、片外缓存、主存(内存)、外存
| 存储类型 | 物理位置 | 存储介质 | 断电保存 | 速度 | 典型容量 |
|---|---|---|---|---|---|
| 片上缓存 | CPU 芯片内部、寄存器 | SRAM | ❌丢失 | 最快 | KB~几十 MB |
| 片外缓存 | CPU 外部、主板独立芯片、Cache(相联存储器) | SRAM | ❌丢失 | 很快 | MB 级 |
| 主存(内存) | 主板内存条、DRAM | DRAM | ❌丢失 | 中等 | GB 级 |
| 外存 | 独立外设 / 板载 Flash | Flash / 磁碟 | ✅永久保存 | 最慢 | TB 级 |
存储器访问机制分类
| 类型 | 访问特点 | 典型存储器件 | |
|---|---|---|---|
| 按地址访问 | 随机存取 RAM | 任意位置访问时间一致 | SRAM、DRAM(内存 / Cache) |
| 按地址访问 | 顺序存取 SAM | 从头到尾依次查找 | 磁带 |
| 按地址访问 | 直接存取 DAM | 先分区定位,区内顺序查找 | 机械硬盘 HDD |
| 按内容访问 | 相联存取 CAM | 按内容检索,而非地址 | TLB、高速匹配缓存 |
Cache
时间局部性:同一个指令短期再次执行
空间局部性:相邻存储单元被同一时间访问
工作集理论:进程运行时被频繁访问的页面集合
平均周期 = cache命中率 * cache周期时间 + (1-cache命中率) * 内存周期时间
cache对程序员时透明的,由硬件控制
内存
栈和堆
| 对比项 | 栈 Stack | 堆 Heap |
|---|---|---|
| 分配主体 | 系统自动分配、自动回收(函数调用结束自动释放) | 程序员手动申请(new/malloc)、手动释放(delete/free);忘记释放会内存泄漏 |
| 管理方式 | 后进先出 LIFO,连续一块内存区域 | 不连续内存块,链表方式管理空闲块 |
| 大小 | 容量很小,编译期 / 系统预设上限,容易栈溢出 (stack overflow) | 容量大,受限于进程可用虚拟内存 |
| 生长方向 | 向下增长(从高地址往低地址) | 向上增长(从低地址往高地址) |
| 存储内容 | 函数局部变量、函数参数、返回地址、临时变量 | 动态分配的对象、数组,大块数据 |
| 访问速度 | 极快,在 CPU 缓存友好,预分配,无复杂管理 | 相对慢,需要查找空闲内存块,有内存碎片 |
| 生命周期 | 随函数调用创建,函数退出立刻销毁 | 直到主动 free/delete,或进程结束才回收 |
| 内存碎片 | 几乎无碎片 | 容易产生内存碎片(外碎片) |
DMA
DMA:不经过 CPU,直接在内存与外设之间搬运数据,CPU 只负责初始化,传输过程 CPU 可以并行做别的任务。
两种传输场景
- 外设 ↔ 内存(最常用,例如 ADC 采集数据进内存、串口接收数据存入内存)
- 内存 ↔ 内存(内存块之间拷贝,部分 DMA 支持)
DMA 优点
- 减轻 CPU 负担:数据搬运不用 CPU 逐字节读写,CPU 可并行执行其他程序
- 传输速度快:省去 CPU 取指、拷贝、保存现场开销
- 适合大批量连续数据传输
磁盘
磁盘的基本原理
- 磁道 Track:一圈一圈同心圆
- 扇区 Sector:磁道切分的圆弧段,硬件最小读写单元
- 0 号磁道:最外圈
- 所有磁头固定在同一组磁头臂,同步径向移动,只能同时定位到同一个半径,形成柱面。
- 存取时间=寻道时间+等待时间+传输时间*
- 寻道时间:磁头移动到磁道的时间,径向移动的时间
- 等待时间:等待读写的扇区转到磁头下方的时间,圆弧移动的时间
磁盘存取时间与优化存储分布
单缓冲区时扇区数据被读入缓冲区后,缓冲区数据还没有完全处理结束,可能需要等待磁盘重新旋转一周才能读到下一个数据块
磁盘块偏移计算公式
逻辑字节长度:S
磁盘块大小:B
每条逻辑记录长度:L
每组记录数(一块能存几条记录):G
(G=⌊BL⌋) (G = \lfloor \dfrac{B}{L} \rfloor)(G=⌊LB⌋)逻辑记录所在磁盘块为:S / B
逻辑记录所在磁盘块内偏移: (R mod G)
磁盘阵列RAID技术
RAID(独立磁盘冗余阵列,Redundant Array of Independent Disks)
软考常考:把多块物理磁盘组合成一个逻辑磁盘,目标:提升 IO 性能、提供磁盘故障冗余;RAID ≠ 备份!RAID 只能防单块硬盘损坏,不能防误删、病毒、火灾;重要数据仍然需要单独备份。
| RAID 级别 | 最小盘数 | 核心原理 | 容错能力 | 可用容量 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|---|---|
| RAID0 | 2 | 条带化,无校验 | 0 块(坏任意一块全盘失效) | 所有盘容量之和 | 读写性能最高,容量利用率 100% | 无冗余,数据风险极高 | 临时缓存、可重建数据 |
| RAID1 | 2 | 镜像,两份完全一样数据 | 坏 1 块 | 总容量 / 2 | 读性能好、重建快、可靠性高 | 容量利用率只有 50%,成本高 | 系统盘、核心重要小数据 |
| RAID5 | 3 | 条带 + 分布式奇偶校验 | 坏 1 块 | 总容量−1 块盘 | 读性能优秀,容量与可靠性均衡 | 写性能差(每次写要算校验);大盘重建风险高 | 文件服务器、NAS |
| RAID6 | 4 | 条带 + 双分布式奇偶校验 | 坏 2 块 | 总容量−2 块盘 | 容错更强,大容量阵列首选 | 写性能比 RAID5 更差,计算开销大 | 大容量归档存储 |
| RAID10(1+0) | 4 | 先做两组 RAID1 镜像,再做 RAID0 条带 | 每组镜像最多坏 1 块 | 总容量 / 2 | 读写性能好、重建速度快、可靠性高 | 容量利用率 50%,成本高 | 数据库、高并发业务 |
| RAID01(0+1) | 4 | 先两组 RAID0 条带,再镜像 | 只能坏一组里 1 块 | 总容量 / 2 | 性能好 | 容错弱,一组 RAID0 坏两块直接崩,企业极少用 | 软考区分 RAID10 和 RAID01 |
硬 RAID vs 软 RAID
- 硬 RAID:独立 RAID 卡(带处理器 + 缓存)完成计算;操作系统只看到 1 块逻辑盘;不占用主机 CPU;性能稳定,支持断电保护;成本高。
- 软 RAID:操作系统内核(Linux mdadm、Windows 存储池)实现;校验计算消耗主机 CPU;不需要阵列卡;迁移灵活;性能差,系统崩溃容易丢阵列。
- FakeRAID(主板 RAID):主板 BIOS 里的 RAID,本质还是靠 CPU 运算,属于伪硬 RAID。
软考必背要点
- RAID0:无冗余,速度最快;一块盘坏,数据全部丢失。
- RAID1:镜像,容量减半,允许坏一块。
- RAID5:分布式奇偶校验,至少 3 块盘;允许坏一块,校验分散在所有磁盘,不是单独校验盘(区别 RAID3)。
- RAID6:双校验,最多坏两块。
- RAID10:至少 4 块盘,兼顾性能与冗余,数据库优选。
磁盘移臂调度算法
FCFS 先来先服务
- 规则:按 I/O 请求到达顺序依次访问,不考虑磁头当前位置
- ✅优点:简单,无饥饿
- ❌缺点:磁头来回大幅度跳动,平均寻道距离大,性能差
- 软考关键词:公平、顺序执行、无优化
SSTF 最短寻道时间优先
Shortest Seek Time First
- 规则:每次选离当前磁头最近的磁道请求
- ✅优点:平均寻道距离短,性能好
- ❌缺点:会饥饿(持续有近距离请求到来,远端请求永远得不到服务)
- 类比:短作业优先 SJF;软考选择题最爱考饥饿问题
SCAN 扫描算法(电梯算法)
- 规则:磁头沿一个方向移动,沿途处理所有请求;到达磁盘最顶端 / 底端边界,反向折返,继续处理沿途请求
- ✅优点:无饥饿,比 SSTF 公平
- ❌缺点:到达磁盘物理边界才掉头;两端磁道请求等待时间更长
- 类比:电梯,一路向上到顶楼,再下来
LOOK 算法(SCAN 改进版)
- 规则:不用走到磁盘物理边界,沿当前方向走到这条方向上最后一个请求,立刻掉头,不走到盘片尽头
- ✅优点:相比 SCAN,减少无用移动,寻道距离更短
软考提示:题目没有特别说明边界,SCAN 和 LOOK 经常区分考核
C-SCAN 循环扫描
Circular SCAN
- 规则:磁头只单向处理请求;走到磁盘边界,直接跳回磁盘起始端,返程途中不处理任何请求,再继续单向扫描
- ✅优点:所有磁道请求等待时间更均匀,消除 SCAN 两端等待时间差异
- ❌缺点:跳回起点有寻道开销
C-LOOK 循环 LOOK(C-SCAN 改进)
- 规则:单向处理请求;走到当前方向最后一个请求,直接跳跃到另一端第一个待处理请求,不走到磁盘物理边界,返程不服务请求
- ✅优点:C-SCAN 的优化,去掉走到磁盘边界的无效移动,性能最优
| 算法 | 核心特点 | 饥饿 | 关键点 |
|---|---|---|---|
| FCFS | 按请求顺序 | ❌无 | 最简单,性能差 |
| SSTF | 每次选最近磁道 | ✅会饥饿 | 平均寻道短,远端请求饿死 |
| SCAN 电梯 | 到磁盘边界再折返,往返都服务 | ❌无 | 两端请求等待久 |
| LOOK | 到最后请求就掉头,不碰边界 | ❌无 | SCAN 优化,少走冤枉路 |
| C-SCAN | 单向服务,到边界跳回起点,返程不服务 | ❌无 | 请求等待时间均匀 |
| C-LOOK | 单向服务,到最后请求直接跳到另一端首个请求 | ❌无 | C-SCAN 优化,工业常用 |
2.2.4 总线
串行总线与并行总线
- 串行:USB、SATA、PCIe、RapidIO、SPI、I2C、CAN、UART、以太网
- 并行:PCI、ISA、IDE(PATA、ATA)
内部总线与外部总线
| 项目 | 内部总线(片内总线) | 外部总线(系统总线 / 通信总线) |
|---|---|---|
| 位置 | 芯片内部,同一芯片内各个部件之间例:CPU 内部,寄存器、ALU、控制器之间 | 芯片外部,芯片与芯片、板卡与板卡、设备之间 |
| 传输对象 | CPU 内核内部组件 | CPU ↔ 内存、外设、其他板卡、外部设备 |
| 距离 | 极短(芯片内部) | 较长(板上、机箱内、机箱之间) |
| 典型例子 | CPU 内部总线、AHB、APB(片内总线) | 系统总线:PCI、ISA、PCIe****通信总线:USB、SATA、I2C、SPI、CAN、以太网、UART |
| 特点 | 高速、线多、时序严格,只在集成电路内部 | 分并行 / 串行;用于设备互联,有的支持热插拔 |
流水线技术
流水线周期:执行时间最长的一段
流水线执行时间计算公式:
- 理论公式:(t1+t2+…+tn) + (n-1)*t
- 实际公式:k*t + (n - 1) * t,k为命令数,如取值、分析、执行三个命令则k=3
流水线吞吐率:单位时间内完成的任务数
TP=指令条数流水线执行时间 TP = \dfrac{指令条数}{流水线执行时间}TP=流水线执行时间指令条数流水线最大吞吐率
TPmax=limn→∞nkt+(n−1)t=1t TP_{max} = \lim_{n \to \infty}\frac{n}{kt + (n-1)t}=\frac{1}{t}TPmax=n→∞limkt+(n−1)tn=t1流水线加速比
S=不使用流水线执行时间使用流水线执行时间 S = \frac{不使用流水线执行时间}{使用流水线执行时间}S=使用流水线执行时间不使用流水线执行时间流水线的制约关系以及信号量控制
流水线分为直接制约与间接制约
- 直接制约:一个操作中多个步骤之间的制约关系,如,取址、分析、执行三个之间是直接制约关系
- 间接制约:指多个操作之间相同步骤的制约关系,如操作1的取址和操作2的取址存在间接制约关系