This is the Web site for Mike Walfish's Tuesday and Thursday CS439 section; see
If you have questions or would like help, please use
Piazza (preferred) or the staff email list, given below. This ensures
that responses are timely and consistent. Please do
not email TAs or the instructor individually; emails so addressed may be
dropped.
Description and goals
This course is an introduction to computer systems, with
operating systems as a major case study.
The goals are for you to learn three sets of interrelated things. The
first thing is how 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 operating systems but also to large-scale systems. Thus, a
third goal of this course is to enhance your ability to understand,
design, and implement large-scale systems.
The class encourages "learning by doing." The programming assignments
will be substantial. This is a necessity: you will realize that you do
not really understand many of the ideas above until you have had
to implement them or at least work through them in code.
Prerequisite: CS429 or CS429H with grade at least C-.
The work
The class consists of lectures, discussion sections, labs, exams,
readings, and homeworks:
- The lectures will cover topics in systems. The schedule is
here.
- The discussion sections will generally be divided into two
parts. The first part will cover problems: assigned homework problems
and new problems you will work in class; the second part will cover
either the labs or additional course material.
- The labs are a crucial component of this course and are
described in more detail here. You will
implement (or help implement) a number of the abstractions listed above.
Some of this work will be in the context of a real operating system that
will boot on a PC.
- The exams are described here.
- The readings are listed on the
schedule and should be completed before class. The required and
optional texts are listed below.
- The homeworks are intended to reinforce the course material.
Each student is required to present the solutions to at least two
problems in discussion section during the semester. (These
homeworks shouldn't be confused with the labs and their included
exercises.)
We will assume that you check the announcements (either on this site or
by RSS) every 24 hours. Also, we will use
Piazza and
occasionally email you (for the most urgent communications). You are
responsible for monitoring all three of these media.
A note about the labs
We recommend that you start the labs long before they are due. The
standard advice is "Start the labs early," but that is not quite right.
The best advice that we know of is "Start the labs on time, but on time
is probably much earlier than you think."
Readings
All of the texts below should be on reserve at PCL. We made the reserve
requests in the first week of class. If you have problems retrieving the
books, please let the course staff know.
- Required: CS:APP2e. This is Computer Systems: A Programmer's Perspective, Second
Edition, Randal E. Bryant and David R. O'Hallaron. (Addison-Wesley),
2010. ISBN: 0136108040
- Required: OSM:SCI. This is an online book: Operating
Systems and Middleware: Supporting Controlled Interaction, by Max
Hailperin.
- Optional and highly recommended: The C programming language (second edition), Brian W.
Kernighan and Dennis M. Ritchie. (Prentice Hall, Inc., 1988. ISBN:
0-13-110362-8.) This book is a classic reference to C.
- Optional: Operating Systems: Principles and Practice, Beta Edition,
Anderson and Dahlin. (Recursive Books, 2012. ISBN: 0985673516.)
- Optional: Modern Operating Systems (third
edition), Andrew S. Tanenbaum. (Prentice Hall, Inc., 2008. ISBN:
0-13-600663-9.)
- Optional: Principles of Computer System Design: An
Introduction, Jerome Saltzer and M. Frans Kaashoek (Morgan
Kaufmann, 2009. ISBN: 0-12-374957-3.)
- Optional: Operating System Concepts (eighth edition), Abraham
Silberschatz, Peter Baer Galvin, and Greg Gagne. (John Wiley & Sons,
2008. ISBN: 0-47-012872-0.)