CS230/330 : Operating Systems (Spring 2000)
Instructor
Name: Dave Beazley
Office : Ryerson 257B
Phone : (773) 702-9111
email : beazley@cs.uchicago.edu
Office hours: Whenever I am around (which is most of the time)
Teaching Assistants
- Dustin Mitchell (djmitche@cs.uchicago.edu).
- Emil Ong (emilong@midway.uchicago.edu), tutorial sessions.
Overview
The primary objective of this class is to cover the fundamental
concepts central to the design, implementation, and use of
modern operating systems. Topics include but are not limited to
processes, threads, memory management, file systems, interprocess
communication, I/O systems, scheduling, synchronization, and locking.
In addition, the course has a number of secondary objectives such as
sharpening your programming skills, giving you some experience working
on a substantial software project, and preparing you for future work
in advanced systems research.
Prerequisites
- CS222 Computer Architecture (strongly recommended).
- CS116 C/C++ (mandatory).
- Prior experience with data structures and algorithms.
- Prior experience with the Unix/Linux operating system.
Textbooks
Required
- Operating System Concepts, 5th Ed., by Silberschatz and Galvin.
- The Practice of Programming, by Kernighan and Pike.
We will be covering at least the first six parts of the Silberschatz
book. The Kernighan and Pike book is good bedtime reading if you have
never worked on a large software project before.
Recommended
The following books are highly recommended if you are the least bit
unsure about your preparation for this class.
- The C Programming Language., by Kernighan and Ritchie (a.k.a, the "K&R" book).
- The Unix Programming Environment., by Kernighan and Pike (another classic).
- Advanced Programming in the Unix Environment., by W. Richard Stevens.
Grading Structure
- Unix shell project (15%)
- Kernel project (75%)
- Final Exam: (10%) (optional)
Grading Scale
- 80-100 : A
- 60-79 : B
- 40-59 : C
- 20-39 : D
- < 20 : F
And Now a Few Words About "The Project"
By now, you have hopefully taken a quick look at the grading structure
for the class and noticed that there is no daily homework or any kind
of midterm. Even the final is somewhat inconsequential (not to
mention that it's optional). The bottom line is that this class
revolves entirely around a substantial programming project in which
you will be working in groups to implement a fully-functional
Unix-like operating system kernel. Thus, even though there is no
daily busywork, you should plan on spending a fair amount of time
working in the lab throughout the quarter. Furthermore, it goes
without saying that you will not receive a passing grade for the class
unless you also receive a passing grade on the project.
With that said, there are a few things you should probably keep in mind:
- This is an advanced computer science course that is targeted
towards undergraduate CS concentrators and graduate students. I
assume a certain level of proficiency with C/C++ programming as well
as familiarity with basic data structures such as linked lists,
trees, hash tables, heaps, stacks, queues, and so forth. If you
aren't up to speed on these things or any of the stated course
prerequisites, it is your responsibility to figure it out on your
own.
- I fully expect you to be able to find relevant programming
information on your own. For instance, you should be well-versed in
how to use Unix man pages as well as finding programming information
in books and on the net.
- The development environment for the project is Sun Solaris and
ANSI C. You should be somewhat familiar with basic Unix commands, a
text editor such as emacs or vi, and use of the C compiler.
- I do not expect you to know every little detail of C programming
or systems programming at the start of the course. However, you will
be an expert at the end of the quarter.
- The time commitment required for the kernel project is
substantial. At a minimum, you should plan to spend at least as much time
on the project as you would in a class with daily homework assignments such as algorithms.
At a bare minimum, you should be spending 10-15 hours a week outside of class
working on the project. I will do my part to make sure you are properly caffeinated.
- Due to the challenging nature of the project, a significant amount
interaction tends to occur outside of the classroom and in the
computing labs. Therefore I want to encourage you to interact
with your fellow classmates, provide assistance to those who might be struggling,
and to engage in an open exchange of ideas. Part of your project grade will
be based on your lab participation.
- Last, but not least, the kernel project is actually a lot of fun.
After all, you're going to be writing code that is so sick, so
depraved, and so twisted, it would make all of those HTML-jockeys want
to run away in a screaming horror. Besides, what could be better than
getting a nice springtime tan from the glow of a CRT?
Where to go for help
Operating systems is traditionally one of the most challenging
computer science courses. Do not hesistate to come see myself or the
TAs if you have any problems or concerns. Our goal is to make sure
that you succeed in this class.
Emil Ong's tutorial sessions will include both lecture reviews and useful
strategies for the project. Plan to attend these tutorials, as they will
make your work on the project much easier.
Dustin Mitchell's primary responsibility is to help you become an
expert C programmer by the end of the quarter. He will not keep specific
office hours for the class, but is available by appointment and on a
walk-in basis. If all of the above has made you a bit queasy, it is
probably in your best interest to introduce yourself to Dustin soon.