全部项目
Project进行中

MIT 6.1810 · 操作系统课程实验

基于 RISC-V xv6 开展操作系统课程实验,独立配置 macOS 调试环境,逐步实现用户程序并记录源码阅读与调试过程。

里程碑

3 个关键节点
  1. 阶段记录

    实现 sleep 与 memdump 用户程序

    编写休眠命令和按格式读取内存的程序,练习系统调用与 C 指针操作。

  2. 阶段记录

    实现 find 用户程序

    递归遍历目录并匹配文件名,同时调整本地调试配置。

目标与背景

操作系统课本里的进程调度、页表映射、系统调用和文件系统概念往往比较抽象,只看书很容易停留在表面。这个项目用来记录我跟学 MIT 6.1810(Operating System Engineering)课程的过程——基于教学系统 RISC-V xv6 阅读内核源码、完成配套实验,把抽象机制一步步对应到真实的 C 与汇编代码上。

我的工作

我在自己的 Mac(Apple Silicon)上独立搭起了完整的交叉编译与调试环境,基于课程官方仓库推进实验开发,并把每次做实验时踩到的坑、源码走读和 GDB 调试过程整理成博客笔记。

开发环境包含 RISC-V GNU 交叉工具链、QEMU 虚拟机、交叉版 GDB 以及 Neovim 的 clangd / nvim-dap 插件配置,基础搭建步骤记录在 macOS 下环境准备与 xv6 源码运行 中。

已完成的实验内容

目前已经完成了 Lab Utilities 阶段的几个用户态程序练习:

  • sleep:解析命令行参数并调用 sleep 系统调用让进程休眠,熟悉用户态程序如何跨越边界进入内核。
  • memdump:按给定的格式控制串解析内存缓冲区中的整数、指针、字符与字符串,练熟 C 语言里的指针步进、强制类型转换与内存字节布局。
  • find:打开目录文件并循环读取 dirent 目录项,跳过 . 与 .. 递归遍历子目录,打印匹配目标文件名的路径,把 open、fstat、read 和文件系统目录结构串起来。

方案与取舍

日常运行和排错主要靠 QEMU 配合 GDB 远程调试。刚开始追踪内核启动或单个系统调用路径时,我会使用 CPUS=1 单核参数启动虚拟机,先排除多核并发中断的干扰把主干流程看明白;调试具体用户程序时再手动补载对应二进制的符号表,让编辑器的断点能准确停在用户态代码上。

写学习笔记时,我也尽量不照抄实验指导书,而是顺着“程序入口 → 系统调用陷入 → 内核数据结构变化”的顺序去记,顺手把调试时观察到的真实寄存器和内存状态留作参考。

当前进度与下一步计划

现阶段已经跑通了整套编译调试工作流和基础工具实验;回看前几个小程序的代码,也暴露出了一些 C 语言系统编程细节(比如固定长度目录项的字符串结尾处理、递归路径缓冲区长度检查以及错误分支的 fd 回收),后续会一边补齐边界处理,一边继续往系统调用、页表(Page Tables)和陷阱机制(Traps)等核心内核实验推进。

站内搜索

找到你感兴趣的内容

文章分类
选择文章分类,匹配任意一个所选分类

多选时显示属于任一所选分类的文章。

文章标签
选择文章标签,多个标签需同时包含

多选时只显示同时包含所选标签的文章。

输入关键词开始搜索