The goal is an in-depth understanding of how an operating system manages resources in a computer and provides programmers with a machine and device independent interface. There is a difficult and time-consuming programming project (GeekOS). You are provided with the source code (a few thousand lines of C and some assembly) of a "Unix-style" skeleton operating system for a PC-like x86 platform. You have to understand a large part of this code and augment it in various ways: signals, semaphores, cpu scheduling, memory paging, file system, etc. The x86 platform is simulated by QEMU. The programming environment is Gnu/Linux.
Course overview slides
ToyOS slides
OS Process slides
Queueing slides
Multi-threaded programs slides
Implementing standard synchronization constructs slides
Deadlocks slides
Memory management slides
Filesystem slides
Log-structured filesystem:
http://pages.cs.wisc.edu/~remzi/OSTEP/file-lfs.pdf
http://www.eecs.harvard.edu/~cs161/notes/lfs.pdf (optional)
Read the CS Department Academic Integrity policy. Additional information can be found in the sections titled "Academic Integrity" and "Code of Student Conduct" available at Course Related Policies.
Projects are to be done individually.
Consider each programming assignment to be a take-home exam.
Do not expose your source code to others.
Do not leave it potentially accessible to others, e.g., unlocked unattended laptop, publicly accessible websites, unsecured servers, unsecure communications.
Do not look at another's source code. This applies to code from online searches, e.g., Sourceforge, Stackoverflow, Google.
Interaction via course discussion forum is permitted. Discussion of problems and code solutions is permitted as long as you do not write down code during your discussion and you wait at least 30 minutes after the end of the discussion before you write code based on the discussion.