花了两个月多的时间,终于把 MIT6.828 的课程跟完了。刚接触这个课程时,就有一种感觉:哇,好神奇! 这个课程真的是循序渐进,一步一步在你的脑海里建立起 OS 的大厦框架。从 Lab1 的手把手教学到 Lab6 的放任你自由,很好地对学生的学习进行了引导。学完这个课程后,你也就拥有了一个属于你自己的完整的内核雏形!
当然这个课程需要一些基础,如汇编语言、操作系统、计算机组成原理以及体系结构等。毕竟操作系统是一门比较底层且考察综合性计算机知识的课程。但这都不是重点,我一直认为,以边学边做的方式来学习一门课程是最好的方式之一(为什么是之一呢,怕被喷…嘻嘻)。只要能坚持下来,最后你会体会到,你已经能从一个与之前完全不同的角度理解计算机!现在微内核概念这么火,鸿蒙就是微内核OS,难道不想从原理上真正理解一下微内核OS吗? 没错,6.828 这个课程就是引导我们实现了一个微内核操作系统。
没想到这个内容能被这么多人看到,还挺激动的。不过点赞收藏 1:5 是什么情况,大家不要收藏退出一气呵成啊~如果真的对计算机底层比较感兴趣的话,一定要去 try 一下啊!
1. 简介
课程评价:神级课程——要是早遇到,我还会是这种 five(废物) 系列
课程网址:6.828: Operating System Engineering,一直跟着其 schedule 走就可以啦。
xv6 讲义:a simple, Unix-like teaching operating system,讲义中会将每个部分的实现讲得十分详细,在代码编写时遇到不太清晰的概念时,可以多参考讲义。
我的实现环境: – VMware Workstation虚拟机 – Ubuntu16.04 – qemu,最好使用 MIT 给的 patch 版本(Lab6 用到 pacth 版本的qemu 较多)。安装方法也可参考Tools Used in 6.828 链接 – 工具链 Tools Used in 6.828
环境搭建网络上教程很多,这里我就不再赘述,直接给出别的大佬写的教程:MIT-6.828-JOS-环境搭建
2. Xv6
学习6.828时,你会发现经常遇到 xv6 和 JOS这两个名词,不明白它们两者之间的关系,在完成实验时思路就会不是很清晰。xv6 是一个类Unix的教学操作系统,而 JOS 是在xv6的基础上改写,让我们能在其上进行实验的 OS。 所以实际上,当我们遇到不会实现的问题时,可以去参考 xv6 相应部分的源码。
Homework 实现:完整实现代码。Github_SmallPond/MIT6.828_OS
- MIT6.828_Homework_Shell_MIT_6.828
- MIT6.828_HW2_Boot_xv6_MIT6.828
- MIT6.828_HW3_XV6 System calls
- MIT6.828_HW4_xv6 lazy page allocation
- MIT6.828_HW5_xv6 CPU alarm
- MIT6.828_HW6_Threads and Locking
- MIT6.828_HW7_xv6 locking
- MIT6.828_HW8_User-level threads
- MIT6.828_HW9_barriers
- MIT6.828_HW10_Bigger file for xv6
- MIT6.828_HW11_xv6 log
3. JOS
以下是我实验过程中记下的笔记,包含我的实现思路以及代码。 不过有些重复的细节,我就没有记录,可以参考我的完整实现代码。Github_SmallPond/MIT6.828_OS
- Lab1 Booting a PC
- LAB_1_Part1_PC Bootstrap
- LAB_1_Part2_The Boot Loader
- LAB1_Part3_The Kernel
- Lab2 Memory management
- LAB2_Part1_Physical Page Management
- LAB2_Part2_Virtual Memory
- LAB2_Part3_Kernel Address Space(内核地址空间)
- Lab3 User-Level Environments
- LAB3_User-Level Environments_PartA_User Environments and Exception Handling
- LAB3_User-Level Environments_PartB Page Faults, Breakpoints Exceptions, and System Calls
- Lab4 Preemptive Multitasking_
- LAB4_Preemptive Multitasking_PartA Multiprocessor Support and Cooperative Multitasking
- LAB4_Preemptive Multitasking_PartB Copy-on-Write Fork
- LAB4_Preemptive Multitasking_PartC Preemptive Multitasking and IPC
- Lab5 File system, Spawn and Shell
- Lab5_File system, Spawn and Shell
- Lab6 Network Driver
- Lab6_Network Driver
4. 参考文献
- MIT 6.828 JOS 操作系统学习笔记/fatsheep9146,刚入门时参考,包括环境搭建。博文写得十分详细,可惜貌似只写到了 Lab2。
- clpsz/mit-jos-2014,此大神放出了自己到 Lab4 的代码,其文档提及了一些细节,很有帮助。
- Unknown Unknown,过程较详细(相当于对官方文档做了一遍翻译),英语不好可以参考这边,但我还是建议以官方文档为主,毕竟英语还是要学好呀。这位大神做到了LAB5,但不包括HW。
- bysui的博客, 这位大神完成了全部的实验,但是我在后面才发现这么好的资源!
我的课程能顺利完成,少不了各位大佬记录下的实验过程,由衷感谢以上各位大神。同时希望我也能帮到后来的学习者~