This is an advanced graduate course on system programming using the C programming language. C is a low-level system language specially designed to build system software such as operating system kernels, compilers, network stacks, database engines, and browsers, among others. In this course, we will study the basic design disciplines of these systems, and investigate how and why C is the right language for these tasks.
We will be employing a "learning-by-doing" rational in course, that is, we will be building diverse and practical systems using C: a compiler, a shell, a Web server, a network sniffer, a concurrence library, a debugger, and a MapReduce library.
To realize this rational, we have 7 labs planned in this course:
We hope that, by the end of this course, you will not only learn the essence of C programming, but also (and more importantly) gain a deeper understanding of computer systems and system-level programming.
Instructors: