Files
obsidian/操作系统/00_操作系统概述/00_操作系统概述.md

528 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第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**1961MIT最早的分时系统之一
> - **MULTICS**1964MIT/Bell Labs/GE影响深远但过于复杂
> - **UNIX**1969Ken 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_课程导航]] |