Skip to content

Self Guided Operating Systems

January 12, 2022

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 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.

ReadingLecturesProjectDiscussion
Intro & Processes
OSTEP Ch. Pre - 6
Part 1
Part 2
Part 3
Unix UtilitiesDiscussion
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 HackingDiscussion
Paging: TLB & Paging: Smaller
OSTEP Ch. 19 - 20
Part 1
Part 2
Part 3
Unix ShellDiscussion
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 SchedulerDiscussion
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 ThreadsDiscussion
FS Implementation & FFS
OSTEP Ch. 40 - 41
Part 1
Part 2
Part 3
Journaling
OSTEP Ch. 42
Part 1
Part 2
Part 3
MapReduceDiscussion
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.

ReadingProject
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.

ReadingProject
Linux Kernel Development, 3rd Ed. by Robert LoveContribute to the Linux Kernel…
Optionally Linux Insideswhatever 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.