In this course, the students will obtain a thorough understanding of the challenges and issues related to the design and implementation of modern multicore operating systems. The students will apply and extend their knowledge in systems, software engineering, project management, and team work.
The course covers the design and implementation of various operating systems concepts such as memory management, scheduling, inter-process communication, inter-core synchronization, protection, device drivers, file systems, and networking. Moreover, the course pays particular attention to the design of system software architectures that differ from the traditional monolithic arrangements of Unix/Linux and Windows.
During the course, the students will work together in small groups to build build a fairly complete operating system.
This is a demanding course, read the prerequisites below.
- Teach general operating systems principles, using a real research operating system to illustrate them and by reading the research papers which propose some of the ideas that the particular OS builds on.
- Give a broader perspective on operating systems which do not look like Linux, Unix, or Windows.
- Provide exposure to the practical experience of working on OS code on real "metal", including debugging, hardware access, etc. This kind of experience is hard to gain merely from reading books or papers.
- Introduce a sense of the complexity of a real OS, rather than simplified teaching OSes often used in more basic courses.
This course is about the design and implementation of operating systems,
and thus requires strong background in computer systems, software engineering,
Students must have taken an undergraduate systems course.
- CPSC 313 (or equivalent) with 85% or above, or permission of instructor
Additional requirements that are helpful for successfully completing the course.
- Proficiency in C programming is assumed
- Knowledge about computer architecture: caches, MMU, interrupts, devices
- Not afraid to read at assembly code
- Navigate technical documentation and manuals
- Familiarity with OS concepts: concurrency, asynchrony, progess management, memory management, virtual memory, networking, filesystem
- Linux development tools: shell, editors, make, gcc, gdb, ...
- General interest in system software and low-level hacking