操作系统笔记 一.操作系统概述
操作系统的概念#
- 系统资源的管理者
- 给用户和其他软件提供接口和环境, 向上层提供方便易用的服务. 封装思想
- 最接近硬件的一层软件
联机命令接口: 交互式命令接口, 用户说一句系统做一句, 如 cmd
脱机命令接口: 批处理命令接口, 用户说一堆系统做一堆, 如 .bat 文件
可以在程序中进行系统调用来使用程序接口, 普通用户不能直接使用, 只能通过程序代码间接使用.
操作系统的特征#
并发#
多个事件在同一时间间隔内发生, 宏观上是同时的, 微观上是交替发生的.
操作系统的并发性指计算机中「同时」运行多个程序.
注意: 并行指同一时刻进行多个任务, 和并发不同.
单核 CPU 同一时刻只能执行一个程序, 程序只能并发运行; 多核 CPU 可以同时执行多个程序, 程序可以并行执行, 例如 4 核 CPU 可以同时运行 4 个程序.
共享#
即资源共享, 系统中的资源可供内存中多个并发执行的进程共同使用.
两种资源共享方式:
- 互斥共享: 虽然可以给多个进程使用, 但一个时间段内只允许一个进程访问该资源, 例如同时用 QQ 和微信视频
- 同时共享: 允许一个时间段内多个进程「同时」对它们进行访问, 例如 QQ 发送文件 A, 微信发送文件 B, 二者共享硬盘资源
「同时」是宏观上的, 微观上可能仍是交替的.
虚拟#
把一个物理上的实体变为若干个逻辑上的对应物. 例如, 虚拟处理器, 虚拟内存.
异步#
在多道程序环境下, 允许多个程序并发执行, 但由于资源有限, 进程的执行不是一贯到底的, 而是走走停停, 以不可预知的速度向前推进.
操作系统的发展与分类#
手工操作阶段, 批处理阶段 (单道批处理系统, 多道批处理系统), 分时操作系统, 实时操作系统.
操作系统的运行机制#
内核态和用户态#
内核程序和应用程序#
内核程序组成了操作系统内核, 简称内核, 是操作系统的核心部分, 也是最接近硬件的部分.
特权指令和非特权指令#
应用程序只能使用非特权指令, 如加法指令, 减法指令; 操作系统的内核可以使用特权指令, 如内存清零指令.
内核态和用户态#
为了区分运行的是内核程序还是应用程序, CPU 有内核态 (管态) 和用户态 (目态).
CPU 中有一个寄存器叫程序状态字寄存器 PSW, 1 表示内核态, 0 表示用户态.
内核在让出 CPU 之前, 会使用一条特权指令把 PSW 标志位用户态.
程序试图在用户态执行特权指令, 会触发中断信号, CPU 检测到中断信号, 会立即变为内核态, 操作系统会强行夺取 CPU 的控制权, 停止当前应用程序, 转而运行内核程序.
但凡需要操作系统介入的地方, 都会触发中断信号.
中断和异常#
中断的作用#
合适的情况下, 操作系统内核会把 CPU 的使用权交给应用程序, 中断是内核夺回 CPU 使用权的唯一途径.
中断的类型#
中断分为内中断和外中断.
内中断也称异常, 与当前执行的指令有关, 中断信号来自 CPU 内部.
分为:
- 陷阱/陷入 trap, 由陷入指令引发, 是应用程序故意触发的.
- 故障 fault, 由错误条件引起, 可能被内核程序修复, 修复后把使用权还给应用程序.
- 终止 abort, 由致命错误引起, 内核程序无法修复该错误, 直接终止该应用程序, 如除以 0, 非法使用特权指令.
例:
- 试图在用户态执行特权指令
- 执行除法指令发现除数为 0
- 应用程序想请求操作系统内核的服务, 此时会执行陷入指令, 该指令会引发一个内中断信号
外中断也称中断, 与当前执行的指令无关, 中断信号来自 CPU 外部.
例:
- 时钟中断, 时钟部件发来的中断信号
- I/O 中断, 输入/输出设备发来的中断信号
CPU 在每条指令结束时, 都会检查有无外中断信号.
中断机制的基本原理#
不同中断信号需要用不同的中断处理程序处理. CPU 检测到中断信号后, 会根据其类型查询中断向量表, 找到相应的中断处理程序在内存中存放的位置.
系统调用#
操作系统需要向上提供一些简单易用的服务, 主要包括命令接口和程序接口. 其中, 程序接口由一组系统调用组成.
系统调用是操作系统提供给应用程序使用的接口, 可以理解为一种可供应用程序调用的特殊函数, 应用程序可以通过系统调用请求获得操作系统内核的服务.
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
过程: 传递系统调用参数 -> (用户态) 执行陷入指令 -> (内核态) 响应的内核程序被调用, 执行请求 -> 返回应用程序
操作系统体系结构#
操作系统的内核#
操作系统最基本最核心的部分, 实现操作系统内核功能的程序就是内核程序.


