第 2 周 星期二 第 2 大节

  • 视频:screen_操作系统与分布式计算_第2周_星期二_第2大节.mp4
  • 字幕:transcripts/第2周_星期二_第2大节.srt

时间轴

  • [00:34] 课堂开始,回顾上节课内容(操作系统学什么、定位、发展历程、AI 与 OS 关系)
  • [04:31] 中断(外中断)vs 异常(内中断)概念回顾
  • [04:57] 中断/异常激发内核运行
  • [05:49] 中断/异常定义:CPU 暂停当前程序转去处理异步/同步事件
  • [06:21] 引入中断目的:CPU 与 IO 并行处理
  • [07:09] 通道设备 IO 完成时通知 CPU
  • [07:40] 异常定义:CPU 执行指令过程中发生不正常操作(除零、越界等)
  • [08:27] trap 指令(陷入指令)实现系统调用
  • [08:52] 指针越界异常例子
  • [09:37] 早期中断/异常不区分 → 后分为广义中断 → 外中断 (狭义中断) 和内中断 (异常)
  • [10:11] 外中断:由硬件逻辑产生(IO 完成、时钟中断)
  • [10:52] 内中断(异常/例外):系统调用、缺页异常、debug 断点、非法指令
  • [13:06] 狭义中断 vs 异常:中断来源于外设(与当前指令无关,可屏蔽);异常来源于当前程序(与当前指令有关,不可屏蔽)
  • [14:08] 中断/异常处理流程:保存现场→分析原因→处理子程序→恢复现场
  • [14:57] OS 核心功能模块:系统初始化、进程管理、存储管理、文件管理、外设管理
  • [15:51] 系统初始化——准备上层应用的运行环境
  • [16:20] 进程管理(CPU 管理):创建进程、切换、保护/恢复现场、同步与通信
  • [17:10] 存储管理:从外存加载到内存、分配空间、避免内存串扰
  • [17:43] 文件管理:文件组织、命名、快速检索
  • [19:08] 外设管理:键盘、显示器、网络设备、多媒体设备、存储设备
  • [19:54] 内核(kernel)概念:保持核心功能的可信软件部分
  • [20:47] 单内核(monolithic kernel)vs 微内核(micro kernel)分类
  • [21:13] 内核定义:支持进程并发执行的基本功能模块组,驻留内存、运行在核心态、访问硬件和所有存储空间
  • [22:30] 内核驻留内存空间,扩展功能需要时才加载
  • [22:53] 内核是可信软件,唯一能执行特权指令的程序
  • [23:45] 内核三大任务:抽象、分配、共享
  • [24:55] 内核基本属性:中断驱动、不可抢占、部分程序在屏蔽中断状态下执行、可使用特权指令
  • [25:29] 内核不可抢占:内核执行时其他应用必须等待
  • [26:27] OS 设计规范:高效率、高可靠性、可维护性/可用性、可移植性、可伸缩性(可扩展性)、兼容性、安全性
  • [29:38] OS 结构演进:简单结构→分层结构→微内核→模块结构
  • [29:54] 简单结构:整体由若干函数(模块)相互调用,代表 DOS、UNIX
  • [30:28] 简单结构优点:可理解性好、开发简单;缺点:结构不清晰、可靠性低、资源管理能力差
  • [33:35] 分层结构:单向调用不能跨层,类似网络七层协议;约束明确、问题定位方便,但效率受影响
  • [35:00] 每种结构有优有劣,在利弊间做平衡(balance)
  • [36:28] 虚拟机概念:分时操作系统 + 多道程序设计思想,物理资源划分为若干逻辑资源
  • [38:56] 单内核系统:模块间通过函数接口直接调用;优点:运行效率高;缺点:功能庞大、移植复杂
  • [40:37] 微内核:操作系统瘦身,只保留基本功能(中断处理、系统调用总控、进程调度),其他剥离为外部服务
  • [41:13] 微内核优点:易扩充、模块隔离、移植性好;缺点:执行效率低(client-server 通信)
  • [43:00] OpenHarmony 架构:内核层(驱动软件等)→ 系统服务层(任务调度、负载均衡)→ 外部服务子系统
  • [44:08] Linux 融合单内核和微内核思想:核心模块放在内核,扩展服务动态加载
  • [45:37] 模块化结构:核心部件启动时加载,其他服务作为动态链接加载
  • [51:08] Solaris 是典型模块化结构,Mac OS 基于 BSD 发展
  • [52:04] OS 运行模型:用户程序通过 API 进入内核执行
  • [52:55] 三种运行模式:非进程内核模型、功能在用户进程内执行模型、微内核独立进程模型
  • [53:46] 非进程内核模型:内核作为独立执行体,用户通过中断/陷入启动内核
  • [54:41] 内核功能在用户进程内执行模型:操作系统代码嵌入用户进程中执行(本课程采用)
  • [55:54] 微内核运行模式:只包含中断处理、系统调用总控、进程调度
  • [56:42] 用户接口:操作接口(CLI/GUI)vs 编程接口(系统调用 API)
  • [57:22] 操作接口面向普通用户,CLI(命令行)或 GUI(图形界面)
  • [58:29] 编程接口(系统调用 API)面向编程用户,获得 OS 服务的调用集合
  • [59:28] 系统调用原理:用户程序(用户态)vs 系统程序(核心态)
  • [01:00:09] 特权指令:与硬件打交道(访问内存、外设、硬盘),只能在核心态执行
  • [01:01:03] 硬件访问权限控制在 OS 内核手中,上层应用通过 API 访问
  • [01:01:46] C 语言文件操作底层调用 OS 系统调用(封装在库函数中)
  • [01:02:47] 用户不关心文件写到硬盘哪个扇区,OS 内核处理
  • [01:03:49] 两个问题:用户态→核心态转变时机;核心态→用户态返回
  • [01:04:54] trap 指令(陷入指令/访管指令):实现用户态→核心态切换
  • [01:05:37] trap 指令由编译器在编译系统调用时自动编译进去
  • [01:06:28] 执行流程:trap→CPU 态制位(用户态→核心态)→执行系统调用→返回用户态
  • [01:07:38] 系统调用 vs 普通函数调用:运行状态不同、调用方法不同、返回机制不同
  • [01:08:52] 不同 OS 安装包不通用原因:系统调用接口不同(函数名、参数类型、个数、顺序)
  • [01:14:23] UNIX 系统调用的实现:trap 指令 + 系统调用号区分不同调用
  • [01:16:55] 系统调用参数传递:通过特定寄存器传递参数
  • [01:17:53] 系统调用程序一般格式:参数填入寄存器→trap 指令→执行→结果写回寄存器
  • [01:19:21] write 系统调用完整路径:用户程序→write→核心态→磁盘驱动程序→IO→CPU 让出→盘中断→恢复现场
  • [01:22:19] API→系统调用→系统核心处理模块的关系
  • [01:22:52] printf 对应底层系统调用 write
  • [01:24:16] 操作接口:CLI(shell 解释器)/ GUI(explorer.exe 进程翻译用户操作)
  • [01:26:13] 操作系统概述三大子模块总结
  • [01:27:29] 进入进程管理模块(CPU 调度)
  • [01:29:37] 进程(process)是后续所有内容的基础
  • [01:31:04] 程序顺序执行:在任何时刻只执行一个操作,前一个完成才执行下一个
  • [01:33:51] 程序执行示例:输入→计算→输出循环
  • [01:34:36] 顺序执行特征:顺序性、封闭性、资源独占性(独占 CPU)、结果可再现性
  • [01:35:57] 顺序执行优点:封闭性和可再现性方便调试;缺点:资源独占性不符合 OS 并发共享需求
  • [01:41:50] OS 两大基本特征:并发性(同一时间段多个任务并发)和共享性(不同任务共享资源)
  • [01:42:33] 多道程序设计思想:内存存放多个作业,处理器交替执行,宏观并行、微观串行
  • [01:43:20] 并发执行新问题:共享(失去封闭性)、制约性(CPU 被占用需等待)、间断性(穿插执行)、结果不可再现性
  • [01:46:01] 两个程序共享变量 N 导致结果不可再现——推进速度不同造成输出不同
  • [01:52:04] 引入进程概念:反映程序执行的动态特征、独立性、并发性
  • [01:52:51] 进程概念最早在 MIT 的 MULTICS 中提出,Linux 中称为 task
  • [01:53:27] 进程定义:程序的一次完整执行过程(动态概念);程序及其数据在处理机上顺序执行时所发生的一系列活动;系统进行软硬件资源分配的基本单位
  • [01:55:37] 进程特性:动态性(有生命周期)、独立性、并发性、结构性(有数据结构描述)
  • [01:57:26] 程序 vs 进程:程序是静态概念(磁盘上的代码),进程是动态概念(运行过程);程序长期存在,进程有生命周期;资源分配给进程;一个程序对应多个进程(如多个浏览器窗口),一个进程也可对应多个程序
  • [02:01:18] 进程组成要素:PCB(进程控制块,唯一标识)+ 程序代码 + 数据 + 工作区(stack,函数调用参数传递 + 系统调用核心工作区)
  • [02:05:27] 进程映像 = 程序代码 + 数据 + 工作站(占用户空间);PCB 占系统空间
  • [02:08:41] PCB 内容三大类:标识信息(进程 ID、用户 ID、父进程 ID)、现场信息(寄存器内容、堆栈指针)、控制信息(状态、调度信息、队列、资源占用)
  • [02:11:56] 不同 OS 的进程数据结构:UNIX(proc 结构体)、Linux(task_struct)、Windows(EPROCESS)
  • [02:14:20] PCB 组织方式:线性表、链表、树状结构等
  • [02:16:03] 进程状态:就绪态(已获得除 CPU 外所有资源)→ 运行态(占用 CPU)→ 阻塞态(等待 IO/事件)
  • [02:19:11] 分时系统中时间片用完:运行态→就绪态
  • [02:20:30] 进程创建:创建 PCB→分配资源→初始化 PCB→放入就绪队列
  • [02:19:25] 进程结束:改为结束态→回收资源(关闭文件、释放内存)→回收 PCB→触发 CPU 调度
  • [02:20:56] Linux 进程相关系统调用:wait pid(阻塞进程)、wait(等待其他任务)、fork(创建子进程)、exit(结束进程)
  • [02:22:55] 进程状态转换核心:就绪↔运行(CPU 调度/时间片用完)、运行→阻塞(等待 IO/事件)、阻塞→就绪(IO/事件完成)

