Course Overview

This is an introductory graduate-level course in operating systems. The course assumes a basic level of OS knowledge (successful completion of an undergraduate course in operating systems), continuing the study of operating systems by examining the more advanced and intricate aspects of modern OSes.

Through this course, students will gain an understanding of the key concepts of modern OS architecture and its implications on libraries and software. Specifically, the course will concentrate on the memory, scheduler, and storage abstractions, giving students the necessary tools to understand the internals of modern OSes and to reason about their capabilities.

The best way to understand why systems are built the way they are built is to build such systems. To that end, this is primarily a project-oriented course. The lectures will be dominated by a discussion of OS components, with the explicit goal of enabling students to create their own non-trivial operating system that boots on and manages real hardware.

Course Topics

What Software Expects of the OS, What Hardware Provides to the OS, Virtual Memory, Interrupts, DMA, PCI, Device Drivers, Terminals, Scheduling, Storage, Filesystems, Swapping, Caching, Networking, Binary Formats, Kernel Modules, Access Control, Multi-threading, and Multi-processing.

Office Hours

CS 343, Tuesdays, 2:30PM-3:50PM or by appointment


  • Homework – 20 (due: Oct 17)
  • Warm-up Project 1 – 10 (due: Sep 7)
  • Warm-up Project 2 – 10 (due: Sep 19)
  • Warm-up Project 3 – 10 (due: Sep 26)
  • Course Project – 100 (due: last class)
  • Final Exam – 30 (Dec 18, 2:15PM-5PM)
  • Participation – 10

Only the Course Project is required, the rest of the components are optional. Students will need to attain a total of 100 points to receive an A. Participation will be judged by the instructor based on active interaction during lecture and on the course mailing list.


An undergraduate course in operating systems is an informal prerequisite for this class, as is proficient knowledge of C programming and debugging. Students without prior operating systems experience or working knowledge of C will be expected to triple their time commitment in the course in order to pass. Prior coursework in computer architecture, networking, and/or storage systems will likely be of help. If you are unsure whether or not you have the necessary background or if you are unable to sign up via the web, please contact the instructor.


The book recommended for this course is The Design and Implementation of the FreeBSD Operating System by McKusick, Neville-Neil, and Watson. Students who do not know C should get a copy of The C Programming Language by Kernighan and Ritchie and study it cover-to-cover.
For a generic textbook on operating systems, the students can look at Operating System Concepts by Silberschatz, Galvin, Gagne and Operating Systems: Principles and Practice by Anderson and Dahlin.

Teaching Assistants

Umit Akgun – iakgun@cs
Mina Abbasi Dinani – mabbasidinan@cs
Sergey Madaminov – smadaminov@cs

Lecture Slides

These lectures have been developed by Professors Mike Ferdman and Don Porter.

    • (pdf) Introduction (class 1)
    • (pdf) What Software Expects of the OS (classes 2,3)
    • (pdf) (ppsx) What Hardware Provides to the OS (classes 4,5)
    • (pdf) (ppsx) Memory Management (classes 6,7,8,9)
    • (pdf) Processes and Scheduling (classes …(3))
    • (pdf) Physical Page Reclamation
    • (pdf) Terminals
    • (pdf) Virtual File System
    • (pdf) File System
    • (pdf) BlockCache
    • (pdf) Disk Scheduling
    • (pdf) Networking & NFS
    • (pdf) Threading


    For the homework and projects, you may work in groups of any size. If you work alone, you submit your own work. If you work with partners, you submit your assignments jointly. Whether or not you work in a group, you may discuss the assignment details, designs, debugging techniques, or anything else with anyone you like in general terms, but you may not provide, receive, or take code to or from anyone outside of your group. The code you submit must be your own work and only your own work. Any evidence that source code has been copied, shared, or transmitted in any way between non-partners will be regarded as evidence of academic dishonesty.

    You must declare your group via email to the instructor and TA at most 5 days after the assignment handout.  You may change group size or composition for each assignment, as long as each change is announced within 5 days of that assignment’s handout.

    Larger group sizes allow you to take on more challenging projects.  To balance out the advantages of a larger group compared to individuals working alone, the number of points deducted for any assignment is multiplied by the size of the group.  In the past, large groups have succeeded in submitting amazing projects.  However, beware of accepting deadbeats into your group: they are likely to hurt your grade beyond repair.

    Some more-specific guidelines for the assignments:

    • You may not look at code from previous years of this course.
    • You may not look at code from similar courses at other universities.

    Assignment Hand-in Policy

    All deadlines are before the start of lecture on the due date.  Submissions will be accepted on or after the due date.  Assignments submitted after the due date will be assessed a 1-point per day penalty (multiplied by the number of group members) for each late day, in 24-hour increments.

    Course Mailing List

    Subscription to the course mailing list is mandatory.

    This term we will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TA, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza. If you have any problems or feedback for the developers, email

    Find our class page at:

    Disability Support Services

    If you have a physical, psychological, medical or learning disability that may impact your course work, please contact Disability Support Services, ECC (Educational Communications Center) Building, room 128, (631) 632-6748. They will determine with you what accommodations, if any, are necessary and appropriate. All information and documentation is confidential.

    Academic Integrity

    Each student must pursue his or her academic goals honestly and be personally accountable for all submitted work. Representing another person’s work as your own is always wrong. Faculty are required to report any suspected instances of academic dishonesty to the Academic Judiciary. For more comprehensive information on academic integrity, including categories of academic dishonesty, please refer to the academic judiciary website at

    Critical Incident Management

    Stony Brook University expects students to respect the rights, privileges, and property of other people. Faculty are required to report to the Office of Judicial Affairs any disruptive behavior that interrupts their ability to teach, compromises the safety of the learning environment, or inhibits students’ ability to learn.