Operating System Design and Implementation Course ID 15605 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 Required Background Knowledge Strong grasp of all concepts and techniques covered in 15-213/513 (18-213, 18-613, 18-243, 18-600, or 14-513), especially: C run-time model, translating between C and assembly language, ability to write complicated pointer-based code. 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. This course - 15-605 - is for graduates students. Undergraduates should enroll in 15-410. 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 Learning Resources Lecture material; Hardware documentation; Specification documents; Textbook Assessment Structure Programming Projects: 55%; Midterm exam: 15%; Final exam: 20%; Homework and Book Report: 10% Extra Time Commitment 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. Course Link https://www.cs.cmu.edu/~410/