关键点

考勤/签到/小测

  • 点名互动:” 董世凯 "" 赵海宁 ” 等,部分未到场
  • 留学生 Qingyu Bai(青语白子)互动

作业

考试/复习重点

  • 中断 vs 异常区分(外中断/内中断)
  • 单内核 vs 微内核的 trade-off
  • 系统调用原理、trap 指令
  • 程序顺序执行四个特征
  • 并发执行四个新问题
  • 进程概念、进程状态转换

其他需要回看的片段

  • [01:46:01] 两个程序共享变量 N 导致结果不可再现——并发问题本质
  • [02:08:41] PCB 包含的三大类信息(标识、现场、控制)

知识点详解

一、中断与异常

定义:CPU 暂停当前正在执行的程序,转去处理异步/同步事件。

引入中断目的:实现 CPU 与 IO 并行处理——CPU 从繁杂的 IO 事务中解脱,当其他设备需要 CPU 参与时通过中断主动报告。

广义中断分类

  • 外中断(狭义中断):由硬件逻辑产生,与当前执行指令无关,可屏蔽。如 IO 完成中断、时钟中断。
  • 内中断(异常/例外):来源于当前正在运行的程序,与当前指令有关,不可屏蔽。包括系统调用(trap 指令)、缺页异常、debug 断点、非法指令(如除零、越界访问)。

