--- title: "01-系统概述" created: 2026-08-29 tags: - 基础与理论 - 计算机组成原理 - "408" --- # 01 系统概述 > 📚 本文是 [[00-计算机组成原理总览|计算机组成原理]] 的第 1 篇,相关系列见 [[00-基础与理论|基础与理论]]。 先不急着拆机器——这一篇解决三个问题:计算机**从哪来**(四代机一句话)、**长什么样**(冯·诺依曼结构 + 层次划分)、**怎么衡量好坏**(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 条): 1. 由**运算器、控制器、存储器、输入、输出**五大部件组成 2. 指令和数据**同等地位**存于存储器,可按地址访问 3. 指令和数据均用**二进制**表示 4. 指令由**操作码 + 地址码**组成,操作码指出操作类型 5. **顺序执行**:指令在存储器内按顺序存放,通常按顺序执行,特定条件下根据运算结果或设定的条件改变执行顺序 6. 以**运算器为中心**(这是早期机器的特征——输入输出都要经过运算器,效率低;现代机器已演变为**以存储器为中心**) ### 冯·诺依曼 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)**:跑一组标准程序测真实性能,比单看指标可靠 - **数据通路带宽**:数据总线一次能并行传送的位数 - **吞吐量 / 响应时间**:整机层面指标,一个管"单位时间干多少活",一个管"一件事多快完成" ## 五、盲点自测 1. 冯·诺依曼机以______为中心,现代计算机以______为中心?(运算器;存储器) 2. 哈佛结构和冯·诺依曼的本质区别?现代 CPU 哪一级是哈佛式的?(指令数据是否分存;L1 Cache 分 I/D) 3. DBMS 属于系统软件还是应用软件?(系统软件) 4. 主频同为 2GHz 的两台机器,MIPS 高的一定快吗?(不一定,指令集不同、单条指令工作不同,比执行时间才可靠) 5. 机器字长 = 存储字长吗?(不一定,寄存器位数 vs 存储单元位数) ## 六、动手玩 ```bash # 看你机器的"性能指标"(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 定律) - 《编码:隐匿在计算机软硬件背后的语言》——从继电器搭加法器讲起,理解"层次"最好的科普书 ⬅️ [[00-计算机组成原理总览|总览]] 🏠 [[00-基础与理论|00-基础与理论]] ➡️ [[02-数据的表示与运算|数据的表示与运算]]