- 已编辑
MIT6.S081 Operating System Engineering (Fall 2020)
前置课程:
- MIT6.004 Computation Structures | 计算架构
2021-10-24更新:因为已经通关了,更新一下贴子,添加更多的课程介绍和资源,给后来想刷的同学指指路
课程介绍
MIT6.S081 Operating System Engineering 是麻省理工学院计算机科学本科的中级课程,前身是 MIT6.828 研究生课程。
课程基于 RISCV 架构以及类 unix 操作系统 xv6,介绍了操作系统最重要的几个基本概念,以及操作系统如何提供抽象、隔离、调度、资源管理,以及为上层应用程序提供服务。
Lab 作业几乎都是利用所学到的理论知识,为 xv6 操作系统添加新功能与改进。每个 lab 都带有自动评测功能。
课程资源
时间表:https://pdos.csail.mit.edu/6.S081/2020/schedule.html
为了方便后来的同学们,收集了一些中文资源:
课程翻译:https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/
中文字幕:https://www.bilibili.com/video/BV19k4y1C7kA/
(2021-10-29 update: 以上资源是 2020 秋学期的,2021 秋学期的 6.s081 已经出来了,在 https://pdos.csail.mit.edu/6.828/2021/schedule.html,但是粗看了一下变化不大,lab除了少了一个lazy page allocation以外就是调换了顺序,建议暂时可以学习2020年版的,资源较多)
Lab 指引
官方难度参考:
easy:小于 1 小时。通常是为后续练习的热身
moderate:1~2 小时。
hard:大于 2 小时,通常这些练习不需要写很多行代码, 但是要把代码写对很难
“个人耗时”是我个人在做这个 lab 的时候所用的时间,包含了研究、阅读代码、编码与调试全过程。
Lab1 - Unix utilities|Unix 实用工具:
目标简述: 实现几个用户态程序及 unix 实用工具,熟悉 xv6 的开发环境以及系统调用的使用。
实验难度:3 easy,
3 moderate
个人耗时: 4 小时
参考解答: (2021-09-06) https://juejin.cn/post/7005116617478668296Lab2 - System calls|系统调用:
目标简述: 添加 syscall 跟踪,以及添加新的系统调用 sysinfo,帮助加深对 xv6 内核的理解。
实验难度:2 moderate
个人耗时: 4 小时
参考解答: (2021-09-09) https://juejin.cn/post/7006016963029762056Lab3 - Page tables|页表:
目标简述: 探索页表,为每个进程维护独立的内核页表;修改页表以简化从用户态拷贝数据到内核态的方法。
(难点:理解进程页表、内核页表概念)
实验难度:1 easy,
2 hard
个人耗时: 19 小时
参考解答: (2021-09-13) https://juejin.cn/post/7008487319976017928Lab4 - Traps|中断陷阱:
目标简述: 探索中断以及中断处理机制(trap、trampoline、函数调用、现场保存、页表/特权切换、调用栈、栈指针及返回指针)
(注:本 lab 并不非常难,重要的是理解 lecture5 与 lecture6 中的概念)
实验难度:1 easy,
1 moderate,
1 hard
个人耗时: 8小时
参考解答: (2021-09-22) https://juejin.cn/post/7010653349024366606Lab5 - Lazy allocation|内存页懒分配:
目标简述: 实现内存页懒分配机制,在调用 sbrk() 的时候,不立即分配内存,而是只作记录。在访问到这一部分内存页并触发缺页异常的时候才进行实际的物理内存分配。
实验难度:1 easy,
2 moderate
个人耗时: 5小时
参考解答: (2021-10-01) https://juejin.cn/post/7013843036996108325Lab6 - Copy-on-write fork|fork 懒拷贝:
目标简述: 实现 fork 懒复制机制,在进程 fork 后,与父进程共享物理内存页。在任一方尝试对内存页进行修改时,才对内存页进行复制。
实验难度:1 hard
个人耗时: 4小时
参考解答: (2021-10-05) https://juejin.cn/post/7015477978666631182Lab7 - Multithreading|多线程:
目标简述: 实现一个用户态的线程库;尝试使用线程来为程序提速;实现一个同步屏障
实验难度:3 moderate
个人耗时: 3 小时
参考解答: (2021-10-06) https://juejin.cn/post/7016228101717753886Lab8 - Parallelism/Locking|并发与锁:
目标简述: 重新设计并发代码以降低锁竞争,提高在多核系统上的性能。
实验难度:1 moderate,
1 hard
个人耗时: 14 小时
(在第二个实验做到无死锁无错误上构思花费了比较多时间,其实本 lab 测试没有那么强,测不出来这些边界情况)
参考解答: (2021-10-14) https://juejin.cn/post/7021218568226209828Lab9 - File System|文件系统:
目标简述: 为 xv6 的文件系统添加大文件以及符号链接支持。
实验难度:2 moderate
个人耗时: 4 小时
参考解答: (2021-10-15) https://juejin.cn/post/7022347989683273765Lab10 - Mmap | 文件内存映射:
目标简述: 实现 *nix 系统调用 mmap 的简单版:支持将文件映射到一片用户虚拟内存区域内,并且支持将对其的修改写回磁盘。
实验难度:1 hard
个人耗时: 6 小时
参考解答: (2021-10-22) https://juejin.cn/post/7022394470419136542Lab11 - Network stack:
目标简述: 熟悉系统驱动与外围设备的交互、内存映射寄存器与 DMA 数据传输,实现与 E1000 网卡交互的核心方法:transmit 与 recv。
(本 lab 的难度主要在于阅读文档以及理解 CPU 与操作系统是如何与外围设备交互的。换言之,更重要的是理解概念以及 lab 已经写好的模版代码的作用。)
实验难度:1 hard
个人耗时: 2 小时
参考解答: (2021-10-24) https://juejin.cn/post/7022441307029110821