This course is an introduction to computer systems software -- low-level software abstractions with an emphasis on the connection of these abstractions to underlying computer hardware. Key abstractions include threads, dynamic memory allocation, protection, and IO.
The goals are for you to learn three sets of interrelated things. The first thing is how operating systems and, more generally, computers work. Students graduating with CS degrees should believe "there is no magic": they should be able to describe the chain of events that occurs when they hit a key and cause a letter to appear on the screen from the register level (or logical gate level or transistor level) to the system architecture level to the operating system level to the application level. This is philosophically important, but it is also of practical interest to developers who need to figure out how to make a system do what they want it to do.
The second goal is for you to learn the core ideas in operating systems: virtual addressing, memory protection, concurrent programming, file systems, scheduling, transactions, etc. Often, but not always, such ideas are best explained as abstractions that some software layer (usually the operating system) provides above imperfect hardware to make that hardware usable by programmers and users. The intent is for you to understand such abstractions well enough to be able to synthesize new abstractions when faced with new problems.
Many of the ideas and abstractions that we will cover are relevant not only to OS kernels but also to many large-scale systems. Thus, a third goal of this course is to enhance your ability to understand, design, use, and implement such systems.
Last updated: Wed Jan 18 07:18:44 -0600 2012 [validate xhtml]