Skip to content

Repository files navigation

THU Operating Systems Sample Code Repository

清华大学操作系统课程 —— 样本代码仓库

C++ Standard

简介

本仓库基于 Operating Systems: Three Easy Pieces (OSTEP) 体系构建,提供 C++ 版本 (36 文件) + C 版本 (12 文件) = 共 48 个完整可运行实现,涵盖 12 章、4 大知识领域。C 版本使用 POSIX 原生 API (pthread, semaphore, fork, mmap),更贴近 Linux 内核实际代码风格。适合:

  • 清华操作系统课程的学习者
  • 408/826 计算机考研复习
  • 进程调度/同步/内存/文件系统的实践理解
  • 系统编程方向的面试准备

仓库结构 (4 部 12 章)

os/
├── Hello.cpp                              # 仓库入口
│
╔══ Part I: CPU虚拟化 (01-03) — 进程/调度/并发 ═══════════════════════════╗
║                                                                        ║
├── 01_processes/                          # 进程抽象
│   ├── process_model.cpp                  #   进程模型 & PCB
│   ├── context_switch.cpp                 #   上下文切换开销分析
│   └── fork_exec.cpp                      #   fork/exec + COW + Shell重定向
│
├── 02_scheduling/                         # CPU调度
│   ├── scheduling_basic.cpp               #   FCFS/SJF/STCF/Round-Robin
│   ├── mlfq.cpp                           #   多级反馈队列 (MLFQ) 模拟器
│   └── cfs_simulator.cpp                  #   Linux CFS 完全公平调度模拟
│
├── 03_concurrency/                        # 并发与线程
│   ├── threads_intro.cpp                  #   线程模型 (1:1/N:1/M:N)
│   ├── race_condition.cpp                 #   竞态条件 & counter++ 分析
│   ├── mutex_impl.cpp                     #   自旋锁/Ticket锁/Futex性能对比
│   └── condition_variable.cpp             #   条件变量 & 生产者-消费者
║                                                                        ║
╚══════════════════════════════════════════════════════════════════════════╝

╔══ Part II: 同步机制 (04-06) — 锁/信号量/死锁 ═══════════════════════════╗
║                                                                        ║
├── 04_locks/                              # 锁的实现
│   ├── spinlock_ticket.cpp                #   TAS/TTAS/Ticket/MCS 锁对比
│   └── futex.cpp                          #   Linux Futex 快/慢路径
│
├── 05_semaphores/                         # 信号量与经典问题
│   ├── semaphore_impl.cpp                 #   信号量实现 (mutex+condvar)
│   ├── readers_writers.cpp                #   读者-写者问题
│   └── dining_philosophers.cpp            #   哲学家就餐 (死锁预防)
│
├── 06_deadlock/                           # 死锁
│   ├── deadlock_detection.cpp             #   等待图 DFS 环检测
│   └── bankers_algorithm.cpp              #   银行家算法 (安全状态检查)
║                                                                        ║
╚══════════════════════════════════════════════════════════════════════════╝

╔══ Part III: 内存管理 (07-09) — 虚拟内存/分页/分配器 ════════════════════╗
║                                                                        ║
├── 07_virtual_memory/                     # 虚拟内存
│   ├── address_spaces.cpp                 #   地址空间布局 & ASLR
│   ├── segmentation.cpp                   #   分段 (基址+界限)
│   └── page_table_walk.cpp                #   页表遍历 (VA→PTE→PA)
│
├── 08_paging/                             # 页面管理
│   ├── page_replacement.cpp               #   OPT/LRU/Clock 替换算法
│   ├── working_set.cpp                    #   工作集模型 & Thrashing
│   └── swap_system.cpp                    #   Swap/zram/zswap
│
├── 09_allocation/                         # 内存分配
│   ├── malloc_free.cpp                    #   malloc 实现 (First Fit)
│   ├── fragmentation.cpp                  #   碎片分析 (内部/外部)
│   └── buddy_system.cpp                   #   Linux 伙伴系统
║                                                                        ║
╚══════════════════════════════════════════════════════════════════════════╝