大内核:
- 将操作系统的主要功能模块都作为系统内核, 运行在内核态.
- 优点: 性能高
- 缺点: 内核代码庞大, 结构混乱, 难以维护
- Linux, UNIX
微内核:
- 只把最基本的功能保留在内核
- 优点: 内核功能少, 结构清晰, 方便维护
- 缺点:CPU 运行程序的时候需要更频繁地转换 CPU 状态, 性能低
- Windows NT
分层结构#
内核分多层, 每层可以单向调用更低一层提供的接口.
优点: 便于调试和验证, 易扩充和维护, 接口清晰固定.
缺点: 难以合理定义各层边界, 效率低, 不能跨层调用, 系统调用执行时间长
模块化#
将内核划分为多个模块, 各模块之间互相协作.
内核 = 主模块 + 可加载内核模块
主模块只负责核心功能, 如进程调度, 内存管理;
可加载内核模块可以动态加载新模块到内核, 而无需重新编译整个内核.
优点:
- 模块间逻辑清晰易于维护, 确定接口后可以多模块同时开发;
- 支持动态加载新的内核模块 (如安装设备驱动, 文件系统模块等), 增强操作系统的适应性
- 任何模块都能直接调用其他模块, 效率高
缺点:
- 模块间接口定义未必合理实用
- 模块间相互依赖, 更难调试
外核#
Exokernel
内核负责进程调度, 进程通信等功能, 外核负责为用户进程分配未经抽象的硬件资源, 并保证资源使用安全.
优点:
- 外核可以给用户进程分配「不虚拟, 不抽象」的硬件资源, 用户进程可以更灵活地使用硬件资源
- 减少了虚拟硬件资源的「映射层」, 提升效率
缺点: 降低了系统的一致性, 系统变得更复杂.
操作系统引导#

分区表包含各盘的大小等信息.
C 盘是活动分区, 安装了操作系统.
开机时, ROM 引导程序 (自举程序) 指引 CPU 把主引导记录读入主存的 RAM, 据此找到 C 盘, 读入 C 盘里的引导记录, 找到 (根目录下的) 启动管理器, 启动启动管理器 (即操作系统初始化程序), 完成开机.
虚拟机#
传统计算机一台物理机上只能运行一个操作系统.
虚拟机: 使用虚拟化技术, 把一台物理机器虚拟化为多台虚拟机器 Virtual Machine, 每台虚拟机都可以独立运行一个操作系统.
虚拟机管理程序 (又称虚拟机监控程序, Virtual Machine Monitor, VMM, Hypervisor)

| 第一类 VMM | 第二类 VMM | |
|---|---|---|
| 对物理资源的控制权 | 直接运行在硬件之上, 能直接控制和分配物理资源 | 运行在 Host OS 之上, 依赖于 Host OS 为其分配物理资源 |
| 资源分配方式 | 在安装 Guest OS 时, VMM 要在原本的硬盘上自行分配存储空间, 类似于「外核」的分配方式, 分配未经抽象的物理硬件 | Guest OS 拥有自己的虚拟磁盘, 该盘实际上是 Host OS 文件系统中的一个大文件. GuestOS 分配到的内存是虚拟内存 |
| 性能 | 性能更好 | 性能更差, 需要 HostOS 作为「中介」 |
| 可支持的虚拟机数量 | 更多, 不需要和 Host OS 竞争资源, 相同的硬件资源可以支持更多的虚拟机 | 更少, Host OS 本身需要使用物理资源, Host OS 上运行的其他进程也需要物理资源 |
| 虚拟机的可迁移性 | 更差 | 更好, 只需导出虚拟机镜像文件即可迁移到另一台 HostOS 上, 商业化应用更广泛 |
| 运行模式 | 第一类 VMM 运行在最高特权级 (Ring 0), 可以执行最高特权的指令 | 第二类 VMM 部分运行在用户态, 部分运行在内核态. GuestOS 发出的系统调用会被 VMM 截获, 并转化为 VMM 对 HostOS 的系统调用 |
你说, 我能坚持把网课看完吗.