CS111 操作系统原理 · 开篇与课程概览

目录 · l1 →

数据来源:斯坦福大学 CS111(Spring 2026),讲师 Mendel Rosenblum。 本笔记基于课程公开网站(https://web.stanford.edu/class/cs111/ 及归档站点 cs111.1266)上的公告、课程大纲(Syllabus)、FAQ、考试信息页、全部 9 个作业页面,以及全部 28 讲公开讲义 PDF(Lecture1–Lecture28.pdf)整理编写。 推荐教材:《Operating Systems: Principles and Practice》(2nd Edition),Thomas Anderson & Michael Dahlin。 本文档为个人学习笔记,内容版权归斯坦福大学及其作者所有,仅用于个人学习目的。


课程概览(Course Overview)

1. 课程目标与范围

CS111 是斯坦福大学的操作系统入门课,目标是让学生理解现代操作系统提供的基本设施,并学会”充分利用操作系统与硬件”。课程按主题分为三大板块,最后以若干小主题收尾:

板块内容对应作业
并发(Concurrency)进程与线程、上下文切换、同步、调度、死锁Assign1–Assign4
内存管理(Memory Management)链接、动态存储分配、动态地址翻译、虚拟内存、请求调页Assign5–Assign6
文件系统(File Systems)存储设备、磁盘管理与调度、目录、保护、崩溃恢复Assign7–Assign8
补充主题闪存(Flash Memory)、虚拟机(Virtual Machines)

课程的核心思想(Lecture 28 总结):

  • 虚拟化(Virtualization):把一样东西变成另一样东西,或变成许多个——CPU→线程、存储→文件、主存→地址空间。
  • 并发管理(Managing Concurrency):同步是系统中最难的部分之一。
  • 原子性(Atomicity):让一组操作看起来像一个不可分割的操作——同步、文件系统一致性都依赖它。
  • 局部性(Locality):过去往往能预测未来——调度、TLB、分页、文件缓存都建立在这一假设上。
  • 分层(Layering):用高层抽象隐藏底层复杂细节。

2. 课程结构

  • 授课:周一/周三/周五 11:30AM–12:20PM,Nvidia Auditorium(课程录像通过 Canvas 提供)。
  • Section(习题课):每周 50 分钟,由 CA 带领 10–15 名学生做练习;需在课程网站报名。
  • 作业:9 个个人作业,在 myth 集群(ssh 远程 Linux 工作站)上完成,使用 gcc/g++、make、gdb、valgrind 等工具;作业通常周四 11:59PM 截止。
  • 评分:作业 35% + Section 参与 5% + 课堂参与 5% + 期中 20% + 期末 35%。
  • 考试
    • 期中:5 月 7 日(周四)19:00–21:00,Cemex Auditorium,允许带 2 张双面笔记纸。
    • 期末:6 月 10 日(周三)8:30–11:30,Nvidia Auditorium,允许带 3 张双面笔记纸。
    • 均为闭卷纸笔考试,按座位就座(Academic Integrity Working Group 监考试点)。

3. 课程作业总览(全部有公开页面)

作业主题要点
Assign0Welcome to CS111!熟悉 myth 环境、gdb、sanitycheck/submit 工具;复习 C/C++、STL;读代码 + 写少量代码。无迟交。
Assign1Lambdas, Threads, and Processes用 λ 表达式创建匿名函数;创建线程(同进程内)与进程(fork);实验原子操作对并发行为的影响。
Assign2Synchronizationmonitor 模式实现两个同步问题:Caltrain 乘客上车、派对宾客分组;识别竞态与死锁。
Assign3Thread Dispatcher用户态用 C++ 实现线程机制:在单个系统线程上调度任意多个用户级线程(各自独立栈、定时器中断实现 round-robin)。
Assign4Locks & Condition Variables + Trust在 Assign3 基础上实现 Mutex 和 Condition(单核系统);并回答关于信任的伦理问题。
Assign5Memory-Mapped Encrypted Files把加密文件映射进虚拟地址空间:请求调页——捕获 page fault、按需读页、记录脏页、关闭时回写;用 mprotect 模拟硬件特性。
Assign6Page Replacement with the Clock Algorithm扩展 Assign5,让映射文件可以大于物理内存:实现 Clock 页面置换算法。
Assign7Reading Unix V6 Filesystems用 C 语言实现 Unix V6(1975 年)文件系统读取器:块层 → inode 层 → 文件层。
Assign8Journaling File System用 FUSE 挂载 V6 文件系统:为元数据更新加预写日志(write-ahead log)、用位图替代链表管理空闲块、崩溃后重放日志恢复一致性。无迟交。