# 第1章 计算机系统概论

> 📖 本章介绍计算机系统的基本概念和组成，是整个课程的基础。
> 🎯 重点理解计算机层次结构和冯·诺依曼体系

---

## 📋 本章目录

- [[#1.1 计算机系统简介]]
- [[#1.2 计算机的基本组成]]
- [[#1.3 计算机硬件的主要技术指标]]
- [[#本章小结]]
- [[#例题与解析]]

---

## 1.1 计算机系统简介

### 1.1.1 计算机的软硬件概念

计算机系统由 **硬件** 和 **软件** 两大部分组成。

```mermaid
graph TB
    subgraph 计算机系统
        subgraph 硬件
            A[主机] --> A1[CPU]
            A --> A2[主存储器]
            A1 --> A11[运算器]
            A1 --> A12[控制器]
            B[外部设备] --> B1[输入设备]
            B --> B2[输出设备]
        end
        subgraph 软件
            C[系统软件] --> C1[操作系统]
            C --> C2[语言处理程序]
            C --> C3[数据库管理系统]
            D[应用软件] --> D1[科学计算程序]
            D --> D2[数据处理程序]
        end
    end
```

#### 硬件（Hardware）

> [!info] 定义
> 计算机的实体部分，由看得见摸得着的各种电子元器件组成。

- 主机：CPU + 主存储器
- 外部设备：输入设备 + 输出设备

理解硬件最好的方式是类比人体：CPU就像大脑，负责思考和处理信息；内存相当于短期记忆，临时存放正在处理的信息；硬盘是长期记忆，永久保存数据；键盘鼠标像眼睛和耳朵，接收外界输入；显示器则是嘴巴和手，把处理结果输出给我们。

#### 软件（Software）

> [!info] 定义
> 人们事先编制的具有各类特殊功能的程序，存放在存储器中。

**系统软件**：
- 操作系统（Windows、Linux等）
- 语言处理程序（编译程序、汇编程序）
- 数据库管理系统
- 服务程序（诊断、调试程序）

**应用软件**：
- 科学计算程序
- 数据处理程序
- 过程控制程序
- 事务管理程序

软件可以类比为人的思想和知识：操作系统就像基本生活技能（吃饭、走路），编译程序像翻译官，把高级语言翻译成机器能懂的语言，应用软件则是各种专业知识和技能。

> [!tip] 关键理解
> 计算机性能 = 硬件功能 + 软件功能。软硬件相互依存，缺一不可。

举个实际的例子：一台高性能电脑如果没有安装任何软件，什么都做不了；反过来，再厉害的软件在配置太低的硬件上也跑不起来。所以硬件和软件必须配合才能发挥作用。

---

### 1.1.2 计算机系统的层次结构

计算机系统具有多级层次结构，从低到高依次为：

```mermaid
graph TB
    subgraph "五级层次结构"
        M4["虚拟机器 M4<br/>(高级语言机器)"] --> |"用编译程序翻译"| M3
        M3["虚拟机器 M3<br/>(汇编语言机器)"] --> |"用汇编程序翻译"| M2
        M2["虚拟机器 M2<br/>(操作系统机器)"] --> |"用机器语言解释"| M1
        M1["传统机器 M1<br/>(机器语言机器)"] --> |"用微程序解释"| M0
        M0["微程序机器 M0<br/>(微指令系统)"] --> |"由硬件直接执行"| HW["硬件电路"]
    end

    style M4 fill:#e1f5fe
    style M3 fill:#b3e5fc
    style M2 fill:#81d4fa
    style M1 fill:#4fc3f7
    style M0 fill:#29b6f6
    style HW fill:#0288d1
```

#### 各层次说明

| 层次 | 名称 | 说明 | 语言 |
|------|------|------|------|
| M4 | 高级语言机器 | 用户编程层面 | 高级语言（C、Java等） |
| M3 | 汇编语言机器 | 汇编语言层面 | 汇编语言 |
| M2 | 操作系统机器 | 操作系统层面 | 机器语言 |
| M1 | 传统机器 | 硬件指令层面 | 机器语言 |
| M0 | 微程序机器 | 微指令层面 | 微指令 |

这个层次结构可以想象成一栋大楼：顶层（M4）是普通用户工作的地方，他们用C、Java等高级语言编程，就像说普通话一样自然；往下一层（M3）是专业程序员，用汇编语言，更接近机器但人还能听懂；再往下（M2）是系统管理员，管理整栋大楼的资源；底层（M1）是硬件工程师，直接操作机器指令；最底层（M0）是硬件电路，执行最基础的微指令，就像大楼的地基。

当我们用C语言写 `int a = 5 + 3;` 时，这个简单的加法在不同层次的表现是不同的：M4层看到的是 `5 + 3`，M3层编译器把它翻译成汇编指令，M2层操作系统负责分配资源，M1层变成二进制机器指令，M0层则是微指令控制ALU执行加法。

> [!note] 重要概念
> - **虚拟机**：不是实际存在的机器，而是通过软件实现的功能层次
> - **实际机器**：物理存在的硬件机器（M0和M1）
> - **软硬件交界**：随着技术发展，部分软件功能由硬件实现（固件）

#### 翻译程序的两种方式

```mermaid
graph LR
    subgraph "编译程序"
        A1[源程序] --> B1[一次性全部翻译] --> C1[目标程序] --> D1[执行]
    end

    subgraph "解释程序"
        A2[源程序] --> B2[翻译一条] --> C2[执行一条] --> D2[下一条]
        D2 --> B2
    end
```

- **编译程序**：一次性全部翻译，然后执行（如C、Pascal）
- **解释程序**：边翻译边执行（如BASIC）

这两种方式的区别可以用看英文小说来理解：编译程序就像请翻译把整本小说翻译成中文，然后你读中文版，优点是读得快，缺点是翻译时间长；解释程序就像翻译坐在旁边，你读一句英文他翻译一句中文给你听，优点是马上能开始读，缺点是读得慢。

实际应用中，C语言用编译方式，先把 `.c` 文件编译成 `.exe` 文件再运行；Python用解释方式，边翻译边执行，不需要生成单独的可执行文件。

---

### 1.1.3 计算机组成和计算机体系结构

这两个概念容易混淆，需要明确区分：

| 概念 | 定义 | 关注点 | 示例 |
|------|------|--------|------|
| 计算机体系结构 | 程序员所见到的计算机属性 | 指令集、数据类型、寻址技术 | 是否有乘法指令 |
| 计算机组成 | 体系结构的实现方式 | 硬件细节、电路实现 | 乘法指令用专用电路还是加法器实现 |

区分这两个概念可以类比买汽车：体系结构就像汽车的"功能规格"（几个座位、最高时速、有没有天窗），组成则是"具体实现"（发动机是V6还是V8、变速箱是手动还是自动）。

IBM System/370系列就是很好的例子：所有机型的体系结构相同（指令集一样），但组成不同（不同型号性能、价格差异很大），这样用户的软件投资就能得到保护。

> [!example] 举例说明
> 就像iPhone和Android手机：体系结构不同（指令集、系统调用完全不同），但组成可以相同（可能都用ARM处理器），所以iOS应用不能直接在Android上运行。

---

## 1.2 计算机的基本组成

### 1.2.1 冯·诺依曼计算机的特点

> [!important] 冯·诺依曼体系（1945年）
> 基于"存储程序"概念的计算机体系结构

**五大特点**：
1. 计算机由 **运算器、存储器、控制器、输入设备、输出设备** 五大部件组成
2. 指令和数据以同等地位存放于存储器内，并可按地址寻访
3. 指令和数据均用 **二进制数** 表示
4. 指令由 **操作码** 和 **地址码** 组成
5. 指令在存储器内按顺序存放，通常顺序执行

```mermaid
graph TB
    subgraph "冯·诺依曼计算机结构"
        direction TB
        CU[控制器] --> |"控制信号"| ALU[运算器]
        CU --> |"控制信号"| MEM[存储器]
        CU --> |"控制信号"| IN[输入设备]
        CU --> |"控制信号"| OUT[输出设备]

        IN --> |"数据"| MEM
        MEM --> |"数据"| ALU
        ALU --> |"数据"| MEM
        MEM --> |"数据"| OUT
    end

    style CU fill:#ff9999
    style ALU fill:#99ccff
    style MEM fill:#99ff99
    style IN fill:#ffcc99
    style OUT fill:#cc99ff
```

冯·诺依曼体系可以理解为一个高效的工厂：运算器是生产车间，负责加工产品；存储器是仓库，存放原材料和成品；控制器是厂长，指挥整个生产过程；输入设备是采购部，接收订单和原材料；输出设备是销售部，把成品交给客户。"存储程序"的概念就是把生产计划（程序）和原材料（数据）都放在仓库里，厂长按计划指挥生产。

当你用电脑计算 `5 + 3` 时，整个过程是这样的：键盘输入数据，存储器存放数字和指令，控制器指挥运算器执行加法，运算器计算结果，最后显示器显示答案。

### 1.2.2 计算机的硬件框图

#### 传统结构（以运算器为中心）

```mermaid
graph LR
    IN[输入设备] --> |"数据"| ALU[运算器]
    ALU --> |"数据"| MEM[存储器]
    MEM --> |"数据"| ALU
    ALU --> |"数据"| OUT[输出设备]
    CU[控制器] --> |"控制"| ALU
    CU --> |"控制"| MEM
    CU --> |"控制"| IN
    CU --> |"控制"| OUT
```

#### 现代结构（以存储器为中心）

```mermaid
graph TB
    IN[输入设备] --> |"数据"| MEM[存储器]
    MEM --> |"数据"| OUT[输出设备]
    MEM --> |"数据"| ALU[运算器]
    ALU --> |"数据"| MEM
    CU[控制器] --> |"控制信号"| ALU
    CU --> |"控制信号"| MEM
    CU --> |"控制信号"| IN
    CU --> |"控制信号"| OUT
```

> [!tip] 结构变化的原因
> 以存储器为中心可以减少数据传输的瓶颈，提高系统效率。

从传统结构到现代结构的变化，可以用快递公司来理解：传统结构中，所有快递都要经过分拣中心（运算器），即使是从仓库直接发给客户的也要先绕一圈，效率很低；现代结构中，仓库可以直接发货给客户，分拣中心只处理需要加工的快递，效率大大提高。

比如从硬盘复制文件到U盘时，传统结构需要经过CPU，现代结构则可以直接通过内存传输，不占用CPU资源。

### 1.2.3 各部件功能详解

| 部件 | 功能 | 关键特性 |
|------|------|----------|
| **运算器** | 完成算术运算和逻辑运算 | 暂存中间结果 |
| **存储器** | 存放数据和程序 | 按地址访问 |
| **控制器** | 控制指挥程序运行 | 产生控制信号 |
| **输入设备** | 信息形式转换（人→机） | 键盘、鼠标等 |
| **输出设备** | 信息形式转换（机→人） | 显示器、打印机等 |

把这些部件想象成一个餐厅：运算器是厨师，负责加工食材，能做各种菜，会把做好的菜暂时放在操作台上；存储器是冰箱和货架，存放食材和菜谱，每个格子都有编号，需要什么直接去对应编号的格子拿；控制器是餐厅经理，看订单决定做什么菜，指挥厨师工作，协调各部门配合；输入设备是服务员，接收顾客点单，把点单翻译成厨房能懂的语言；输出设备是传菜员，把做好的菜端给顾客。

### 1.2.4 现代计算机组成

```mermaid
graph TB
    subgraph "现代计算机组成"
        subgraph "主机"
            CPU["CPU"] --> ALU["运算器"]
            CPU --> CU["控制器"]
            MM["主存储器<br/>(主存)"]
        end
        subgraph "外部设备"
            IO["I/O设备"] --> INPUT["输入设备"]
            IO --> OUTPUT["输出设备"]
        end
    end

    CPU <--> |"数据/地址"| MM
    CPU <--> |"数据"| IO
    MM <--> |"数据"| IO

    style CPU fill:#ff9999
    style MM fill:#99ff99
    style IO fill:#99ccff
```

**术语说明**：
- **CPU** = 运算器 + 控制器
- **主机** = CPU + 主存储器
- **I/O设备** = 输入设备 + 输出设备（外部设备）

现代计算机就像一个现代化的办公大楼：CPU是总经理办公室，其中运算器是财务部负责计算，控制器是总经理指挥全局；主存储器是办公桌，临时存放正在处理的文件，速度快但容量小；外部设备包括前台（输入设备）和公关部（输出设备）。

---

## 1.3 计算机硬件的主要技术指标

### 1.3.1 机器字长

> [!info] 定义
> CPU一次能处理数据的位数，通常与CPU寄存器位数有关。

- 影响：字长越长，计算精度越高
- 常见：8位、16位、32位、64位

机器字长可以理解为工人一次能搬多少东西：8位工人一次搬8块砖，16位搬16块，32位搬32块，64位搬64块。搬得越多，处理速度越快，计算精度越高。早期的单片机是8位，大多数嵌入式系统是32位，现代个人电脑和服务器是64位。

### 1.3.2 存储容量

> [!info] 定义
> 存储器能存放二进制代码的总位数

**计算公式**：
$$存储容量 = 存储单元数 \times 存储字长$$

**单位换算**：
- 1KB = 1024B
- 1MB = 1024KB
- 1GB = 1024MB
- 1TB = 1024GB

存储容量就像仓库的大小：存储单元数是仓库有多少个格子，存储字长是每个格子能放多少东西，两者相乘就是总容量。比如一个仓库有1024个格子，每个格子能放8个鸡蛋，总容量就是1024×8=8192个鸡蛋，也就是1KB。

### 1.3.3 运算速度

**常用指标**：

| 指标 | 说明 | 计算方式 |
|------|------|----------|
| MIPS | 每秒百万条指令 | 指令数 / 执行时间 |
| CPI | 每条指令时钟周期数 | 时钟周期数 / 指令数 |
| FLOPS | 每秒浮点运算次数 | 浮点运算数 / 执行时间 |

这三个指标可以这样理解：MIPS是工人每秒能处理多少个订单，CPI是处理一个订单需要多少个步骤，FLOPS是每秒能计算多少道数学题。MIPS越高处理越快，CPI越低效率越高，FLOPS越强计算能力越强。

### 1.3.4 其他指标

- **主频**：CPU时钟频率（GHz）
- **带宽**：数据传输速率（MB/s）
- **兼容性**：软件在不同机器上的通用性

主频就像工人的心跳速度，主频越高干活越快，但不一定效率高；带宽就像高速公路的车道数，车道越多能通过的车辆越多；兼容性就像不同品牌的手机能不能用同一个充电器。

---

## 📝 本章小结

### 核心概念

1. **计算机系统** = 硬件 + 软件
2. **层次结构**：从微程序机器到高级语言机器的多级层次
3. **冯·诺依曼体系**：存储程序、五大部件、二进制表示
4. **现代计算机**：以存储器为中心，CPU = 运算器 + 控制器

### 关键术语

| 术语 | 英文 | 含义 |
|------|------|------|
| CPU | Central Processing Unit | 中央处理器 |
| ALU | Arithmetic Logic Unit | 算术逻辑单元 |
| CU | Control Unit | 控制单元 |
| MM | Main Memory | 主存储器 |
| I/O | Input/Output | 输入输出 |

### 重点图示

> [!summary] 必须掌握的图
> 1. 计算机系统层次结构图
> 2. 冯·诺依曼计算机结构框图
> 3. 现代计算机组成框图（以存储器为中心）

---

## 🧪 例题与解析

### 例题1：计算机层次结构

**题目**：简述计算机系统的五级层次结构，并说明各层的作用。

**答案**：

计算机系统的五级层次结构从低到高依次为：

1. **微程序机器M0（微指令系统）**：执行最基础的微指令，由硬件直接执行，速度最快。比如控制ALU执行加法操作的微指令。

2. **传统机器M1（机器语言机器）**：执行机器语言程序，直接执行二进制指令。比如执行 `000001 0000000101` 这样的机器指令。

3. **虚拟机器M2（操作系统机器）**：管理计算机资源，提供系统服务。比如Windows管理内存分配、进程调度。

4. **虚拟机器M3（汇编语言机器）**：执行汇编语言程序，用汇编程序翻译成机器语言。比如执行 `ADD R1, R2, R3` 这样的汇编指令。

5. **虚拟机器M4（高级语言机器）**：执行高级语言程序，用编译程序翻译成汇编语言或机器语言。比如执行 `int a = 5 + 3;` 这样的C语言语句。

这就像一栋5层大楼：1楼是地基和电路，2楼是生产车间，3楼是管理部门，4楼是设计部门，5楼是销售部门。

### 例题2：编译与解释

**题目**：比较编译程序和解释程序的区别，并举例说明。

**答案**：

| 特性 | 编译程序 | 解释程序 |
|------|----------|----------|
| 翻译方式 | 一次性全部翻译 | 边翻译边执行 |
| 执行速度 | 快（已翻译成目标程序） | 慢（每次都要翻译） |
| 错误处理 | 编译时发现所有错误 | 运行时逐行发现错误 |
| 代表语言 | C、Pascal、FORTRAN | BASIC、Python、JavaScript |

编译程序就像请翻译把整本小说翻译成中文，然后你读中文版，读得快但翻译时间长；解释程序就像翻译坐在旁边，你读一句他翻译一句，马上能开始读但读得慢。

C语言是编译型：`hello.c` → `gcc` → `hello.exe` → 运行；Python是解释型：`python hello.py` → 边翻译边执行。

### 例题3：冯·诺依曼体系

**题目**：简述冯·诺依曼计算机的特点，并说明为什么现代计算机采用以存储器为中心的结构。

**答案**：

冯·诺依曼计算机的五大特点：五大部件组成（运算器、存储器、控制器、输入设备、输出设备）；存储程序概念（指令和数据同等地位存放于存储器）；二进制表示；指令格式（操作码+地址码）；顺序执行。

现代计算机采用以存储器为中心的结构，主要是为了减少数据传输瓶颈、提高系统效率。传统结构中所有数据都要经过运算器，现代结构中存储器可以直接与I/O设备交换数据，CPU可以专心处理计算任务，I/O操作不占用CPU时间。

比如从硬盘复制文件到U盘时，传统结构需要经过CPU，现代结构可以直接通过内存传输，效率更高。

### 例题4：技术指标计算

**题目**：某计算机主频为2GHz，CPI为4，求该计算机的MIPS。

**答案**：

主频2GHz = 2×10⁹ Hz，CPI=4，代入公式：
$$MIPS = \frac{主频}{CPI \times 10^6} = \frac{2 \times 10^9}{4 \times 10^6} = 500$$

该计算机的MIPS为500，即每秒执行5亿条指令。

可以理解为：心跳速度（主频）每秒跳20亿次，每个订单需要4次心跳（CPI=4），每秒能处理20亿÷4=5亿个订单。

### 例题5：存储容量计算

**题目**：某计算机存储器有16位地址线，8位数据线，求该存储器的容量。

**答案**：

16位地址线可以表示 2¹⁶ = 65536 个地址，即有65536个存储单元；8位数据线表示每个单元存8位数据（1字节）。

存储容量 = 65536 × 8位 = 65536字节 = 64KB。

这就像一个仓库有65536个格子，每个格子能放8个鸡蛋，总容量就是64KB。

---

## ⚡ 知识点速记卡

> 考前快速过一遍，30秒回忆整章核心

**计算机系统 = 硬件 + 软件**，两者缺一不可。

**五级层次**（从下往上）：微程序机器M0 → 传统机器M1 → 操作系统M2 → 汇编语言M3 → 高级语言M4。底下两层是实际机器，上面三层是虚拟机器。

**冯·诺依曼五大特点**：①五大部件（运算器+存储器+控制器+输入+输出）②存储程序（指令和数据同等地位存放）③二进制表示 ④指令=操作码+地址码 ⑤顺序执行。

**现代计算机**以存储器为中心（不是运算器），CPU = 运算器 + 控制器，主机 = CPU + 主存。

**三个速度指标**：MIPS（每秒百万条指令，越大越快）、CPI（每条指令时钟周期数，越小越高效）、FLOPS（每秒浮点运算次数）。

**编译 vs 解释**：编译一次性全部翻译再执行（C），解释边翻译边执行（Python）。编译快但调试慢，解释慢但调试快。

**容量计算**：存储容量 = 存储单元数 × 字长。20位地址线 → 2²⁰ = 1M个单元。

---

## 🔗 相关链接

- [[00_计算机组成原理学习指南]] - 返回主目录
- [[03_系统总线]] - 下一章
- [[06_运算方法]] - 数据表示相关内容
- [[08_CPU结构与功能]] - CPU详细设计

---

*本章难度：⭐⭐ 简单*
*重要程度：⭐⭐⭐ 基础*
