CMSC 355: Operating Systems
Instructor: David Wonnacott
Semester : Spring 2005
Schedule: MWF 2:30-4:00 (2 lectures and one lab)
Texts:
Operating System Concepts with Java, 6th Edition (a.k.a. OSC-J), by Silberschatz,
Galvin, and Gagne
Concurrent Programming
in Java: Design Principles and Patterns, by Doug Lea
selections from Computer
Engineering: Hardware Design, by M. Morris Mano
Requirements: Two exams (each 25% of the total grade), weekly
homework or lab assignments in the first 12 weeks of the semester (45%), and
one in-class presentation in the last two weeks (5%).
Collaboration: You are encouraged to discuss the lecture material,
labs, and written work with other students, subject to the following
restriction: the only "product" of your discussion should be your memory of
it - you may not write up solutions together, or exchange written work or
computer files.
Collaboration is not allowed on exams.
Prerequisites: CMSC 240
Description: A practical introduction to modern operating systems with
a substantial laboratory component, primarily using Java and HERA. Topics covered in
this course include:
- Programming with multiple "threads" of execution
- synchronization/sharing primitives: semaphores, message passing,
and monitors
- pitfalls of multithreaded software: race conditions, livelock, and
deadlock
- classic multiprogramming problems, such as the dining philosophers
problem
- Operating system design
- management of threads of execution, including scheduling
algorithms
- management of shared and unshared memory
- virtual memory
- file system management
- input and output
- security
Schedule:
// In the first half of the course, we will
focus on principles of concurrent programming, drawing primarily from Doug
Lea's book, and hardware/software co-design for simple I/O:
((
- Concurrent execution and data races (OSC-J 5.7, Lea 2.2 (first
page))
- Design forces for concurrent software, especially deadlock, starvation,
and throughput (Lea 1.3)
- Paradigms for concurrent programming
- The "Pure functional" approach: "Initialize and Publish" (brief mention)
- Locking and Semaphores (OSC-J 7.5 except the section on implementation)
- Monitors (OSC-J 7.7)
- Message Passing (see CMSC 392)
- Atomic Transactions (brief mention)
- Concurrent programming techniques
- Immutability (Lea 2.1)
- Exclusive access to a single resource (Lea 2.2-2.2.5)
- Two-phase locking for multiple resources
- Resource ordering for multiple resources (Lea 2.2.6)
- Detection and response to deadlock, e.g. rollback (Lea 3 - 3.2)
- Ad-hoc solutions
) & (
- I/O hardware (Mano 11.1-11.2)
- Memory-mapped I/O
- Transfer modes (Mano 11.4)
- Polled and Interrupt-based I/O (Mano 9.9, 11.5-11.6)
));
// In the second half of the course, we will apply these principles to
classic operating system data structures and algorithms:
(
- Threads and processes (OSC-J 4.1, 4.3-4.5)
- Thread switching instructions (OSC-J 4.1, 4.2)
- Processor scheduling (OSC-J 6.1-6.5, 6.9-6.10)
- Memory management (OSC-J 9-9.4, 10-10.2, 10.4-10.6)
- Files and File Systems (OSC-J 11-11.4, 11.6, 12-12.5)
- Disk I/O (OSC-J 14-14.2)
- Process synchronization (OSC-J 7)
)
Lab Assignments: