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:
- Threads and processes, Unix fork and exec
- Synchronization, mutual exclusion and techniques for achieving
them on different hardware platforms
- Resource allocation (time and space)
- Interprocess Communication (IPC) through message passing,
shared memory and remote procedure call (RPC)
- File system structures, including the Berkeley Fast-File
System and its possible successor, the Log-Structured File System
- Virtual memory (of course!)
- Device management and interrupt processing
- Protection, passwords and encryption
Texts:
- Modern Operating Systems, Andrew Tanenbaum, Prentice Hall, 1992.
-
Class notes, to be made available at a local copy center, 150 pp.
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.