01 系统概述
先不急着拆机器——这一篇解决三个问题:计算机从哪来(四代机一句话)、长什么样(冯·诺依曼结构 + 层次划分)、怎么衡量好坏(CPI、MIPS、FLOPS 这些"性能算术题")。
一、发展史:四代机一张表
| 代 | 年代 | 逻辑元件 | 代表 |
|---|---|---|---|
| 第一代 | 1946–1957 | 电子管 | ENIAC(18000 个电子管,重 30 吨) |
| 第二代 | 1958–1964 | 晶体管 | IBM 7094 |
| 第三代 | 1965–1971 | 中小规模集成电路 | IBM System/360 |
| 第四代 | 1972–今 | 大规模/超大规模集成电路(LSI/VLSI) | Intel 4004 → 现代多核 CPU |
💡 摩尔定律(1975):集成电路上可容纳的晶体管数目约每 18–24 个月翻一倍。它不是物理定律,是产业经验规律——如今已明显放缓,所以业界转向多核、专用加速器(NPU/GPU)找性能。
⚠️ "计算机元件从电子管到晶体管"这类题只需抓住逻辑元件这条主线,别和"机器字长""操作系统换代"混着记。
二、冯·诺依曼结构:一切的原点
1945 年冯·诺依曼提出 EDVAC 方案,确立了沿用至今的"存储程序"思想:
程序(指令+数据)和数据一样,都以二进制形式预先存进存储器;机器按地址自动逐条取指执行。
五大部件与数据流:
┌─────────┐
│ 控制器 │←─ 指令(从存储器取)
└────┬────┘
│ 控制信号
┌─────┐ ↓ ┌─────┐
│运算器│←──→│存储器│←──→ 输入设备
└─────┘ └─────┘ ↓
输出设备
冯·诺依曼机的关键特征(背 5 条):
- 由运算器、控制器、存储器、输入、输出五大部件组成
- 指令和数据同等地位存于存储器,可按地址访问
- 指令和数据均用二进制表示
- 指令由操作码 + 地址码组成,操作码指出操作类型
- 顺序执行:指令在存储器内按顺序存放,通常按顺序执行,特定条件下根据运算结果或设定的条件改变执行顺序
- 以运算器为中心(这是早期机器的特征——输入输出都要经过运算器,效率低;现代机器已演变为以存储器为中心)
冯·诺依曼 vs 哈佛结构
| 维度 | 冯·诺依曼结构 | 哈佛结构 |
|---|---|---|
| 指令与数据 | 同一个存储器,同一套总线 | 分开的指令存储器、数据存储器 |
| 传输 | 取指和取数不能同时进行(瓶颈) | 可并行取指取数 |
| 典型应用 | x86 主存体系 | DSP、单片机(如 51 系列);现代 CPU 的 L1 Cache 也是哈佛式 |
💡 一个重要的"融汇点":现代 CPU 表面上是冯·诺依曼(主存里指令数据混存),但 L1 Cache 分成 I-Cache(指令)和 D-Cache(数据)——Cache 这一级实际是哈佛结构,就是为了缓解"取指和取数抢一条总线"的冯·诺依曼瓶颈。这个点在 05-CPU 讲流水线结构冒险时还会回来。
三、计算机系统的层次结构
从下往上看,一台计算机是"硬"与"软"的叠加:
| 层级 | 内容 | 谁来执行 |
|---|---|---|
| M0 微程序机器层 | 微指令(硬件直接执行) | 硬件 |
| M1 传统机器层 | 机器指令(x86/RISC-V 指令集) | M0 的微程序解释 |
| M2 操作系统层 | 系统调用、进程管理 | M1 的机器指令 + OS 软件 |
| M3 汇编语言层 | 汇编程序 | 汇编器翻译成 M1 |
| M4 高级语言层 | C/Java/Python | 编译/解释成下层 |
| M5 应用层 | 办公软件、游戏 | 以下各层支撑 |
几个必背划分:
- 软件 = 系统软件 + 应用软件:系统软件包括操作系统、语言处理程序(编译器/汇编器)、数据库管理系统、标准库程序等。⚠️ 数据库管理系统(DBMS)是系统软件,常考
- 翻译 vs 解释:翻译是"整本译完再跑"(编译器,生成目标程序);解释是"边译边跑"(解释器,如 Python,不生成独立目标程序)。汇编、编译属于翻译
- 机器字长:CPU 一次能处理的二进制位数(= 内部寄存器/运算器的位数);存储字长:一个存储单元存的位数;⚠️ 二者可以不同(如机器字长 32 位、按字节编址存储)
三大部件速写(后面各篇展开)
- 运算器(ALU + 寄存器):干活的。核心寄存器 ACC(累加器)、X(暂存)、PSW(状态字)。细节在 02-数据的表示与运算、05-CPU
- 控制器(PC、IR、MAR、MDR、指令译码器):指挥的。PC 存下一条指令地址、IR 存当前指令。细节在 05-CPU
- 存储器:装的。主存(RAM/ROM)+ 辅存的金字塔在 03-存储系统
四、性能指标:会算才算懂
1. 机器字长与数据通路
- 机器字长 = CPU 一次能处理的二进制位数,通常等于内部寄存器位数
- 字长越长 → 精度越高、同样操作数越少,但硬件成本越高
2. 主频、CPI、MIPS、FLOPS——核心算术
| 指标 | 定义 | 公式 |
|---|---|---|
| 主频 f | CPU 时钟频率(Hz) | 时钟周期 = 1/f |
| CPI | 执行一条指令所需平均时钟周期数 | CPI = 总时钟周期数 / 指令数 |
| MIPS | 每秒百万条指令 | MIPS = f / (CPI × 10⁶) |
| FLOPS | 每秒浮点运算次数 | MFLOPS/GFLOPS/TFLOPS |
💡 例题(408 经典题型):某 CPU 主频 2 GHz,程序含三类指令:A 类 100 条(CPI=1)、B 类 50 条(CPI=2)、C 类 50 条(CPI=4)。求总执行时间和 MIPS。
- 总指令数 = 200,总周期 = 100×1 + 50×2 + 50×4 = 400
- 平均 CPI = 400 / 200 = 2
- 执行时间 = 400 周期 / 2 GHz = 200 ns
- MIPS = 200 条 / 200 ns = 1 条/ns = 1000 MIPS(= 2×10⁹ / (2×10⁶) = 1000)
⚠️ 注意:主频高 ≠ 更快。CPU 性能 = 主频 × IPC(每周期指令数),比较不同指令集的 CPU 时 MIPS 并不严谨(指令复杂度不同);执行时间才是金标准——Amdahl 定律:系统加速比受"被加速部分占比"限制,优化占 20% 时间的那部分哪怕加速到无穷,整体最多快 1/0.8 = 1.25 倍。
3. 其他常考词
- 基准程序(Benchmark):跑一组标准程序测真实性能,比单看指标可靠
- 数据通路带宽:数据总线一次能并行传送的位数
- 吞吐量 / 响应时间:整机层面指标,一个管"单位时间干多少活",一个管"一件事多快完成"
五、盲点自测
- 冯·诺依曼机以______为中心,现代计算机以______为中心?(运算器;存储器)
- 哈佛结构和冯·诺依曼的本质区别?现代 CPU 哪一级是哈佛式的?(指令数据是否分存;L1 Cache 分 I/D)
- DBMS 属于系统软件还是应用软件?(系统软件)
- 主频同为 2GHz 的两台机器,MIPS 高的一定快吗?(不一定,指令集不同、单条指令工作不同,比执行时间才可靠)
- 机器字长 = 存储字长吗?(不一定,寄存器位数 vs 存储单元位数)
六、动手玩
# 看你机器的"性能指标"(macOS/Linux)
sysctl -n machdep.cpu.brand_string # CPU 型号与主频
sysctl -n hw.ncpu # 核心数
lscpu # Linux:架构/主频/CPI 相关信息一应俱全
打开终端跑一下,把 CPU 型号和核数记下来——下一篇讲 03-存储系统 时,你会想查查自己内存条是 DDR 第几代。
参考资料
- 王道《计算机组成原理考研复习指导》第 1 章
- CSAPP 第 1 章(信息表示与抽象)、第 1.9 节(Amdahl 定律)
- 《编码:隐匿在计算机软硬件背后的语言》——从继电器搭加法器讲起,理解"层次"最好的科普书
💬 评论