## 参考资料
参考思路:
https://blog.miigon.net/categories/mit6-s081/
MIT 6.S081 2020 操作系统 实验环境搭配详解及问题处理 - 北海草鱼的文章 - 知乎
https://zhuanlan.zhihu.com/p/331492444
MIT6.828- 神级 OS 课程 - 要是早遇到,我还会是这种 five 系列 - 一丁点儿的文章 - 知乎
https://zhuanlan.zhihu.com/p/74028717
notebook:
https://notebooklm.google.com/notebook/0d26bbfc-c5d1-4ff3-9bb0-3823aa2d956c?_gl=1*1j7d54k*_ga*MTk1MTE0NzAxMC4xNzI3NTc3NTUw*_ga_W0LDH41ZCB*MTczMzkyNDYzMC4yLjEuMTczMzkyNDYzMC42MC4wLjA.
参考书籍:
https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf
参考代码:
https://github.com/PKUFlyingPig/MIT6.S081-2020fall
课程原视频:
https://www.youtube.com/watch?v=J3LCzufEYt0&list=PLTsf9UeqkReZHXWY9yJvTwLJWYYPcKEqK
官方地址:
https://pdos.csail.mit.edu/6.S081/2020/
## Lab
| Lab | Tasks |
| ------------------------ | ------------------------------------------------------------------------ |
| [[Lab1 Unix utilities]] | • 实现基本的Unix工具(如sleep, find, ping-pong等)<br>• 熟悉xv6系统调用<br>• 初步了解Unix系统编程 |
| [[Lab2 System calls]] | • 添加系统调用到xv6<br>• 实现trace和sysinfo系统调用<br>• 理解系统调用机制 |
| [[Lab3 Page tables]] | • 实现页表相关功能<br>• 添加物理页面的分配追踪<br>• 实现用户页面访问权限控制 |
| [[Lab4 traps]] | • 实现RISC-V汇编陷阱处理<br>• 实现时钟中断<br>• RISC-V的陷阱机制 |
| [[Lab5 Lazy allocation]] | • 实现延迟页面分配<br>• 处理页面错误<br>• 优化内存使用 |
| [[Lab6 Copy on Write]] | • 实现写时复制fork<br>• 优化进程创建<br>• 实现页面引用计数 |
| [[Lab7 Multithreading]] | • 实现用户级线程<br>• 实现线程切换<br>• 实现线程同步原语 |
| [[Lab8 Lock]] | • 实现自旋锁和睡眠锁<br>• 提高并行性<br>• 减少锁竞争 |
| [[Lab9 File system]] | • 实现大文件支持<br>• 实现符号链接<br>• 优化文件系统性能 |
| [[Lab10 mmap]] | • 实现mmap系统调用<br>• 实现内存映射文件<br>• 处理页面错误 |
| [[Lab11 Network Driver]] | • 实现网络设备驱动<br>• 实现网络数据包收发<br>• 了解设备驱动编程 |
## 常用命令
```shell
cd /Users/liuyishou/usr/projects/MIT6.S081-2020fall
make qemu // 启动虚拟机
make grade // 打分
// 虚拟机里只有 python3
python3 ./grade-lab-util sleep
```
## 配环境

| 命令行 | 作用 | 说明 |
|:------------------------------------------------------------------------------------------------------------------------- |:------------------------ |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu` | 安装基础编译与开发工具链 | 通过 APT 包管理器以管理员权限(sudo)安装:<br>- **git**:版本控制工具<br>- **build-essential**:编译所需的基础工具(如 gcc、g++、make)<br>- **gdb-multiarch**:支持多种架构的 GDB 调试器<br>- **qemu-system-misc**:QEMU 仿真器的一组工具,用于模拟多种硬件架构<br>- **gcc-riscv64-linux-gnu**:RISC-V 架构交叉编译的编译器<br>- **binutils-riscv64-linux-gnu**:RISC-V 架构的二进制工具集 |
| `sudo apt-get remove qemu-system-misc` | 移除已安装的 qemu-system-misc 包 | 在需要安装特定版本的 QEMU 之前,先移除已有的 qemu-system-misc 版本,以防冲突。|
| `sudo apt-get install qemu-system-misc=1:4.2-3ubuntu6` | 安装指定版本的 qemu-system-misc | 利用 apt-get 安装特定版本(`1:4.2-3ubuntu6`)的 qemu-system-misc,以满足特定的环境要求和依赖关系,确保后续实验顺利运行。|