# 第00讲 操作系统概述

> [!info] 课程信息
> **课程**：操作系统（专业基础课，必修）
> **教材**：《计算机操作系统》（第4版），汤小丹 等，西安电子科技大学出版社
> **学时**：4 学时（第1章 绪论）
> **先修课程**：C语言、数据结构、计算机组成原理
> **考核方式**：平时成绩 40% + 闭卷笔试 60%
> **课程目标**：理解 OS 基本原理 → 掌握系统编程 → 培养系统级思维

---

## 一、操作系统的概念

### 1.1 什么是操作系统

操作系统（Operating System, OS）是**管理计算机硬件与软件资源的系统软件**，是用户与计算机硬件之间的接口。

```
┌─────────────────────────────────────┐
│            应用程序层                │  ← 用户直接使用
├─────────────────────────────────────┤
│          ★ 操作系统层 ★             │  ← 管理者与中介者
├─────────────────────────────────────┤
│            硬件层                    │  ← CPU、内存、设备
└─────────────────────────────────────┘
```

> [!tip] 三种看待 OS 的视角
> - **用户视角**：OS 是一台"虚拟机"——隐藏硬件复杂性，提供易用的接口
> - **系统视角**：OS 是一个"资源管理者"——分配 CPU、内存、I/O 设备等
> - **软件视角**：OS 是一个"运行平台"——提供系统调用和运行环境

### 1.2 操作系统的目标

| 目标 | 含义 | 典型手段 |
|------|------|----------|
| **方便性** | 降低用户使用计算机的难度 | GUI、命令行、系统调用 |
| **有效性** | 提高系统资源的利用率 | 调度算法、虚拟内存、缓冲技术 |
| **可扩充性** | 便于扩充新功能 | 模块化、微内核架构 |
| **开放性** | 遵循标准，兼容互连 | POSIX 标准、ABI 兼容 |

### 1.3 操作系统的作用

**作用一：用户与硬件之间的接口**

```
用户 / 应用程序
      │
      │  系统调用 (System Call)
      │  命令 (Shell)
      │  GUI (图形界面)
      ▼
┌─────────────┐
│  操作系统    │
└─────────────┘
```

**作用二：计算机资源的管理者**

OS 负责管理四大类资源：

- **处理机（CPU）**：决定哪个进程使用 CPU、使用多长时间 → [[11_处理机调度]]
- **存储器（内存）**：为程序分配和回收内存空间 → [[13_存储管理基础]]、[[14_分页存储管理]]
- **I/O 设备**：管理外部设备的分配与回收 → 设备管理
- **文件（信息）**：管理磁盘上的数据存储与访问 → [[09_文件系统]]

**作用三：扩充机器（虚拟机）**

OS 在裸机之上叠加多层软件，将物理资源转化为功能更强、使用更方便的逻辑资源。

---

## 二、操作系统的发展历程

> [!note] 发展驱动力
> OS 的每一次变革，根本动力都是**提高资源利用率**和**方便用户使用**。

### 2.1 发展时间线

```mermaid
timeline
    title 操作系统发展历程
    1940s-1950s : 手工操作阶段
                 : 无操作系统
                 : 人工操作纸带/卡片
    1950s中后期  : 单道批处理系统
                 : 监督程序出现
                 : 自动按批处理作业
    1960s前期    : 多道批处理系统
                 : 多道程序并发执行
                 : 资源利用率大幅提升
    1960s中后期  : 分时系统
                 : 人机交互成为可能
                 : CTSS, MULTICS, UNIX
    1970s-1980s  : 实时系统
                 : 实时控制/实时信息处理
                 : 响应时间有严格保证
    1980s-1990s  : 网络操作系统
                 : 网络资源共享
                 : C/S 模式
    1990s-至今   : 分布式操作系统
                 : 多机协同, 透明性
                 : 云计算, 容器化
```

### 2.2 各阶段详解

#### （1）手工操作阶段（1940s-1950s）

- **特点**：无操作系统，用户独占全机
- **工作方式**：程序员通过纸带/卡片将程序输入计算机，手工控制运行
- **问题**：
  - 用户独占资源，CPU 利用率极低
  - 人工操作时间远大于计算时间
  - 上机需要预约机时

#### （2）单道批处理系统（1950s中后期）

