Design and implementation of operating systems. Topics include process synchronization and interprocess communication, processor scheduling, memory management, virtual memory, interrupt handling, device management, I/O, and file systems. Hands-on study of the xv6 teaching operating system design and kernel internals. Experience with commercial virtualization tools and open source software.
COMS W3137 Data Structures and Algorithms, COMS W3157 Advanced Programming (or good working knowledge of C), and COMS W3827 Fundamentals of Computer Systems.
The enrollment for this class this semester will be limited. Please register early if you plan to take this class this semester. If the class is full and you would like to take the class, please email the instructor and come to the first day of class.
Required Linux Reference: Linux Kernel Development, 3rd Edition, Robert Love, Addison-Wesley Professional, New York, NY, 2010 (paper or electronic copies available from Amazon.com and Columbia University Bookstore).
Computing requirements: You should have your own computer to take this class, on which you will install either VMware Workstation for Windows or Linux, or VMware Fusion for Mac. A CS account will provide access to VMware licenses and software at no additional cost. Students will also require use of The Android Nexus 7 Tablets (current edition) as will be discussed further on the first day of class. You should also be able to send and receive emails; access courseworks.columbia.edu, piazza.com, and the class web site; and download and print pdf files.
Additional materials: we will use two open-source kernels: xv6 teaching kernel from MIT and the Linux kernel. The xv6 kernel is small and easy to understand. It comes with both code and a commentary. xv6 is particularly good for illustrating core OS concepts and implementation techniques and for making discussions concrete. The Linux kernel is in widespread use. You'll study it, and you'll do kernel programming assignments within it on a real Android device. By doing so, you'll learn much relevant systems programming skills. More materials will be made available online at the course Syllabus page.
|50%:||Homework Assignments: There will be six homework assignments. Your first programming assignment grade will always be counted in calculating your grade; your lowest homework assignment grade from the other five assignments will be dropped. Each assignment will have both non-programming and programming problems. The programming problems will involve kernel-level programming in the xv6 or Linux kernel.|
|20%:||Midterm: The midterm is one class period, open book, closed mobile devices, and calculator permitted. The midterm will cover all material discussed in the course up to the week before the exam.|
|30%:||Final: The final exam is scheduled at the normal final exam time for this class period. The final is open book, closed mobile devices, and calculator permitted. The final is cumulative and will cover all material discussed in the course.|
|0%:||No "extra credit" work.|