The course will present the theory, design, implementation and analysis of computer operating systems. Through classroom lectures, homework, and projects, students learn the fundamentals of concurrency, process management, interprocess communication and synchronization, job scheduling algorithms, memory management, input-output devices, file systems, and protection and security in operating systems. Optional topics may include communications protocols, computer security, and real-time operating systems. The lectures will be complemented with a significant level of programming, bringing up a simple operating system from scratch, concurrently as the topics are discussed in lecture. A weekly recitation section will provide TA support and an informal laboratory atmosphere. Each student will have their own board, so development will be done largely outside the classroom at each student's pace.