Skip to content

Repository files navigation

English | 中文

操作系统 —— 系统编程与 xv6 内核项目

一句话总结: 在 xv6 教学内核中用 C 语言实现了自定义系统调用、按比例分配 CPU 的(lottery/stride)调度器、带惰性分配与写时复制 forkmmap 式内存映射, 以及一个支持 RAID 的 FUSE 文件系统。

一个由六个项目组成的渐进序列,从底层 C 系统编程一路深入到 xv6 教学操作系统的内核 功能,再到基于 FUSE 的文件系统。整体覆盖了现代操作系统课程的大部分核心:系统调用、 进程控制、CPU 调度、虚拟内存、文件系统。

本仓库为本科操作系统课程(UW–Madison CS537)的项目代码。文件夹保留 p1p6 的 原始命名以对应作业历史;下表说明每个项目实际实现了什么。

技术栈: C · x86 汇编 · xv6 内核 · FUSE · GNU Make · Unix 进程 API


项目总览

# 文件夹 项目 我实现了什么 核心 OS 概念
1 01-letter-boxed Letter-Boxed 求解器 一个 C 命令行程序,针对给定棋盘与字典校验 Letter Boxed 单词谜题的解答链。 C 系统编程、文件 I/O、命令行参数解析、字符串处理
2 02-xv6-syscall 自定义 xv6 系统调用 给 xv6 内核新增 getparentname 系统调用,打通用户态/内核态完整链路。 系统调用机制、用户/内核态切换、陷入(trap)
3 03-wsh-shell wsh —— Unix Shell 约 900 行的 shell,支持 fork/exec/wait、管道、I/O 重定向、shell 变量、history 环形缓冲,以及 cd/export/local/vars 等内建命令。 进程创建、管道、重定向、环境管理
4 04-scheduler Lottery & Stride 调度器 用按比例分配的 lottery + stride 调度替换 xv6 默认的 round-robin,并新增 settickets/getpinfo 系统调用与 pstat 测量接口。 CPU 调度、调度公平性、内核数据结构
5 05-mmap 内存映射(wmap 实现 mmap 式内存映射(wmap/wunmap/va2pa/getwmapinfo),含惰性分配、由缺页中断驱动的页填充,以及写时复制 fork 虚拟内存、页表、惰性分配、缺页中断、COW
6 06-wfs-filesystem WFS —— RAID 文件系统 一个 FUSE 文件系统,含磁盘上的超级块/位图/inode、直接块 + 间接块、目录、mkfs 格式化工具,并支持跨多块磁盘镜像的 RAID 0/1 文件系统设计、inode、磁盘布局、RAID、FUSE

几个值得细看的亮点

  • p4 —— 用数据说话的调度公平性。 仓库内含从运行内核中采集的真实每进程运行时间轨迹 (stride_process_stats.csvrr_process_stats.csv),直观展示 stride 调度如何按 ticket 数量成比例分配 CPU 时间,对比 round-robin 下与 ticket 无关的更平均分布。
  • p5 —— 惰性分配 + 写时复制。 映射建立时不预分配任何物理页;首次访问时由缺页 中断处理程序填充,fork 后父子共享页面,直到写入才复制。
  • p6 —— RAID 存储。 mkfs 跨多块磁盘镜像格式化,文件系统支持 RAID 0(条带化) 与 RAID 1(镜像)。

编译与运行

每个项目自带 Makefile,编译与运行说明见各自的 README。基于 xv6 的项目(p2、p4、p5) 在 QEMU 中启动;p6 通过 FUSE 挂载。

学术诚信: 这是已完成课程的参考/作品集代码。如果你正在修读类似课程,请不要照抄—— 用它来理解概念,而不是用来提交作业。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages