Operating System Design and Implementation

Course ID 15410

Description Operating System Design and Implementation is a rigorous hands-on introduction to the principles and practice of operating systems. The core experience is writing a small Unix-inspired OS kernel, in C with some x86 assembly language, which runs on a PC hardware simulator (and on actual PC hardware if you wish). Work is done in two-person teams, and "team programming" skills (source control, modularity, documentation) are emphasized. The size and scope of the programming assignments typically result in students significantly developing their design, implementation, and debugging abilities. Core concepts include the process model, virtual memory, threads, synchronization, and deadlock; the course also surveys higher-level OS topics including file systems, interprocess communication, networking, and security. Students, especially graduate students, who have not satisfied the prerequisite at Carnegie Mellon are strongly cautioned - to enter the class you must be able to write a storage allocator in C, use a debugger, understand 2's-complement arithmetic, and translate between C and x86 assembly language. The instructor may require you to complete a skills assessment exercise before the first week of the semester in order to remain registered in the class. Auditing: this course is usually full, and we generally receive many more requests to audit than we can accept. If you wish to audit, please have your advisor contact us before the semester begins to discuss your educational goals.

Key Topics
Process model; virtual memory; concurrency, threads, locking, interrupts, preemptibility, race conditions; design synthesis; design for robustness; introductory understanding of typical OS topics (file systems, transactions, scheduling, security concepts and technologies, memory consistency)Parallel programming models / frameworks

Learning Resources
Lecture material; Hardware documentation; Specification documents; Textbook

Course Relevance
For strong, confident Systems students who want to understand every detail of a small OS kernel by: solving hard design problems; implementing a kernel from scratch; debugging challenging run-time model violations due to concurrency mistakes; and being graded rigorously based on code quality. Students should expect to devote the time and focus required to, at the end of the semester, be able to confidently debug complex problems which they would not have been able to describe at the start of the semester.

Course Goals
Synthesize into a considered design; Compare and contrast the properties of memory regions according to the Unix process model; Compare and contrast the properties and roles of x86-32 registers; Explain the interactions of input/output operations and per-thread scheduling states; Implement address spaces, including TLB management
Explain why and how multiple threads are used in a single address space; Analyze and write lock-based multi-threaded code and lock objects, including detecting and documenting race conditions and deadlock; Explain the relationship between interrupts and other forms of concurrency; Use multiple tools and approaches to debug concurrency-related code failures; Write robust code that responds appropriately to resource exhaustion
Write clear, appropriately documented code; Define and illustrate key computer security concepts such as protection domains, capabilities, access control lists, and least-privilege execution; Define, illustrate, and apply, in a basic fashion, key computer security technologies such as secure hashes, symmetric cipers, and asymmetric ciphers; Describe and illustrate key elements of higher-level operating systems features such as file systems, inter-process communication, real-time scheduling, disk arrays, and log-based storage; Study an OS-related topic via a medium-sized non-textbook technical reading assignment and report in writing on what was learned.

Pre-required Knowledge
Strong grasp of all concepts and techniques covered in 15-213/513, especially: C run-time model, translating between C and assembly language, ability to write complicated pointer-based code.

Assessment Structure
Programming Projects: 55%; Midterm exam: 15%; Final exam: 20%; Homework and Book Report: 10%

Extra Time Commitments
A three-hour evening exam will occur in one of the two weeks before mid-semester grades are due. Students should not schedule travel during those weeks before the exact date and time are announced.

This course 15-410 is for undergraduates. Graduate students should enroll in 15-605.

Course Link
https://www.csd.cs.cmu.edu/course-profiles/15-410_605-Operating-System-Design-a…