Operating Systems - CMPSCI 377 - Fall 2005

 

Course Description

This course will provide an introduction to operating system design and implementation. The operating system provides a well-known, convenient, and efficient interface between user programs and the bare hardware of the computer on which they run. The operating system is responsible for allowing resources (e.g., disks, networks, and processors) to be shared, providing common services needed by many different programs (e.g., file service, the ability to start or stop processes, and access to the printer), and protecting individual programs from one another.

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.
 

Course Information

Professor: Emery Berger - office hours by appointment.
Teaching assistants: Vitaliy Lvin, Hee-Jin Chae.

For questions and answers about class assignments, visit this list of Frequently Asked Questions, etc.
Student photo page

Course mailing list

University Academic Honesty policy

Textbooks (not required!)

The Silberschatz or Tanenbaum texts make excellent references.

Operating Systems (3rd edition), by Deitel, Deitel & Choffnes
OPTIONAL

publisher's site  Amazon   shopping.com

Projects

You will be expected to use a source code management system known as Subversion (local copy of book) and the Eclipse development environment. Make sure to install 3.1, which includes support for Java 5 (used for writing the simulators).

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

Lectures (Slides)

These slides are in Powerpoint, and may be viewed (on Windows machines) with the following free PowerPoint Viewer. If you are on Windows, you can also use MikTeX, a nicely-packaged version of LaTeX. There is also a handy Windows-based editor, viewer, and spell checker for Windows and MikTeX called TeXnicCenter that should prove helpful.

NOTE: These scribe notes are unedited and may or may not accurately reflect actual lecture content. Caveat lector.

Lecture Scribe notes
Lecture 1
Lecture 2 PDF, LaTeX
Lectures 3 & 4 PDF, LaTeX
Lecture 5 (Threads & Scheduling) PDF, LaTeX
Lecture 6 (Scheduling) PDF, LaTeX
Lecture 6 (Scheduling), continued  PDF, LaTeX
Lecture 7 (Synchronization I) PDF, LaTeX
Lecture 8 (Synchronization II) PDF, LaTeX
Lecture 9 (Synchronization III) PDF, LaTeX
Lecture 10 (Memory Management)
ignore lecture number
PDF, LaTeX
Lecture 11 (Paging) -- ibid PDF, LaTeX
Lecture 12 (Demand Paging) -- PDF, LaTeX
class cancelled Thursday October 27
Midterm: November 1 (in class) -- covers all above material
Lecture 13 (VM Meets the Real World) PDF, LaTeX
Lecture 14 (Memory Management) PDF, LaTeX
Lecture 15 (File Systems I) PDF, LaTeX
Lecture 16 (File Systems II) PDF, LaTeX
Lectures 17 & 18 (I/O and Storage Systems) PDF, LaTeX
Lecture 19 (Network Structures)
Lecture 20 (Distributed Computing) PDF, LaTeX
Lecture 21 (Distributed File Systems) PDF, LaTeX
Lecture 22 (Advanced File Systems)
Lecture 23 (Access Control and Security) PDF, LaTeX

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.