- **核心思想**：引入**监督程序（Monitor）**，自动依次处理一批作业
- **特征**：作业成批输入，自动顺序执行，无交互能力
- **改进**：减少了人工干预时间
- **不足**：内存中始终只有一个程序运行，I/O 等待时 CPU 空闲

```
作业1 → [输入] → [计算] → [输出]
                        作业2 → [输入] → [计算] → [输出]
                                               作业3 → ...
CPU:  ████░░░░░░████████░░░░░░████████      ← CPU 仍大量空闲
```

> [!warning] 单道批处理的瓶颈
> 当某作业进行 I/O 操作时，CPU 处于空闲等待状态，系统资源利用率仍然不高。

#### （3）多道批处理系统（1960s前期）

- **核心思想**：内存中同时存放多道程序，利用 CPU 空闲时间切换到其他程序运行
- **关键特征**：
  - **多道性**：内存中有多道程序并发执行
  - **宏观并行**：多道程序同时在系统中运行
  - **微观串行**：任一时刻 CPU 只执行一道程序

> [!important] 多道批处理的意义
> 多道程序设计技术是 OS 发展史上的**里程碑**。它引入了程序并发执行的概念，极大地提高了 CPU 和资源利用率。这也是后续 [[06_进程控制|进程管理]] 和 [[11_处理机调度|调度算法]] 的基础。

- **缺点**：无交互能力（用户提交作业后无法干预）、平均周转时间长

#### （4）分时系统（1960s中后期）

- **核心思想**：多个用户通过终端同时使用一台计算机，每人获得"独占"的错觉
- **关键技术**：**时间片轮转** —— 每个用户/程序轮流使用一小段 CPU 时间
- **特征**：
  - **多路性**：多个用户同时使用
  - **独立性**：各用户互不干扰
  - **交互性**：用户可实时与系统对话
  - **及时性**：响应时间通常在数秒内

> [!example] 典型分时系统
> - **CTSS**（1961，MIT）：最早的分时系统之一
> - **MULTICS**（1964，MIT/Bell Labs/GE）：影响深远但过于复杂
> - **UNIX**（1969，Ken Thompson & Dennis Ritchie）：从 MULTICS 理念简化而来，成为现代 OS 的基石

#### （5）实时系统（1970s-1980s）

- **定义**：系统能**及时响应外部事件请求**，在规定时间内完成处理
- **两种类型**：

| 类型 | 应用场景 | 示例 |
|------|----------|------|
| 实时控制系统 | 工业过程控制、军事 | 飞行控制、导弹制导 |
| 实时信息处理 | 信息查询与处理 | 飞机订票系统、银行交易 |

- **与分时系统的区别**：实时系统强调**确定性**（硬实时）或**高概率满足时限**（软实时）

#### （6）网络操作系统（1980s-1990s）

- **目标**：实现网络中各计算机之间的资源共享与通信
- **特征**：基于 C/S 模式，提供文件共享、打印服务、网络通信等
- **典型系统**：Novell NetWare、Windows NT Server

#### （7）分布式操作系统（1990s-至今）

- **目标**：多台计算机协同工作，对外表现为一个统一的系统
- **关键特征**：
  - **分布性**：多台自治计算机协作
  - **透明性**：用户感知不到资源的物理分布
  - **共享性**：资源全局共享

> [!tip] 分布式系统的演进
> 从集群计算 → 网格计算 → **云计算**（IaaS/PaaS/SaaS）→ 容器编排（Kubernetes），分布式系统的理念在不断深化。现代云计算本质上是分布式操作系统的延伸。

---

## 三、操作系统的基本功能