中断/异常处理流程:保存当前程序现场 → 分析中断/异常原因 → 进入对应处理子程序 → 恢复现场 → 继续执行。

二、OS 核心功能模块

  1. 系统初始化:准备上层应用的运行环境
  2. 进程管理(CPU 管理):创建进程、进程切换、保护/恢复现场、进程间同步与通信
  3. 存储管理:从外存加载到内存、分配空间、避免内存串扰
  4. 文件管理:文件组织、命名、快速检索(资源管理器)
  5. 外设管理:键盘、显示器、网络设备、多媒体设备、存储设备

三、内核(Kernel)

定义:操作系统的核心可信软件,支持进程并发执行的基本功能模块组。驻留内存(核心态),可访问硬件和所有存储空间,是唯一能执行特权指令的程序。

基本属性:中断驱动(需中断激发内核执行)、不可抢占(内核执行时其他应用等待)、部分程序在屏蔽中断状态下执行、可使用特权指令。

三大任务:资源抽象(软硬件资源抽象为实体)、资源分配、资源共享。

四、OS 设计规范

高效率、高可靠性(可信软件,假定不犯错)、可维护性/可用性(故障恢复能力)、可移植性(不同硬件平台适配)、可伸缩性/可扩展性(添加硬件/应用)、兼容性、安全性。

