
#49 overallEvergreen
6.828 Operating System Engineering
MIT OpenCourseWare
8 recommenders · 9 threads · recommended in 9 years, 2011–2024 · score 11.2
MIT's graduate-level operating systems course built around the xv6 teaching kernel, a Unix v6 reimplementation in ANSI C. Students read xv6 code, answer lecture questions, and complete labs that extend the kernel with features such as virtual memory, processes, and file systems.
Commenters call it one of the best OS courses and say the labs are very hard and very rewarding, with the xv6 codebase praised as small enough to understand fully.
Recommendations by year
20062026
This is site lays out a good plan https://teachyourselfcs.com/
Courses on there can be substituted for equivalents from MIT, eg. https://pdos.csail.mit.edu/6.828/2020/ for the Berkeley OS course. I just worked through that MIT course and the 6.824 Distributed systems (https://pdos.csail.mit.edu/6.824/schedule.html), also listed on that site [[personally, I recommend both of the forementioned classes taught by Robert Morris (also a cofounder of ycombinator)]] Both courses were fully available (lectures,assignments,projects) from the current course sites.
The MIT sites hosted there are incredibly open in general - https://courses.csail.mit.edu/, absolutely amazing institution.
You are welcome.
Please note that the MIT 6.828 is really tough but will turn you into a bad-ass C hacker.
It relies on MIT 6.004 - Computation Structures [1] (has edx mooc [2,3,4]) and MIT 6.033 - Computer Systems Engineering [5] as pre-requisites given that they teach you the fundamentals of computer architecture (digital abstraction, gates, circuits, processors, assembler, memory, cashes, pipelining, virtual memory, interrupts/io, buses, what have you) and system design (basically, managing complexity); they are not programming courses, but I recommend them if you have the time and interest, they are an awesome and principled way of learning the core concepts that you really need to have down before dabbling with OSs.
[1] https://ocw.mit.edu/courses/electrical-engineering-and-compu...
[2] https://courses.edx.org/courses/course-v1:MITx+6.004.1x_3+3T...
[3] https://courses.edx.org/courses/course-v1:MITx+6.004.2x+3T20...
[4] https://courses.edx.org/courses/course-v1:MITx+6.004.3x+2T20...
[5] https://ocw.mit.edu/courses/electrical-engineering-and-compu...
If you're interested in this type of stuff I can personally recommend MIT's 6.828 course (Operating Systems Engineering) as an additional resource. Specifically, you'll want to take a look at xv6, a teaching OS implemented for the course (http://pdos.csail.mit.edu/6.828/2014/xv6.html). The OS is small enough to print as cross referenced code listing (http://pdos.csail.mit.edu/6.828/2014/xv6/xv6-rev8.pdf) and has a book that fully explains each piece (http://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf). You are only 9,000 lines of code away from fully understanding basic operating systems concepts!
It's been a few years since I took the class but it was an absolute blast. The offering in 2011 has recorded lecture videos (http://pdos.csail.mit.edu/6.828/2011/schedule.html).
I encourage you to try out the 6.828 course material, especially the labs. It's one of the best OS courses. I had taken UCLA's CS 235 which is based on similar content [1]. Learned a lot from that.
[1]: http://www.cs.ucla.edu/~kohler/class/10f-aos/
There's some good lectures from CMU if you search for 15-213 on YouTube. The lectures explain how x86-64 works and enough about operating systems you know how virtual memory and signals work. Then any OS resource listed here or try MITs it has YouTube lectures https://pdos.csail.mit.edu/6.828/2021/schedule.html
Most of the links here help with your immediate questions, but if starting with base concepts and first principles is appealing to you, I have to recommend:
- the MIT Operating Systems Engineering OCW course [^1]
- specifically, Lecture #2 [^2] which describes the bootloader for 'xv6', a reimplementation of Unix v6, which does a great job showing what a solid OS with all the basics look like
[^1]: https://ocw.mit.edu/courses/6-828-operating-system-engineeri...
[^2]: https://ocw.mit.edu/courses/6-828-operating-system-engineeri...
Here some ideas that worked for me:
- online classes. Especially those from actual universities rather than Coursera. Coursera is great but often they target a larger audience and the content may be simplified. Personally, I learned a lot from MIT classes (especially distributed systems and operating systems). They have projects that are challenging and really interesting.
- Competitive programming. I found competition in general to be a great way to improve. It's stimulating and there are many resources available. The downside is that it's hard and can be depressing. For instance, it takes me 10 hours to solve the problems in an easy code jam round when some 18 year kids solve them in an hour. Depending on what you want to learn, there are different type of competition. For instance, code jam / codeforces for shorter type of problems. Google hashcode for slightly larger optimization problems. Kaggle for machine learning. I'm sure there are many others.
Actually, learning stuff and improving is the easy part (you just need free time). There are so many resources. The question is more deciding what to learn, and how can it be useful.
If you already know partial derivatives, gradient descent algorithms, and some linear algebra, it's easy. The assignments are not challenging either, even compared to other coursera classes. But for people that don't have this background, it can be hard.
I think the problem with Coursera is that they try to accommodate as many students as possible, which means the classes aren't very deep. I don't think this should be the role of a ML class to teach about partial derivatives or matrix factorization for instance. It's great that the class is accessible to many people, but sometimes you feel that you just scratch the surface, and that you're not at the level of university students that went through more challenging classes.
As a comparison, I did the labs of 6.828 and 6.824 (OS and distributed systems) on MIT opencourseware and it was much harder and much more rewarding than any coursera class. And I did only the labs, there is much more material to cover to do it seriously (quizzes, lot of articles to read...). Kudos to MIT students! (I wonder how many such classes they take during one semester). Too bad opencourseware classes aren't always properly set up for outside students. There may be some material missing, no forum to ask questions, video quality can be very bad and so on...
https://pdos.csail.mit.edu/6.828/2014/schedule.html The mit website pretty much has all the information open, which you can use to go through this course at your own pace. The lectures(most if not all) are on youtube, search for 6.824