====== Advanced Operating System Implementation (AOSI) ====== AOSI focuses on the design and implementation issues of computer systems, and more specifically, operating systems. In this course, students will experience in implementing several key aspects of modern operating systems, including virtual memory, kernel and user mode, system calls, threads, context switches, interrupts, interprocess communication, coordination of concurrent activities, and the interface between software and hardware. In addition, students will learn the fundamental design principles and considerations of operating systems, as well as advanced systems like flash memory, file systems and virtual machine monitors. ===== Course Information ===== ====Instructors==== *[[pub:members:Haibo Chen]] Office Hour: Tuesday 4pm - 5pm (software building, room 1-307) *Zhengwei Qi Office Hour: Monday 2pm - 4pm (software building, room 1-207) ====Teaching Assistants==== *[[pub:members:Peng Wang]] ====Grading==== *Lab 1~6: 50% *Final Exam:35% (Labs will be reflected in exam) *Homework: 10% (Help you to understand OS Implementation/Labs) *Course performance (5%) (Q&A in classroom, Attendance) ====Text Books==== There are no offical textbooks. We will send you course materials before and after class. However, we recommend students to use the following books as references: * xv6: a simple, Unix-like teaching operating system. By Russ Cox Frans Kaashoek Robert Morris. Online * Computer Systems: A Programmer's Perspective (2nd Edition) Addison Wesley. By Randal E. Bryant / David R. O'Hallaron ===== Course Project ===== Student will build an operating system called JOS, which is an exokernel style operating systems but have Unix-like interfaces. The key difference between JOS and Unix-like OSes is that most parts of Unix functions are implemented as user-level library instead of directly inside the kernel. The entire course project will composed of two parts: assembly preliminaries (adapted from CMU 15-213) and JOS labs (adapted from MIT 6.828): * [[os:labs:Lab1]]: Binary Bombing * [[os:labs:Lab2]]: Buffer Overflow * [[os:labs:Lab3]]: Booting a PC * [[os:labs:Lab4]]: Memory Management * [[os:labs:Lab5]]:: User Environments * [[os:labs:Lab6]]: Preemptive Multitasking ==== Tentitive Course Schedule ==== Note that the schedule is tentative and we will change the schedule along with the teaching process. The slides will be available here after each class. ^ Tuesday ^ Topics/Slides ^ Friday ^ Topics/Slides ^ | | Course Intro/Assembly Priliminary-1 | | Assembly Priliminary-2 (Lab 1 out) | | | Buffer Overflow | | Lab1 Due, Lab2 out | | | Intro to exokernel, jos and xv6 | | PC hardware and x86 programming (Lab2 Due, Lab3 out) | | | Virtual Memory Hardware/Software | | | | | JOS and xv6 memory layout (Lab3 Due, Lab4 out) | | Process Creation System call, Interrupt, and Exception Handling | | | Multiprocessors, Concurrency and locking | | | | | Process scheduling | | Processes and coordination | | | Scalable Locking (Lab4 Due, Lab 5 Out) | | | | | Lock-free coordination| | Bugs | | | Race Detection | | | | | File Systems | | Crash Recovery (Lab 5 Due, Lab 6 out) | | | File system performance and fast crash recovery | | | | | Performance and durability | | Flash File Systems | | | Rethink Virtual Memory on Flash | | | | | Intro to Virtualization & CPU virtualization (Lab 6 Due)| | Memory Virtualization | | | I/O and Hardware-assisted Virtualization | | Final Project Presentation | | | Final Exams (Sample Final Exams will be available here) | | | ==== Tools and Resources ====