```mermaid
graph TB
    subgraph OS["操作系统"]
        PM["处理机管理
Process Management"]
        SM["存储器管理
Memory Management"]
        DM["设备管理
Device Management"]
        FM["文件管理
File Management"]
        UI["用户接口
User Interface"]
    end

    PM --> CPU["CPU 分配与回收"]
    PM --> PROC["进程创建/撤销"]
    PM --> SCHED["进程调度"]
    PM --> SYNC["同步与通信"]
    PM --> DEAD["死锁处理"]

    SM --> ALLOC["内存分配与回收"]
    SM --> PROTECT["内存保护"]
    SM --> ADDR["地址映射"]
    SM --> VMEM["虚拟内存"]

    DM --> BUFFER["缓冲管理"]
    DM --> DEV_ALLOC["设备分配与回收"]
    DM --> DRIVER["设备驱动"]

    FM --> DIR["目录管理"]
    FM --> DISK["磁盘空间管理"]
    FM --> RW["文件读写"]

    UI --> CMD["命令接口"]
    GUI --> GUI_INT["图形接口"]
    UI --> SYSCALL["程序接口(系统调用)"]

    style OS fill:#1a1a2e,stroke:#e94560,color:#fff
    style PM fill:#16213e,stroke:#0f3460,color:#fff
    style SM fill:#16213e,stroke:#0f3460,color:#fff
    style DM fill:#16213e,stroke:#0f3460,color:#fff
    style FM fill:#16213e,stroke:#0f3460,color:#fff
    style UI fill:#16213e,stroke:#0f3460,color:#fff
```

### 3.1 处理机管理（进程管理）

处理机管理是 OS 的核心功能，负责对 **CPU 资源** 进行管理和调度。

主要任务：

1. **进程控制**：创建、撤销进程，控制进程状态转换 → [[06_进程控制]]
2. **进程调度**：按照一定策略从就绪队列中选择进程投入运行 → [[11_处理机调度]]
3. **进程同步与通信**：协调并发进程之间的关系，解决竞争与协作问题 → [[08_进程间通信]]
4. **死锁处理**：预防、避免、检测和解除死锁 → [[12_死锁]]

> [!info] 进程 vs 程序
> - **程序**：静态的代码和数据（存储在磁盘上的文件）
> - **进程**：程序的一次执行过程，是动态的、有生命周期的
> - 一个程序可以对应多个进程（例如多次打开同一个浏览器）

### 3.2 存储器管理

存储器管理负责为程序分配内存空间，并确保各程序互不干扰。

| 功能 | 说明 |
|------|------|
| **内存分配与回收** | 按策略为进程分配内存，进程结束时回收 |
| **内存保护** | 确保每个进程只能访问自己的地址空间 |
| **地址映射** | 将逻辑地址转换为物理地址（需要 [[01_系统运行机制|MMU]] 的支持） |
| **虚拟内存** | 利用磁盘扩充内存容量，使程序不受物理内存限制 |

相关笔记：[[13_存储管理基础]] → [[14_分页存储管理]] → [[15_段式存储管理]] → [[16_虚拟存储器]]

### 3.3 设备管理

设备管理负责管理各类 I/O 设备，完成用户提出的 I/O 请求。

- **缓冲管理**：在 CPU 与 I/O 设备之间设置缓冲区，缓解速度差异
- **设备分配与回收**：按策略为进程分配设备
- **设备驱动**：控制设备硬件完成实际的输入输出操作

> [!tip] I/O 控制方式的演进
> 程序直接控制 → 中断驱动 → DMA → 通道。每种方式在 CPU 参与度和效率上逐步优化。详见 [[01_系统运行机制]] 中的中断机制。

### 3.4 文件管理

文件管理负责管理外存上的文件，为用户提供"按名存取"的能力。

- **文件存储空间管理**：管理磁盘空间的分配与回收 → [[05_磁盘空间管理]]
- **目录管理**：通过目录结构组织文件，支持文件的按名查找
- **文件读写与保护**：控制文件的读、写、执行权限 → [[09_文件系统]]

### 3.5 用户接口（用户与 OS 的通信手段）

| 接口类型 | 形式 | 说明 |
|----------|------|------|
| **命令接口** | Shell 命令 | 用户在终端输入命令（如 `ls`, `gcc`） |
| **图形接口** | GUI 窗口操作 | 通过鼠标点击操作（如 Windows 桌面） |
| **程序接口** | 系统调用 (System Call) | 应用程序通过 API 请求 OS 服务 |

> [!important] 系统调用
> 系统调用是应用程序与操作系统之间的**唯一合法入口**。当程序需要访问硬件资源（如读文件、分配内存、创建进程）时，必须通过系统调用陷入内核态执行。这是 [[01_系统运行机制]] 的核心内容。

---

## 四、操作系统的结构

> [!note] 为什么要关注 OS 结构？
> 操作系统是一个极其复杂的大型软件。良好的结构设计能够提高系统的**可靠性、可维护性和可扩展性**。

### 4.1 整体式结构（Monolithic Structure）

