Instructor: Kyle C. Hale
Office Hours: Mon. 9AM-10:30AM, Thurs. 4:15PM-5:45PM (Zoom)
E-mail: khale [at] cs [dot] iit [dot] edu
Course number: CS 450
Semester: Fall 2020
Lecture Time: Tues/Thurs 2PM - 3:15PM
Lecture Location: Hermann Hall 100 (currently virtual)
Operating systems run the world. Without an OS, you couldn't have hundreds of programs running at once, you'd have to have deep understanding of hardware, and you'd have to rewrite your code for each new machine on the market. You wouldn't have web servers, desktop machines, laptops, phones, or smart watches; no Siri, no Alexa, no TensorFlow or CUDA programs.
In this course, you will dive straight into the deepest and often most confounding component of a computer system's software stack. You will become familiar with both the high-level concepts underpinning modern operating systems and with low-level mechanisms, in addition to new and emerging techniques and programming models for computer systems. I am a strong believer in learning by doing, so the majority of your time for this course will be spent working on programming projects, both very low-level work and high-level (user-space) work. This course will be challenging! It will bring together a lot of concepts you've learned in your previous courses, from data structures and algorithms to assembly language, computer architecture, virtual memory, and advanced C programming.
For this course, I assume that you have basic familiarity with computer organization (as introduced in CS 350), data structures, C, and systems programming (as covered in CS 351). You will for sure need to be able to program in C and should be able to navigate around a UNIX environment.
While we are online only, lectures and office hours will be held on zoom. If students have issues with this medium, we may switch (e.g. to Blackboard Collaborate). The link for these will be posted on the course Piazza. Recordings of the lectures will be posted afterwards on Blackboard.
We will be primarily using Piazza as a course communication mechanism. If you have an issue or question that is not strictly private (especially one that would benefit everyone were it answered), please use Piazza as your first resource. The instructor, the TA, and your fellow classmates will be there to help. Note that you can also post anonymously if you so choose.
While there will be no homework to turn it, it is a very good idea to do some of the homeworks associated with the readings as I post them. These are usually short coding tasks that use a simulator for the OS component in question. These homeworks will help solidify knowledge needed for the exams.
In addition to the projects (and homeworks if you're studious), you'll be needing to do the readings I post (almost) every lecture. These will primarily come from the OSTEP book, but I will also post other required and optional readings from seminal research papers, articles, and books.
We will, when time allows, also be spending some time reading code! This will likely include code snippets from real OSes including the Linux kernel.
The following is a rough schedule of the class. Note that it is subject to change.
|8||Wed 10/14 (Not set in stone)||Midterm||TBD||Lec 1-14||example|
|TBD||TBD||Final Exam||TBD||Apx 70% material after Lec 15, 30% first half of class|
You'll notice that (almost) every project listed below for this class is split into two parts. In many cases these are really entirely separate projects, but are logically grouped together to stress some particular concept. The (a) parts are mostly concentrated on userspace components (part of the broader operating system) and the (b) parts are kernel components that will involve hacking on xv6. Unless otherwise noted, grades for these projects are going to be based on whether or not your code works. Partial solutions will not be given credit! With that in mind, you should always start early.
|Project||Topic||Due Date||Handout||Notes (TBP = To Be Posted)|
|1a||UNIX warmup||p1a description||Posted Monday, 8/31 4:00PM CST|
|1b||xv6 warmup||Friday, 9/18/2020 11:59PM CST||p1b description||Posted Tuesday, 9/8 7:00PM CST|
|2a||out of the depths of x86||Friday, 9/25/2020 11:59PM CST||p2a description||Posted Thursday, 9/17 5:45PM CST|
|2b||xv6 scheduling||Friday, 10/9/2020 11:59PM CST||p2b description||Posted Saturday, 9/26, 9:41AM CST|
|3a||parallel zip||Friday, 10/23/2020 11:59PM CST||p3a description||Posted Monday, 10/12/2020 11:29AM CST|
|3b||null pointers and shared memory||Friday, 11/6/2020 11:59PM CST||p3b description||Posted Friday, 10/23/2020 1:00PM CST|
|4a||kernel threads||Friday 11/20/2020 11:59PM CST||p4a description||Posted Saturday, 11/7/2020 10:22AM CST|
|4b||DIY MapReduce||Friday 12/04/2020 11:59PM CST||p4b description||Posted Friday, 11/20/2020 12:00PM CST|
The following book is the only required textbook for this course. It is not only an excellent textbook, but is also freely availble online:
The below books are also great and often-used texts on Operating Systems. If you find a copy of one for a good price, snatch it. Keep in mind, however, that the best way to earn operating systems is by building!.
This is probably my favorite OS textbook after OSTEP. Full disclosure, I took undergrad OS with Dahlin many years ago.Operating Systems: Principles and Practice (2nd Edition), by Thomas Anderson and Michael Dahlin, Recursive Books 2014.
For general systems design, a good one to have on the shelf:Principles of Computer System Design: An Introduction (1st Edition), by Jerome H. Saltzer and M. Frans Kaashoek, Morgan Kaufmann 2009.
The following book, while outdated (uses a 2.6.10 kernel as a reference), still provides one of the best references for practical kernel hacking:Understanding the Linux Kernel (3rd Edition), by Daniel P. Bovet and Marco Cesati, O'Reilly Media 2005.
Good book on Linux kernel programming:Linux Kernel Development (3rd Edition), by Robert Love, Addison-Wesley Professional, 2010.
If you're interested in the macOS kernel, this one is not out yet, but will be soon:OSX Internals, Volume II, 2nd Edition, by Jonathan Levin.
Similarly for Windows:Windows Internals, Part 1: System Architecture... (7th Edition), by Pavel Yosifovich, Mark E. Russinovich, Alex Ionescu, and David A. Solomon, Microsoft Press 2017.
We will primarily be using Docker for development. You will need to have the Docker client installed on your machine.
This is a list of other resources that you might find useful for this class. Feel free to peruse them at your own convenience.