五、OS 结构演进

结构特点优点缺点代表
简单结构整体结构,函数间相互调用可理解性好,开发简单结构不清晰,可靠性低,资源管理差DOS, UNIX
分层结构单向调用,不能跨层约束明确,问题定位方便效率受影响
单内核模块通过函数接口直接调用运行效率高功能庞大,移植复杂Linux(部分)
微内核只保留核心功能(中断处理/系统调用总控/进程调度),其他剥离为外部服务易扩充,模块隔离,移植性好执行效率低(client-server 通信)
模块化核心部件启动时加载,其他动态链接灵活Solaris, Mac OS

关键 trade-off:单内核效率高但大而重,微内核灵活小巧但效率低。现代 OS(如 Linux)融合两者思想——核心模块放内核,扩展服务动态加载。

OpenHarmony 架构:内核层(驱动软件等)→ 系统服务层(任务调度、负载均衡)→ 外部服务子系统。

六、虚拟机

基于分时操作系统和多道程序设计思想,将物理资源划分为若干逻辑资源,模拟出多个虚拟操作系统。

七、OS 运行模式

  1. 非进程内核模型:内核作为独立执行体,用户程序通过中断/陷入启动内核
  2. 功能在用户进程内执行模型:OS 代码嵌入用户进程中执行(本课程采用)
  3. 微内核模式:内核只包含中断处理、系统调用总控、进程调度,其他在用户态执行

八、用户接口

接口类型面向用户实现方式
操作接口普通用户CLI(命令行/shell 解释器)、GUI(图形界面/explorer.exe)
编程接口编程用户系统调用 API(函数调用集合)

CLI:通过 shell 解释器实现命令交互(Linux/UNIX 专业人士常用)。 GUI:通过 explorer.exe 等进程将用户操作翻译为指令传递给 OS(Windows 普通用户)。

九、系统调用与 trap 指令

用户程序 vs 系统程序:用户程序运行在用户态(非特权),系统程序运行在核心态(可执行特权指令)。

特权指令:与硬件打交道(访问内存、外设、硬盘),必须由核心态执行,控制在 OS 内核手中。

trap 指令(陷入指令/访管指令):实现用户态→核心态切换的特殊指令,由编译器在编译系统调用时自动插入。

系统调用执行流程

  1. 用户程序执行到系统调用
  2. trap 指令:CPU 态制位(用户态→核心态)
  3. 保护现场,保存寄存器状态
  4. 根据系统调用号进入对应处理入口
  5. 系统调用执行:参数通过寄存器传递,结果写回寄存器
  6. 恢复现场,返回用户态继续执行

系统调用 vs 普通函数调用:运行状态不同(核心态 vs 用户态)、调用方法不同(trap 指令 vs 普通调用)、返回机制不同(涉及现场恢复和重新调度)。

write 系统调用完整路径: 用户程序 → write 系统调用 → trap 指令进入核心态 → 内核总控判断系统调用号 → 磁盘驱动程序 → IO 操作(CPU 让出给其他程序)→ 盘中断处理程序(IO 完成)→ 恢复现场 → 返回用户程序

不同 OS 安装包不通用原因:系统调用接口不同——函数名称、参数类型、参数个数、参数顺序均可能不同。

printf 示例:printf(C 标准库函数)→ write(系统调用)→ 输出到界面。

十、程序顺序执行 vs 并发执行

顺序执行特征

  • 顺序性:任何时刻只执行一个操作,前一个完成才执行下一个
  • 封闭性:当前资源状态只能由当前运行程序决定和改变
  • 资源独占性:独占 CPU 资源,其他程序不能进入
  • 结果可再现性:初始条件和输入相同,结果一定相同