```
┌──────────────────────────────────┐
│           用户程序               │
├──────────────────────────────────┤
│                                  │
│        操作系统内核              │
│  ┌────┬────┬────┬────┬────┐     │
│  │进程│内存│设备│文件│调度│     │
│  │管理│管理│管理│管理│算法│     │
│  └────┴────┴────┴────┴────┘     │
│   所有模块在同一层,任意调用       │
│                                  │
├──────────────────────────────────┤
│           硬件                   │
└──────────────────────────────────┘
```

- **特点**：所有功能模块组织在一起，模块之间可以相互调用
- **优点**：结构简单、效率高（模块间直接函数调用）
- **缺点**：模块间耦合度高，一处错误可能导致整个系统崩溃；难以调试和维护
- **典型代表**：早期 UNIX

### 4.2 层次式结构（Layered Structure）

```
┌─────────────────────┐
│    第 N 层：用户接口  │
├─────────────────────┤
│  第 N-1 层：文件管理  │
├─────────────────────┤
│  第 N-2 层：设备管理  │
├─────────────────────┤
│  第 N-3 层：内存管理  │
├─────────────────────┤
│  第 N-4 层：进程管理  │
├─────────────────────┤
│  第 0 层：硬件抽象    │
└─────────────────────┘
每一层只调用下一层的服务
```

- **特点**：将 OS 划分为若干层，每层只能调用紧邻的下层
- **优点**：结构清晰、便于调试（逐层验证）、错误隔离
- **缺点**：层间调用带来性能开销；层次划分困难
- **典型代表**：THE 系统（Dijkstra, 1968）、Windows NT 内核

### 4.3 微内核结构（Microkernel）

```
┌──────────────────────────────────────┐
│  用户态                               │
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│  │文件  │ │网络   │ │设备   │ │用户  │ │
│  │服务  │ │服务   │ │驱动   │ │应用  │ │
│  └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │
│     │        │        │        │     │
│  ┌──┴────────┴────────┴────────┴──┐  │
│  │    消息传递 (IPC)               │  │
│  └──────────────┬─────────────────┘  │
├─────────────────┼────────────────────┤
│  内核态          │                    │
│  ┌──────────────┴────────────────┐   │
│  │  微内核                        │   │
│  │  · 进程调度                     │  │
│  │  · 内存管理（基本）              │  │
│  │  · 进程间通信 (IPC)             │  │
│  └───────────────────────────────┘   │
├──────────────────────────────────────┤
│              硬件                     │
└──────────────────────────────────────┘
```

- **核心思想**：将 OS 核心功能精简到最小（微内核），其余功能以**用户态服务进程**运行
- **优点**：
  - 内核小而稳定，可靠性高
  - 服务进程崩溃不影响内核
  - 易于扩展新服务
- **缺点**：用户态与内核态之间的消息传递带来性能开销
- **典型代表**：Mach、QNX、MINIX、L4、Windows NT（混合结构）

> [!example] 现实中的微内核
> - **QNX**：用于汽车电子、航空航天等安全关键领域
> - **Google Fuchsia**：基于 Zircon 微内核
> - **鸿蒙 OS**：采用微内核架构，用于 IoT 和移动设备

### 4.4 虚拟机结构（Virtual Machine）

```
┌──────┐ ┌──────┐ ┌──────┐
│ VM 1 │ │ VM 2 │ │ VM 3 │   ← 各 VM 运行独立的 OS
│Linux │ │Win   │ │macOS │
├──────┤ ├──────┤ ├──────┤
│Guest │ │Guest │ │Guest │   ← 客户机 OS
│ OS   │ │ OS   │ │ OS   │
└──┬───┘ └──┬───┘ └──┬───┘
   │        │        │
┌──┴────────┴────────┴──┐
│  虚拟机监控器 (VMM/Hypervisor) │   ← 硬件虚拟化
├───────────────────────┤
│        硬件            │
└───────────────────────┘
```

- **核心思想**：在硬件之上运行**虚拟机监控器（VMM/Hypervisor）**，将物理机器虚拟为多台逻辑机器
- **优点**：
  - 完全隔离，安全性最高
  - 可以在同一硬件上运行不同 OS
  - 便于系统迁移和测试
- **缺点**：虚拟化带来性能损耗
- **典型代表**：VMware、KVM、Xen、Hyper-V

