CSCI3150 全新课程伴读
这套笔记面向第一次学习操作系统的读者,按原课件顺序分段讲解。可以从定义、代码、图表和原例题一路读到中间推理与结果,不必同时开着 PPT 对照才能继续。2026-10-22 再次对照 Lecture 与 Tutorial 原页检查,补清代码执行、指针关系、页表寻址和图片中的 FAT16 编码表;补充例子与原课件内容明确区分。
Lecture 与 Tutorial 的现有来源共 792 页,Lab01 和 Lab02 另有 38 页,对应 39 份逐讲/分段解释。其余为 Lab02 操作教程、HW01 详读、HW01 分级提示和 HW02 详细解析。页数表示现有材料范围,不代表已经取得所有本学期后续课件。
本入口串联 43 篇正文与练习引导。第一次学操作系统,可以从“一个命令如何运行”进入,再走到文件、调度、内存与并发;已经在做实验时,则按卡住的具体机制跳转。每篇保留原课件页序,补充段会区分课件事实、解释用例子与接口边界。
先认版本:L00–L02、Lab01、Lab02、HW01和HW02使用2026T1材料;Lab02原PDF未印学期,按当期单元归类。L03–L06、L08–L15使用2022未核历史讲义,适合概念预习;T01–T12为2025T2(2026春)历史辅导,个别封面日期冲突在正文说明。L07缺原件,不补造一讲。历史作业日期、环境规格、评分规则不自动沿用到2026T1。
原PPT、PDF与教师代码包保留本地,网页展示的是学习解释。正文中原件链接用于说明出处,不表示课件已公开下载。题型证据区分直接题目、讲义说明与通识训练,不把历史考过说成本学期必考。
从哪里开始
| 你现在遇到的问题 | 先读什么 | 读完应能独立解释什么 |
|---|---|---|
| 不清楚OS究竟管理什么 | 课程介绍 → 概览 | 一个文件求和程序怎样跨越接口、存储、调度、内存与并发 |
| fork后有几份变量、谁在运行 | 进程 → T03管道 | 父子执行位置、exec成功/失败路径、wait回收 |
| 指针、数组和free混淆 | 内存API → Lab02逐页 | 对象大小、存储期、别名、首次非法访问 |
| 输出重定向或EOF卡住 | 文件与目录 → HW01详解 | 描述符表、打开对象、所有端点引用与等待依赖 |
| 不明白文件在磁盘上怎样找 | 文件系统实现 → FAT | 目录查名、inode/索引或FAT查块、字节偏移和容量 |
| 不会画调度表 | 调度入门 → MLFQ → T07逐步表 | 到达、片到期、预算、提升分别改变哪个状态 |
| 地址位数与页表总算错 | 地址空间 → 分页 → T10按字编址 | 地址单位、各级索引、页内偏移与最终数据地址 |
| 多线程偶尔正确、偶尔挂住 | 线程竞争 → 条件变量 → 并发故障 | 不变量、wait释放锁、通知对象、死锁等待环 |
按顺序学完所有 Lecture
第一次学建议依次走完下面六段。同一讲拆成多个 Part 时按 P1、P2、P3、P4 顺读;不要因为已经会算例题就跳过题目前面的假设。每次读完一小节,先合上答案自己画一次状态,再继续下一节。
| 阶段 | Lecture 顺序 | 这一段必须能自己做出来的事 | 配套练习 |
|---|---|---|---|
| 1.建立执行模型 | L00 → L01 | 区分程序、进程、线程;逐条说明 load/add/store 为什么会丢失一次更新 | L01 两线程 50→51 的逐页过程 |
| 2.从 C 程序请求 OS 服务 | L02 → L03 → L04 | 画 fork 分支、对象寿命和描述符引用;解释 exec、wait、EOF、链接和 rename | T03、Lab02 |
| 3.追到磁盘与设备 | L05 → L06 | 从路径查 inode,从文件偏移查数据块;沿请求队列解释驱动怎样等待并被唤醒 | HW02、T11、T12 |
| 4.决定 CPU 先给谁 | L08 P1 → P2 → P3 → P4 | 区分周转与响应;按到达、片长、预算和提升事件逐段排队;说明多核共享队列的竞争 | T07 |
| 5.把虚拟地址变成实际访问 | L09 P1 → P2 → L10 P1 → P2 → L11 P1 → P2 → L12 | 写清地址单位和位划分;分别算页表项地址、表项内容、最终物理地址;区分 TLB miss、缺页与非法访问 | T09、T10 |
| 6.让共享状态按规则改变 | L13 P1 → P2 → L14 P1 → P2 → L15 P1 → P2 | 构造错误交错,再用锁、条件变量或信号量解释怎样排除;区分工作完成通知、线程终止与资源回收 | T04、T05、T06 |
L07 目前没有原件,所以从 L06 接 L08;这里没有把缺讲隐去或自行编造。历史 Tutorial 的试题可用于练机制,当前课程的要求仍看当期材料。读到原课件代码的拼写、作用域或同步错误时,先看紧邻的说明:原样片段帮助理解老师讲什么,明确标注的修正才说明应怎样改。
动手学习的入口
- 编译基础:Lab01环境 → GCC与Makefile。先确定命令在哪个系统和目录执行,再区分编译、链接与运行错误。
- C与文件读取:Lab02逐页伴读 → 操作教程。2026-09-26公告已允许stdio或POSIX两套文件I/O路线,只交exercise.c,不改Makefile;最终以该任务的当期公告为准。
- 独立挑战Shell:HW01分级提示。先自己画参数与资源状态,卡住再开下一层;完整解析链接另行收起,避免误看答案。
- 文件系统题解:HW02 详细解析,逐问解释文件块映射、目录项与路径遍历。
- 对照具体解释:HW01进程与管道详读展示原教程、描述符接线与官方样例过程;它与提示版用途不同。
怎样判断自己真的理解了
读数值题时先遮住结果,写清单位和假设,再按事件逐行更新状态;最后用守恒关系反查,但别把总量正确当成每步正确。读程序时分开记录“对象有几份、谁有引用、谁能修改、何时失效”,既走成功路径也走一个失败路径。读并发时主动构造一次会打断检查与使用的交错,说明同步协议怎样挡住它。正文中的折叠自测供你先回答再对照,不必一开始全部展开。
下面保留逐单元版本与原页码,适合对照讲义查阅。分Part并不改变原课件主题顺序。
| 单元 | 版本 | 页数 | 伴读 |
|---|---|---|---|
| L00 | 2026T1 | 12 | L00-课程介绍 |
| L01 | 2026T1 | 50 | L01-课程概览 |
| L02 | 2026T1 | 22 | L02-系统调用-进程 |
| L03 | 2022未核 | 17 | L03-系统调用-内存 |
| L04 | 2022未核 | 48 | L04-系统调用-文件与目录 |
| L05 | 2022未核 | 28 | L05-文件系统实现 |
| L06 | 2022未核 | 26 | L06-IO设备 |
| L08 | 2022未核 | 64 | L08-P1-调度入门、L08-P2-多级反馈队列、L08-P3-比例份额、L08-P4-多处理器调度 |
| L09 | 2022未核 | 45 | L09-P1-地址空间、L09-P2-地址转换 |
| L10 | 2022未核 | 33 | L10-P1-分段、L10-P2-分页 |
| L11 | 2022未核 | 40 | L11-P1-TLB、L11-P2-高级分页 |
| L12 | 2022未核 | 18 | L12-交换空间与缺页 |
| L13 | 2022未核 | 51 | L13-P1-线程与竞争、L13-P2-线程API |
| L14 | 2022未核 | 52 | L14-P1-锁的实现、L14-P2-条件变量 |
| L15 | 2022未核 | 55 | L15-P1-信号量、L15-P2-并发故障 |
| Lab02 | 当期单元,封面未印学期 | 16 | C内存与文件IO、操作教程 |
| HW01 | 2026T1 | 教程4页、图解1页、题目1页 | 分级提示、进程与管道详读 |
| Lab01 | 2026T1 | 22 | Lab01-P1-环境配置、Lab01-P2-GCC与Makefile |
| T01 | 2025T2(2026春) | 16 | T01-Linux与C基础 |
| T02 | 2025T2(2026春) | 17 | T02-Shell行为与框架 |
| T03 | 2025T2(2026春) | 13 | T03-系统调用与管道 |
| T04 | 2025T2(2026春) | 14 | T04-pthread与读写锁 |
| T05 | 2025T2(2026春) | 20 | T05-条件变量与屏障 |
| T06 | 2025T2(2026春) | 21 | T06-进程间信号量 |
| T07 | 2025T2(2026春) | 45 | T07-MLFQ逐步演算 |
| T08 | 2025T2(2026春) | 24 | T08-期中题与解答核验 |
| T09 | 2025T2(2026春) | 14 | T09-换页算法演算 |
| T10 | 2025T2(2026春) | 10 | T10-分页地址转换 |
| T11 | 2025T2(2026春) | 21 | T11-文件系统API |
| T12 | 2025T2(2026春) | 16 | T12-FAT文件系统 |
各单元原件与页码
页码均是对应PDF副本的页号。每份按原课件顺序展开;分Part的范围连续衔接。
L00 · 2026T1
原件(本地课件) · 页码来源(本地课件),共12页。
- L00-课程介绍:p.1–12
L01 · 2026T1
原件(本地课件) · 页码来源(本地课件),共50页。
- L01-课程概览:p.1–50
L02 · 2026T1
原件(本地课件) · 页码来源(本地课件),共22页。
- L02-系统调用-进程:p.1–22
L03 · 2022未核
原件(本地课件) · 页码来源(本地课件),共17页。
- L03-系统调用-内存:p.1–17
L04 · 2022未核
原件(本地课件) · 页码来源(本地课件),共48页。
- L04-系统调用-文件与目录:p.1–48
L05 · 2022未核
原件(本地课件) · 页码来源(本地课件),共28页。
- L05-文件系统实现:p.1–28
L06 · 2022未核
原件(本地课件) · 页码来源(本地课件),共26页。
- L06-IO设备:p.1–26
L08 · 2022未核
原件(本地课件) · 页码来源(本地课件),共64页。
- L08-P1-调度入门:p.1–18
- L08-P2-多级反馈队列:p.19–33
- L08-P3-比例份额:p.34–44
- L08-P4-多处理器调度:p.45–64
L09 · 2022未核
原件(本地课件) · 页码来源(本地课件),共45页。
- L09-P1-地址空间:p.1–14
- L09-P2-地址转换:p.15–45
L10 · 2022未核
原件(本地课件) · 页码来源(本地课件),共33页。
L11 · 2022未核
原件(本地课件) · 页码来源(本地课件),共40页。
- L11-P1-TLB:p.1–18
- L11-P2-高级分页:p.19–40
L12 · 2022未核
原件(本地课件) · 页码来源(本地课件),共18页。
- L12-交换空间与缺页:p.1–18
L13 · 2022未核
原件(本地课件) · 页码来源(本地课件),共51页。
- L13-P1-线程与竞争:p.1–37
- L13-P2-线程API:p.38–51
L14 · 2022未核
原件(本地课件) · 页码来源(本地课件),共52页。
- L14-P1-锁的实现:p.1–19
- L14-P2-条件变量:p.20–52
L15 · 2022未核
原件(本地课件) · 页码来源(本地课件),共55页。
- L15-P1-信号量:p.1–30
- L15-P2-并发故障:p.31–55
Lab01 · 2026T1
原件(本地课件) · 页码来源(本地课件),共22页。
- Lab01-P1-环境配置:p.1–14
- Lab01-P2-GCC与Makefile:p.15–22
T01 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共16页。
- T01-Linux与C基础:p.1–16
T02 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共17页。
- T02-Shell行为与框架:p.1–17
T03 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共13页。
- T03-系统调用与管道:p.1–13
T04 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共14页。
- T04-pthread与读写锁:p.1–14
T05 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共20页。
- T05-条件变量与屏障:p.1–20
T06 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共21页。
- T06-进程间信号量:p.1–21
T07 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共45页。
- T07-MLFQ逐步演算:p.1–45
T08 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共24页。
- T08-期中题与解答核验:p.1–24
T09 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共14页。
- T09-换页算法演算:p.1–14
T10 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共10页。
- T10-分页地址转换:p.1–10
T11 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共21页。
- T11-文件系统API:p.1–21
T12 · 2025T2(2026春)
原件(本地课件) · 页码来源(本地课件),共16页。
- T12-FAT文件系统:p.1–16