This course presents the fundamentals of operating system (OS) function and design. Modern multi-programmed operating systems are sophisticated pieces of software. They provide a set of services essential to the operation of modern computers. The OS shares a finite set of resources and services, each of which can typically be used by only one process at a time, between many concurrent processes. In this course, the student will gain an understanding of the needs of computing processes, the services offered by the OS to meet these needs, and how the services are shared between concurrent processes. While the course lectures concentrate on the principles behind the design of all operating systems, students will gain knowledge about real-world systems through practical low level assignments. Programming exercises will require the student to implement programs illustrating the principles used in OS design. Basic knowledge of C and C++ programming and the UNIX environment is helpful. Additionally, we will touch on a few advanced topics including cloud computing and virtualization.