Operating Systems (CPS 110)
Times: Tuesday/Thursday, 9:10-10:25

This course is a general introduction to operating systems, focusing heavily on both abstract issues and design issues and tradeoffs. It covers principles, design decisions, design techniques, policies, and mechanisms. The course focuses on the design of general-purpose multiprogramming systems and covers processes, resource allocation, concurrency, memory management, time management, device management, synchronization, mutual exclusion, file systems, program interface, and user interface. The theme of concurrent programming will be emphasized throughout. The goals are 1) to acquaint students with the components and level organization of a hierarchically structured operating system, 2) to introduce students to issues in operating system design, and 3) to show students abstractions underlying design choices, tradeoffs, and their consequences. Many examples are taken from the Unix operating system, and hands-on projects modifying the Nachos operating system are included. Covered topics include:

Texts: Background: Working knowledge of common data structures such as stacks, queues, and linked lists; familiarity with current hardware architectures including typical instruction sets, input/output processing, and interrupts. Knowledge of the C and C++ programming language is assumed, as is minimal background in systems as indicated by the equivalent a Systems Programming course. Programs will be written in a restricted form of C++; persons familiar with C should have no problems using C++ in this course. No C++ book is required to do the programs. Programming projects will involve writing 200-500 line programs in C++ under UNIX. Warning: this course requires programming, but the focus is not on programming; although we will answer questions about the C++/UNIX environment, you are expected to learn C/C++ and UNIX on your own.

For more information, contact Thomas Narten, (660-6500 after Aug 15), narten@cs.duke.edu.