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.



  • 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