This course is an introduction to operating system design and implementation. We study operating systems because they are examples of mature and elegant solutions to a complex design problem: safely and efficiently sharing system resources and providing abstractions helpful to applications.
For the processor, memory, and disks, we discuss how the operating system allocates each resource and explore the design and implementation of related abstractions. We also explore techniques for improving performance and reliability. For example, we discuss scheduling policies for better utilizing the processor, virtual memory techniques for managing memory utilization, and caching techniques for improving disk performance.
Programming assignments using both Assembly and the C programming language will provide hands-on experience implementing core operating system components in a realistic development environment.
We will examine the design and implementation of a UNIX-like operating system in detail and cover general operating systems concepts, such as processes, threads, memory, virtual memory, device drivers, filesystems, scheduling, concurrency, security, and virtualization.
Spring 2017, Fall 2017,
Spring 2018, Fall 2018,
Spring 2019, Fall 2019,
Spring 2020, Fall 2020,
Spring 2021, Fall 2021,
Spring 2022, Fall 2022,
Spring 2023, Fall 2023