Instructor: Kyle C. Hale
Office Hours: Wed 3:05-5:05 PM (SB 229C)
E-mail: khale [at] cs [dot] iit [dot] edu
Office Hours: WF 10-11:30AM (SB 115)
E-mail: arizvi1 [at] hawk [dot] iit [dot] edu
Office Hours: T 3:00-4:00PM, Th 1:30-3:00PM (SB 007B)
E-mail: bli70 [at] hawk [dot] iit [dot] edu
Course number: CS 450
Semester: Spring 2019
Lecture Time: Mon/Wed 1:50PM - 3:05PM
Lecture Location: Pritzker 111
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 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.
|9||Wed 3/13||Midterm||50 min||Lec 1-15|
|17||Monday 5/6, 2-4pm (same room)||Final Exam||75 min||Apx 75% Lec 16 on, 25% midterm material||example 1, 2, 3|
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. 3a and 4a are subject to change based on an in-class vote. 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||Monday, 1/21/2019 11:59PM CST||p1a description||Posted 1/14/2019 5:00PM|
|1b||xv6 warmup||p1b description||Posted 1/21/2019 9:00PM|
|2a||out of the depths of x86||Thursday, 2/14/2019 11:59PM CST||p2a description||Posted 2/4/2019 11:59PM|
|2b||scheduling in xv6||p2b description||Posted 2/14/2019 11:00PM|
|3a||parallel zip||Friday, 3/15/2019 11:59PM CST||p3a description||Posted 3/1/2019 7:00PM|
|3b||null pointers and shared memory||p3b description||Posted 3/12/2019|
|4a||implementing kernel threads||p4a description||Posted 4/1/2019|
|4b||MapReduce||Wednesday, 5/1/2019, 11:59PM CST||p4b description||Posted 4/17/2019|
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 be using the Fusion cluster for development and testing.
This means you will be doing most of your development remotely. You should all have the ability to log in
to the cluster when classes start. You might also want to get used to using
sshfs. All the tools you will need are on Fusion.
This is a list of other resources that you might find useful for this class. Feel free to peruse them at your own convenience.