操作系统笔记 一.操作系统概述

操作系统的概念#

  • 系统资源的管理者
  • 给用户和其他软件提供接口和环境, 向上层提供方便易用的服务. 封装思想
  • 最接近硬件的一层软件

联机命令接口: 交互式命令接口, 用户说一句系统做一句, 如 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 检测到中断信号后, 会根据其类型查询中断向量表, 找到相应的中断处理程序在内存中存放的位置.

系统调用#

操作系统需要向上提供一些简单易用的服务, 主要包括命令接口和程序接口. 其中, 程序接口由一组系统调用组成.

系统调用是操作系统提供给应用程序使用的接口, 可以理解为一种可供应用程序调用的特殊函数, 应用程序可以通过系统调用请求获得操作系统内核的服务.

  • 设备管理
  • 文件管理
  • 进程控制
  • 进程通信
  • 内存管理

过程: 传递系统调用参数 -> (用户态) 执行陷入指令 -> (内核态) 响应的内核程序被调用, 执行请求 -> 返回应用程序

操作系统体系结构#

操作系统的内核#

操作系统最基本最核心的部分, 实现操作系统内核功能的程序就是内核程序.

image-20251206221753233

大内核:

  • 将操作系统的主要功能模块都作为系统内核, 运行在内核态.
  • 优点: 性能高
  • 缺点: 内核代码庞大, 结构混乱, 难以维护
  • Linux, UNIX

微内核:

  • 只把最基本的功能保留在内核
  • 优点: 内核功能少, 结构清晰, 方便维护
  • 缺点:CPU 运行程序的时候需要更频繁地转换 CPU 状态, 性能低
  • Windows NT

分层结构#

内核分多层, 每层可以单向调用更低一层提供的接口.

优点: 便于调试和验证, 易扩充和维护, 接口清晰固定.

缺点: 难以合理定义各层边界, 效率低, 不能跨层调用, 系统调用执行时间长

模块化#

将内核划分为多个模块, 各模块之间互相协作.

内核 = 主模块 + 可加载内核模块

主模块只负责核心功能, 如进程调度, 内存管理;

可加载内核模块可以动态加载新模块到内核, 而无需重新编译整个内核.

优点:

  • 模块间逻辑清晰易于维护, 确定接口后可以多模块同时开发;
  • 支持动态加载新的内核模块 (如安装设备驱动, 文件系统模块等), 增强操作系统的适应性
  • 任何模块都能直接调用其他模块, 效率高

缺点:

  • 模块间接口定义未必合理实用
  • 模块间相互依赖, 更难调试

外核#

Exokernel

内核负责进程调度, 进程通信等功能, 外核负责为用户进程分配未经抽象的硬件资源, 并保证资源使用安全.

优点:

  • 外核可以给用户进程分配「不虚拟, 不抽象」的硬件资源, 用户进程可以更灵活地使用硬件资源
  • 减少了虚拟硬件资源的「映射层」, 提升效率

缺点: 降低了系统的一致性, 系统变得更复杂.

操作系统引导#

image-20251206223757095

分区表包含各盘的大小等信息.

C 盘是活动分区, 安装了操作系统.

开机时, ROM 引导程序 (自举程序) 指引 CPU 把主引导记录读入主存的 RAM, 据此找到 C 盘, 读入 C 盘里的引导记录, 找到 (根目录下的) 启动管理器, 启动启动管理器 (即操作系统初始化程序), 完成开机.

虚拟机#

传统计算机一台物理机上只能运行一个操作系统.

虚拟机: 使用虚拟化技术, 把一台物理机器虚拟化为多台虚拟机器 Virtual Machine, 每台虚拟机都可以独立运行一个操作系统.

虚拟机管理程序 (又称虚拟机监控程序, Virtual Machine Monitor, VMM, Hypervisor)

image-20251206224147827

第一类 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 的系统调用

你说, 我能坚持把网课看完吗.