╔══ Part IV: 存储系统 (10-12) — 文件系统/IO/高级主题 ═════════════════════╗
║                                                                        ║
├── 10_file_systems/                       # 文件系统
│   ├── file_system_basics.cpp             #   Inode/目录/硬链接/符号链接
│   ├── fat_inode.cpp                      #   FAT vs Inode 实现对比
│   └── journaling.cpp                     #   日志文件系统 (ext4 ordered)
│
├── 11_io_disks/                           # I/O与磁盘
│   ├── disk_scheduling.cpp                #   FCFS/SSTF/SCAN 磁盘调度
│   ├── raid.cpp                           #   RAID 0/1/5/6/10 模拟
│   └── io_stack.cpp                       #   Linux I/O Stack (VFS→Block→NVMe)
│
├── 12_advanced/                           # 高级主题
│   ├── virtualization.cpp                 #   虚拟化 & 容器 (VM/Namespace/Cgroups)
│   ├── microkernel.cpp                    #   微内核 vs 单内核
│   └── linux_syscalls.cpp                 #   系统调用开销 & vDSO
║                                                                        ║
╚══════════════════════════════════════════════════════════════════════════╝

快速开始

# 注意: 多线程文件需链接 pthread
g++ -std=c++17 03_concurrency/race_condition.cpp -o race -lpthread
./race

# 单线程文件
g++ -std=c++17 01_processes/process_model.cpp -o proc
./proc

各章核心内容速查

Part 章节 核心内容
I 进程 PCB、上下文切换、fork/exec/COW
I 调度 FCFS/SJF/RR/MLFQ/Linux CFS
I 并发 线程、竞态、自旋锁/mutex/futex、条件变量
II TAS/TTAS/Ticket/MCS、Futex快慢路径
II 同步 信号量、生产者-消费者、读者-写者、哲学家就餐
II 死锁 等待图检测、银行家算法
III 虚拟内存 地址空间/ASLR、分段、页表遍历
III 分页 OPT/LRU/Clock、工作集/Thrashing、Swap
III 分配 malloc实现、碎片、伙伴系统
IV 文件系统 Inode/FAT、硬链接/符号链接、日志
IV I/O磁盘 磁盘调度、RAID、Linux I/O栈
IV 高级 虚拟化/容器、微内核、系统调用性能

C 版本 (POSIX 原生)

c/ 目录下提供 12 个 C 语言实现,每个对应一章的核心概念,使用原生 POSIX API:

章节 C 文件 关键 API
进程 c/01_processes/process_model.c fork, waitpid, WIFEXITED
调度 c/02_scheduling/scheduling.c 纯算法 (数组+循环)
并发 c/03_concurrency/race_condition.c pthread, _sync*, C11 atomic
c/04_locks/futex_spinlock.c futex syscall, C11 spinlock
信号量 c/05_semaphores/posix_semaphore.c sem_init, sem_wait, sem_post
死锁 c/06_deadlock/bankers.c 纯算法 (2D数组)
虚拟内存 c/07_virtual_memory/page_table.c mmap, mprotect, 位操作
分页 c/08_paging/page_replace.c 纯算法 (OPT/LRU/Clock)
分配器 c/09_allocation/malloc_impl.c sbrk, 指针运算
文件系统 c/10_file_systems/simple_fs.c struct inode, dirent
磁盘 c/11_io_disks/disk_sched.c qsort, 数组操作
高级 c/12_advanced/syscall_bench.c syscall(), vDSO
# 编译 C 版本 (部分需要 -lpthread)
gcc -std=c11 -o prog c/01_processes/process_model.c
gcc -std=c11 -o race c/03_concurrency/race_condition.c -lpthread

参考资料

构建说明

本仓库由以下 AI 协作完成:

  • 代码架构与实现: Claude (Anthropic)
  • 推理引擎: DeepSeek V4 Pro (1M 上下文)

所有代码经人工审查确认,AI 工具仅作为生产力辅助。

许可

MIT License

About

清华操作系统课程 | 12章36文件 | 进程调度/同步/内存管理/文件系统 C++ 实现 | 基于 OSTEP 教材

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages