Revised June 4, 2014
CS 350: Operating Systems
General description
This course introduces operating systems, what they do, how they are used, and how they are implemented.
Logistics
Audience
- 3A or 3B CS major students
 
Normally available
- Fall, Winter, and Spring
 
Related courses
- Pre-requisites: CS 240, 241, 246, (CS 251 or ECE 222)
 - Successors: CS 343 and many of the 4th year CS major courses
 - Anti-requisites: ECE 254, MTE 241, SE 350
 
For official details, see the UW calendar.
Software/hardware used
- C programming language
 
Typical reference(s)
- Operating Systems: Three Easy Pieces, Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau, Arpaci-Dusseau Books, 2014
 
Required preparation
At the start of the course, students should be able to
- Use sequential programming skills
 - Understand computer organization
 - Write, test, and debug programs of a moderate size
 
Learning objectives
At the end of the course, students should be able to
- Extend complex programs written by others
 - Choose appropriate data structures and algorithms to solve a variety of programming problems
 - Select and use suitable editors and development environments (to some extent) and use the tools provided as part of the programming process
 - Test if a program runs properly and correct faults by debugging
 - Explain the main components of modern operating systems and construct simple implementations of those components
 - Produce prose of a technical nature
 - Demonstrate awareness of fundamental trade-offs in algorithm design, including time versus space
 - Create correct concurrent programs of moderate complexity
 - Explain the concepts of threads and processes and address spaces
 - Describe memory management (as related to operating systems) and virtual memory
 - Discuss issues related to processor scheduling
 - Explain how file systems work and how they interact with disk drives
 - Describe how operating systems work and how applications interact with devices
 - Explain how processes can communicate within the same machine
 
Typical syllabus
Operating system introduction (2 hours)
- Roles of an operating system
 - Three views of an operating system (application, system, and implementation)
 - Operating system interaction with devices
 
Multi-programming (7 hours)
- Processes and threads, system calls, context switching
 - Managing processor time
 - Types of scheduling, scheduling algorithms
 
Concurrency (6 hours)
- Principles of concurrency
 - Mutual exclusion and semaphores
 - Deadlock detection and prevention
 
Memory management (8 hours)
- Virtual addressing and address translation
 - Principal of locality, spatial locality, and temporal locality
 - Virtual memory management: segmentation, paging, caching strategies
 - Load control, swapping, and thrashing
 
Device management (3 hours)
- Physical structure and properties of devices
 - Device control and interaction, blocking, buffering, disk scheduling, DMA
 
File systems (5 hours)
- File naming, types, and logical organization
 - Space allocation and management
 - File system interfaces
 - Implementation strategies
 
Interprocess communication (5 hours)
- Terminology and issues
 - Message passing functionality, pipes, sockets, signals, shared memory, and other communication mechanisms