第 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 核心功能模块
- 系统初始化:准备上层应用的运行环境
- 进程管理(CPU 管理):创建进程、进程切换、保护/恢复现场、进程间同步与通信
- 存储管理:从外存加载到内存、分配空间、避免内存串扰
- 文件管理:文件组织、命名、快速检索(资源管理器)
- 外设管理:键盘、显示器、网络设备、多媒体设备、存储设备
三、内核(Kernel)
定义:操作系统的核心可信软件,支持进程并发执行的基本功能模块组。驻留内存(核心态),可访问硬件和所有存储空间,是唯一能执行特权指令的程序。
基本属性:中断驱动(需中断激发内核执行)、不可抢占(内核执行时其他应用等待)、部分程序在屏蔽中断状态下执行、可使用特权指令。
三大任务:资源抽象(软硬件资源抽象为实体)、资源分配、资源共享。
四、OS 设计规范
高效率、高可靠性(可信软件,假定不犯错)、可维护性/可用性(故障恢复能力)、可移植性(不同硬件平台适配)、可伸缩性/可扩展性(添加硬件/应用)、兼容性、安全性。
五、OS 结构演进
| 结构 | 特点 | 优点 | 缺点 | 代表 |
|---|---|---|---|---|
| 简单结构 | 整体结构,函数间相互调用 | 可理解性好,开发简单 | 结构不清晰,可靠性低,资源管理差 | DOS, UNIX |
| 分层结构 | 单向调用,不能跨层 | 约束明确,问题定位方便 | 效率受影响 | — |
| 单内核 | 模块通过函数接口直接调用 | 运行效率高 | 功能庞大,移植复杂 | Linux(部分) |
| 微内核 | 只保留核心功能(中断处理/系统调用总控/进程调度),其他剥离为外部服务 | 易扩充,模块隔离,移植性好 | 执行效率低(client-server 通信) | — |
| 模块化 | 核心部件启动时加载,其他动态链接 | 灵活 | — | Solaris, Mac OS |
关键 trade-off:单内核效率高但大而重,微内核灵活小巧但效率低。现代 OS(如 Linux)融合两者思想——核心模块放内核,扩展服务动态加载。
OpenHarmony 架构:内核层(驱动软件等)→ 系统服务层(任务调度、负载均衡)→ 外部服务子系统。
六、虚拟机
基于分时操作系统和多道程序设计思想,将物理资源划分为若干逻辑资源,模拟出多个虚拟操作系统。
七、OS 运行模式
- 非进程内核模型:内核作为独立执行体,用户程序通过中断/陷入启动内核
- 功能在用户进程内执行模型:OS 代码嵌入用户进程中执行(本课程采用)
- 微内核模式:内核只包含中断处理、系统调用总控、进程调度,其他在用户态执行
八、用户接口
| 接口类型 | 面向用户 | 实现方式 |
|---|---|---|
| 操作接口 | 普通用户 | CLI(命令行/shell 解释器)、GUI(图形界面/explorer.exe) |
| 编程接口 | 编程用户 | 系统调用 API(函数调用集合) |
CLI:通过 shell 解释器实现命令交互(Linux/UNIX 专业人士常用)。 GUI:通过 explorer.exe 等进程将用户操作翻译为指令传递给 OS(Windows 普通用户)。
九、系统调用与 trap 指令
用户程序 vs 系统程序:用户程序运行在用户态(非特权),系统程序运行在核心态(可执行特权指令)。
特权指令:与硬件打交道(访问内存、外设、硬盘),必须由核心态执行,控制在 OS 内核手中。
trap 指令(陷入指令/访管指令):实现用户态→核心态切换的特殊指令,由编译器在编译系统调用时自动插入。
系统调用执行流程:
- 用户程序执行到系统调用
- trap 指令:CPU 态制位(用户态→核心态)
- 保护现场,保存寄存器状态
- 根据系统调用号进入对应处理入口
- 系统调用执行:参数通过寄存器传递,结果写回寄存器
- 恢复现场,返回用户态继续执行
系统调用 vs 普通函数调用:运行状态不同(核心态 vs 用户态)、调用方法不同(trap 指令 vs 普通调用)、返回机制不同(涉及现场恢复和重新调度)。
write 系统调用完整路径: 用户程序 → write 系统调用 → trap 指令进入核心态 → 内核总控判断系统调用号 → 磁盘驱动程序 → IO 操作(CPU 让出给其他程序)→ 盘中断处理程序(IO 完成)→ 恢复现场 → 返回用户程序
不同 OS 安装包不通用原因:系统调用接口不同——函数名称、参数类型、参数个数、参数顺序均可能不同。
printf 示例:printf(C 标准库函数)→ write(系统调用)→ 输出到界面。
十、程序顺序执行 vs 并发执行
顺序执行特征:
- 顺序性:任何时刻只执行一个操作,前一个完成才执行下一个
- 封闭性:当前资源状态只能由当前运行程序决定和改变
- 资源独占性:独占 CPU 资源,其他程序不能进入
- 结果可再现性:初始条件和输入相同,结果一定相同
顺序执行优点:方便调试(封闭性、可再现性)。 顺序执行缺点:资源独占性,不符合 OS 并发共享的需求。
多道程序设计思想:内存存放多个作业,处理器交替执行,宏观并行、微观串行。
并发执行新问题:
- 共享性:失去封闭性,多个程序共享内存、CPU、外设
- 制约性:因共享资源带来的间接制约(CPU 被占用需等待)
- 间断性:不再从头到尾连续执行,CPU 在多任务间穿插调度
- 结果不可再现性:推进速度不同导致输出结果不同(如两个程序共享变量 N,以不同顺序执行输出不同)
十一、进程概念
引入原因:多道程序设计思想下,原有程序(静态概念)不能满足并发、动态、独立的需求,需要新概念描述程序的动态执行过程。
进程定义:
- 程序的一次完整执行过程(动态概念)
- 程序及其数据在处理机上顺序执行时所发生的一系列活动
- 系统进行软硬件资源分配的基本单位
进程特性:动态性(有生命周期,从创建到消亡)、独立性、并发性、结构性(有数据结构描述)。
程序 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 为唯一标识,三大状态(就绪/运行/阻塞)动态转换