This course focuses on the programming facilities, mechanisms, and abstractions supported by modern operating systems and related low-level libraries and software. In short, we'll be looking at what sorts of things can be done via services provided by operating systems and how to go about doing them in a robust and efficient manner.
To a lesser extent, and only to the degree necessary to enable us to go about our programming tasks effectively, we'll also explore how certain abstractions presented by the operating system work "under-the-hood". For instance, when looking at how to perform low-level I/O it helps to understand some of the relevant data structures used by the operating system to fully appreciate how much time is spent, say, "opening" a file.
Define the concept and role of a process in a modern operating system
Describe the key abstractions an operating system provides to running processes
Describe the function, usage, and operation of system calls related to process management, memory management and I/O
Explain exceptional control flow, including:
Describe the essential operation of a modern MMU from a programmer's standpoint, including:
Explain the operation of various memory allocation methods, including:
Describe, utilize, and implement a dynamic memory allocation API.
Describe and utilize the system-level I/O API of a modern operating system, including:
Describe and utilize a low-level socket based networking API. This should include:
Describe, design and utilize concurrent programming APIs, including:
The following textbook is required for this course:
The following are recommended (i.e., not strictly required) texts. The first is highly recommended if you've never worked with the C programming language before, and the second is useful if you'd like more in-depth information on material covered by the primary course text (and in lecture).
Your grade will be computed as follows:
And here's the grade scale:
Grades are never curved, but exam scores may be uniformly raised at my discretion so that the class average is 70%. Note that you must score at least 50% on both exams (after normalization) in order to pass the class.
You will be assigned 4-6 labs, each asking you to apply concepts presented in class to develop working programs. All labs are individual assignments. Submission will be electronic.
Accounts will be created on the CS course server (
you to work on the labs. While it is possible for you to work on the
labs on your own computer, final testing must be performed on the course
The midterm exam date will be published on the course calendar and the final exam date/time will be set by the official IIT final exam schedule. Makeup exams should be cleared in advance, and will only be administered at my discretion. Both exams will be closed-book, closed-notes — calculators will not be permitted.
An assignment is late if it is not turned in by 11:59PM of the due date. Late assignments, unless cleared in advance with the instructor, are subject to a 30% reduction in points. After 1 week (7 days) past the due date, an assignment will not receive any points at all.
If you intend to submit a lab assignment late, you must let me know in advance, as it requires that I explicitly pull your work from the handin server after I've already done so for everyone else.
You are welcome to discuss assignments and labs with classmates, but all final work must be your own. Plagiarism will result, at the very least, in the plagiarized assignment receiving a zero – other disciplinary actions may be taken at my discretion. You should take care to attribute any ideas incorporated into your work to their original source, if that source is not yourself.
The IIT code of Academic Honesty may be found in the undergraduate handbook.
Reasonable accommodations will be made for students with documented disabilities. In order to receive accommodations, students must obtain a letter of accommodation from the Center for Disability Resources. The Center for Disability Resources (CDR) is located in Life Sciences Room 218, telephone 312 567.5744 or email@example.com.