# 第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_课程导航]] |