The course will start with a brief
historical perspective of the evolution of operating systems
over the last fifty years, and then cover the major
components of most operating systems. This discussion will
cover the tradeoffs that can be made between performance and
functionality during the design and implementation of an
operating system. Particular emphasis will be given to three
major OS subsystems: process management (processes, threads,
CPU scheduling, synchronization, and deadlock), memory
management (segmentation, paging, swapping), file systems,
and operating system support for distributed systems.
For questions and answers about class assignments, visit this list of Frequently Asked Questions, etc.
Student photo
page
University Academic Honesty policy
publisher's site Amazon shopping.com
Here's a brief introduction to C++ for Java programmers, courtesy of Mark Corner, lightly edited by me.
Base simulation framework, revision October 31, 2005
Lab 1 Information: Due October 11
Lab 2 Information: Due October 21
Lab 3 Information: Due November 29
NOTE: These scribe notes are unedited and may or may not accurately reflect actual lecture content. Caveat lector.
This course material is Copyright (C) 2005 by Emery
Berger and may not be used without prior written permission.
Supplementary Resources
Martin Rinard's lecture notes
Marvin Solomon's lecture notes
Patterson's seminal paper on RAID.
the book on Subversion.
Rosenblum and Ousterhout's paper on log-structured file systems.
Lampson and Redell's experience with Mesa monitors.
Info on using the GNU Debugger.
An introduction to programming with threads.
The amazing Reflections on Trusting Trust paper by Ken Thompson, where he reveals his Trojan Horse embedded in the UNIX C compiler.