顺序执行优点:方便调试(封闭性、可再现性)。 顺序执行缺点:资源独占性,不符合 OS 并发共享的需求。

多道程序设计思想:内存存放多个作业,处理器交替执行,宏观并行、微观串行。

并发执行新问题

  • 共享性:失去封闭性,多个程序共享内存、CPU、外设
  • 制约性:因共享资源带来的间接制约(CPU 被占用需等待)
  • 间断性:不再从头到尾连续执行,CPU 在多任务间穿插调度
  • 结果不可再现性:推进速度不同导致输出结果不同(如两个程序共享变量 N,以不同顺序执行输出不同)

十一、进程概念

引入原因:多道程序设计思想下,原有程序(静态概念)不能满足并发、动态、独立的需求,需要新概念描述程序的动态执行过程。

进程定义

  1. 程序的一次完整执行过程(动态概念)
  2. 程序及其数据在处理机上顺序执行时所发生的一系列活动
  3. 系统进行软硬件资源分配的基本单位

进程特性:动态性(有生命周期,从创建到消亡)、独立性、并发性、结构性(有数据结构描述)。

程序 vs 进程:程序是静态概念(磁盘上的代码集合),进程是动态概念(运行过程)。程序长期存在(磁盘不消失),进程有生命周期。资源分配给进程而非程序。一个程序可对应多个进程(如打开多个浏览器窗口),一个进程也可对应多个程序。

进程组成:PCB(进程控制块,唯一标识)+ 进程映像(程序代码 + 数据 + 工作区(stack))

  • PCB:存储在系统空间,供 OS 管理进程用
  • 进程映像:存储在用户空间

PCB 内容三大类

  • 标识信息:进程 ID(唯一)、用户 ID、父进程 ID
  • 现场信息:寄存器内容、堆栈指针(用于切换时保存/恢复)
  • 控制信息:进程状态、调度信息、所在队列、资源占用情况

不同 OS 的进程数据结构:UNIX(proc 结构体)、Linux(task_struct)、Windows(EPROCESS)。

PCB 组织方式:线性表、链表、树状结构等。

十二、进程状态与转换

三大核心状态

  • 就绪态(Ready):已获得除 CPU 外所有资源,具备被调度的条件
  • 运行态(Running):占用 CPU,正在执行
  • 阻塞态(Blocked):等待 IO 或事件发生

状态转换

  • 就绪 → 运行:CPU 调度
  • 运行 → 就绪:时间片用完(分时系统)
  • 运行 → 阻塞:等待 IO/事件
  • 阻塞 → 就绪:IO/事件完成

进程创建:创建 PCB → 分配资源(内存等)→ 初始化 PCB(填写 ID、父进程 ID 等信息)→ 放入就绪队列。

进程结束:改为结束态 → 回收资源(关闭文件、释放内存)→ 回收 PCB → 触发 CPU 调度加载新进程。

Linux 进程相关系统调用:fork(创建子进程)、exit(结束进程)、wait(等待其他任务)、wait pid(阻塞进程等待 IO 完成)。

省流

  • 中断 vs 异常:外中断(硬件/可屏蔽)与内中断即异常(软件/不可屏蔽),均激发内核执行
  • OS 核心功能:系统初始化、进程管理、存储管理、文件管理、外设管理
  • 内核三大任务:抽象、分配、共享,是驻留内存的可信软件,唯一能执行特权指令
  • OS 架构演进:简单结构 → 分层结构 → 微内核 → 模块化。单内核(高效率大而重)vs 微内核(灵活可靠低效率)
  • 系统调用机制:用户态程序通过 trap 指令切换到核心态执行特权指令,参数通过寄存器传递,编译器自动插入 trap 指令
  • 用户接口:操作接口(CLI/GUI)面向普通用户,编程接口(系统调用 API)面向编程用户
  • 程序顺序执行:顺序性、封闭性、资源独占性、结果可再现性
  • 并发执行新问题:共享、制约性、间断性、结果不可再现性
  • 引入进程概念:描述程序动态执行过程,PCB 为唯一标识,三大状态(就绪/运行/阻塞)动态转换