This course is an undergraduate level operating system course, designed to provide a comprehensive examination of the design principles of operating systems. Topics include concepts of operating systems, processes and process management, threads and threads programming, CPU scheduling, synchronization and deadlock, memory management and virtual memory, file system, I/O system, and various advanced topics such as networking, distributed systems and OS security. Upon completion of the course, each student will gain a solid understanding of modern operating systems via a series of challenging mini-projects.