> [!tip] 容器化 vs 虚拟机
> - **虚拟机**：虚拟化整个硬件，每个 VM 运行完整的 OS
> - **容器**（Docker）：共享宿主 OS 内核，只隔离用户空间，更轻量
> - 容器可以看作是操作系统层面虚拟化的产物

### 4.5 四种结构对比

| 结构 | 耦合度 | 性能 | 可靠性 | 可扩展性 | 代表 |
|------|--------|------|--------|----------|------|
| 整体式 | 高 | 高 | 低 | 差 | 早期 UNIX |
| 层次式 | 中 | 中 | 中 | 中 | THE, Windows NT |
| 微内核 | 低 | 较低 | 高 | 好 | QNX, L4, Mach |
| 虚拟机 | 最低 | 较低 | 最高 | 最好 | VMware, KVM |

---

## 五、操作系统的特征

> [!important] 四大基本特征
> 理解这四个特征是学习后续所有章节的前提。

### 5.1 并发（Concurrence）

- **并发**：多个事件在同一时间间隔内发生（宏观同时，微观交替）
- **并行**（Parallelism）：多个事件在同一时刻同时发生（需要多核/多处理器）

> [!tip] 并发 vs 并行
> - 单核 CPU：只能实现**并发**（通过时间片轮转）
> - 多核 CPU：可以实现**并行**（每个核心执行一个进程）
> - 并发是 OS 最基本、最重要的特征

### 5.2 共享（Sharing）

- **互斥共享**：资源一次只允许一个进程使用（如打印机）
- **同时共享**：资源可被多个进程同时访问（如磁盘文件、只读代码段）

并发和共享是 OS 的两个最基本的特征，它们**互为存在条件**。

### 5.3 虚拟（Virtual）

- 通过某种技术将一个物理实体变为多个逻辑实体
- **CPU 虚拟化**：时分复用 → 每个进程感觉自己独占 CPU
- **内存虚拟化**：空分复用 → 虚拟内存技术让程序使用比实际更大的地址空间

### 5.4 异步（Asynchronism）

- 进程的执行以**不可预知的速度**向前推进
- 同一程序、同一数据，多次运行的结果可能不同（取决于调度和资源竞争）
- OS 需要保证：只要运行环境相同，程序的**最终结果**一致

---

## 六、本讲小结

```mermaid
graph LR
    A["操作系统概述"] --> B["概念"]
    A --> C["发展历程"]
    A --> D["基本功能"]
    A --> E["系统结构"]
    A --> F["基本特征"]

    B --> B1["定义：系统软件"]
    B --> B2["目标：方便·有效·可扩·开放"]
    B --> B3["作用：接口·管理·扩充"]

    C --> C1["手工 → 批处理"]
    C --> C2["分时 → 实时"]
    C --> C3["网络 → 分布式"]

    D --> D1["处理机管理"]
    D --> D2["存储器管理"]
    D --> D3["设备管理"]
    D --> D4["文件管理"]
    D --> D5["用户接口"]

    E --> E1["整体式 / 层次式"]
    E --> E2["微内核 / 虚拟机"]

    F --> F1["并发·共享·虚拟·异步"]

    style A fill:#e94560,stroke:#333,color:#fff
    style B fill:#0f3460,stroke:#333,color:#fff
    style C fill:#0f3460,stroke:#333,color:#fff
    style D fill:#0f3460,stroke:#333,color:#fff
    style E fill:#0f3460,stroke:#333,color:#fff
    style F fill:#0f3460,stroke:#333,color:#fff
```

---

## 七、相关笔记

| 主题 | 链接 |
|------|------|
| 系统运行机制（中断、MMU、系统调用） | [[01_系统运行机制]] |
| 进程控制（fork、exec、wait、signal） | [[06_进程控制]] |
| 进程间通信 | [[08_进程间通信]] |
| 处理机调度 | [[11_处理机调度]] |
| 死锁 | [[12_死锁]] |
| 存储管理基础 | [[13_存储管理基础]] |
| 分页存储管理 | [[14_分页存储管理]] |
| 段式存储管理 | [[15_段式存储管理]] |
| 虚拟存储器 | [[16_虚拟存储器]] |
| 磁盘空间管理 | [[05_磁盘空间管理]] |
| 文件系统 | [[09_文件系统]] |
| 课程总导航 | [[00_课程导航]] |
