tl;dr
I’m learning operating systems thanks to OSTEP, check out my “syllabus”.
Author’s note: This post was originally named “Self Taught”. I believe this phrase did a disservice to the resources mentioned here so I renamed it to “Self Guided”.
Intro
I’ve been interested in learning more about Operating Systems for quite some time now, so much so I’ve considered going to grad school to learn more about it. However, I think I can make do with the resources available online. I just won’t have anything to show for it besides personal projects, as opposed to a post-undergraduate education.
Information Overload
With so much information online, it’s overwhelming shifting through it all and deciding which resource is the “best”. When trying to learn more about anything Computer Science related, I like to see if there’s a book on the subject. So, I looked up some threads about books to learn more about Operating Systems and I came across a few books:
- “OSTEP” — Operating Systems: Three Easy Pieces by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
- The “dinosaur” book — Operating System Concepts by Silberschatz, et al.
- Modern Operating Systems by Tanenbaum
OSTEP was the most mentioned book and is even featured on Teach Yourself CS. OSTEP has individual chapters for free online and has multiple projects to do. The dinosaur book has projects as well, but what I like most about OSTEP’s set of projects is that about half of them involve extending the xv6 kernel.
I’m glad that I found a book to read and reference to, now I have to find out which parts are relevant. While I eventually want to go through all of it, I’d like some direction on which parts I need to read the most to kickstart my learning. Luckily I found Remzi’s course website where he uses OSTEP as the textbook: UWM CS-537: Intro to Operating Systems. This course includes a lot of useful information such as a calendar, projects, and even videos which is a rare find on course websites.
While the course website is packed with information, I’m often at a loss (dare say, overwhelmed) whenever I visit it. The calendar portion is a bit too packed for me and I often click around and go back and forth between the videos, projects and reading.
The main reason I’m creating this post is to hopefully organize and extend upon the course in a format that I can follow step-by-step and can easily come back to. I’ll create a personal syllabus that first includes the Intro to OS course, some more readings and projects from OSTEP and finally another book to apply my knowledge to.
Syllabus
No dates here, don’t want to stress about meeting a certain deadline. Instead, I plan on completing each row-by-row in order. You could probably pace yourself by doing one row a week.
Intro to OS
Most chapters in OSTEP have accompanying homeworks which can be found here. Lectures here are optional and can range from 20 - 50 minutes long each. For myself, I’m doing each reading listed below with the project. If I feel like the reading wasn’t enough I’ll do the homework and try to watch the lectures. The “Discussion” for each project is recommended since it explains the project in detail.
Reading | Lectures | Project | Discussion |
---|---|---|---|
Intro & Processes OSTEP Ch. Pre - 6 | Part 1 Part 2 Part 3 | Unix Utilities | Discussion |
Scheduling OSTEP Ch. 7 - 9 | Part 1 Part 2 Part 3 | ||
Memory Management & Paging OSTEP Ch. 13 - 16; 18 | Part 1 Part 2 Part 3 | Intro To Kernel Hacking | Discussion |
Paging: TLB & Paging: Smaller OSTEP Ch. 19 - 20 | Part 1 Part 2 Part 3 | Unix Shell | Discussion |
Beyond Physical Memory OSTEP Ch. 21 - 22 | Part 1 Part 2 Part 3 | ||
Threads & Locks OSTEP Ch. 25 - 26; 28 | Part 1 Part 2 | xv6 Lottery Scheduler | Discussion |
Locks, CVs & More CVs OSTEP Ch. 29 - 30 | Part 1 Part 2 Part 3 | ||
Semaphores OSTEP Ch. 31 | Part 1 Part 2 Part 3 | Parallel Zip xv6 Virtual Memory | Discussion |
Deadlock OSTEP Ch. 32 | Part 1 | ||
I/O, Disks & Desk Scheduling OSTEP Ch. 36 - 37 | Part 1 Part 2 Part 3 | ||
RAID & File Systems OSTEP Ch. 38 - 39 | Part 1 Part 2 Part 3 Part 4 | xv6 Threads | Discussion |
FS Implementation & FFS OSTEP Ch. 40 - 41 | Part 1 Part 2 Part 3 | ||
Journaling OSTEP Ch. 42 | Part 1 Part 2 Part 3 | MapReduce | Discussion Q&A |
LFS & SSD OSTEP Ch. 43 - 44 | Part 1 Part 2 Part 3 “Words of Wisdom” | File System Checker |
OS Extended
The readings are topics not covered in the original Intro to Operating Systems course, but since they’re available why not read them? I tried to suplement the readings with projects from other courses.
Reading | Project |
---|---|
Distributed Systems OSTEP Ch. 48 | Distributed Store |
AFS & NFS OSTEP Ch. 49 - 50 | Distributed File System |
Security OSTEP Ch. 52 - 57 | Couldn’t find much outside of a couple ideas, but nothing structured like the other ones. |
I tried to find projects that had to do with the reading, but there’s a couple of challenging projects involving xv6 in MIT’s 6.S081: Operating Systems Engineering such as network driver.
The Kernel
To apply my knowledge, I’d like to contribute to the Linux Kernel.
Reading | Project |
---|---|
Linux Kernel Development, 3rd Ed. by Robert Love | Contribute to the Linux Kernel… |
Optionally Linux Insides | whatever that may look like… |
And beyond
I’d eventually like to learn more advanced topics such as Distributed Systems. Remzi has two more courses: CS-736: Advanced Operating Systems and CS-739: Distributed Systems which are both graduate level courses so it includes a lot of papers shivers. However, I came across Columbia’s COMS 4113: Distributed Systems Fundamentals which includes some overlap in the Intro OS course but still includes some fundamental information, I may write another post/syllabus about it.