CS230/330 : Operating Systems (Winter 2002)
Instructor
Name: David 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) or by appointment
Teaching Assistants
- Varsha Dani (varsha@cs.uchicago.edu)
- Brian Ward (bri@cs.uchicago.edu)
Graders
- Aquinas Hobor (aahobor@cs.uchicago.edu)
Class Information
Overview
The primary objective of this class is to cover concepts central to
the design and implementation 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 security. A secondary objective of this course
is to give you some experience working on a substantial software
project and to prepare you for future work in systems research.
Prerequisites
- CS116 C/C++ Programming.
- CS222 Computer Architecture.
- Knowledge of basic data structures.
- Prior experience with the Unix operating system (highly recommended).
Textbooks
Required
- Operating System Concepts, 6th Ed., by Silberschatz, Galvin, and Gagne.
We will cover at least the first four parts of the book (chapters 1-14), with
selected topics from part 6 (protection and security).
Recommended
The following books are not required, but you may want to make a
purchase if you are unsure about your preparation for this class.
- The C Programming Language, by Kernighan and Ritchie (a.k.a, the famous "K&R" book).
- The Practice of Programming, by Kernighan and Pike.
- Advanced Programming in the Unix Environment., by W. Richard Stevens.
Grading Structure
- Unix shell project (10%)
- Kernel project (60%)
- Midterm code review (15%)
- Final code review (15%)
Grading Scale
- 90-100 : A
- 80-89 : B
- 70-79 : C
- 60-69 : D
- < 60 : F
Graduate Credit
There are no extra course requirements for graduate students.
However, graduate students are held to a much higher standard when
grading the kernel project. Undergraduate students electing to take
the course for graduate credit will be held to this higher standard
and may receive a lower grade if their work is not comparable to that
of the graduate students.
Class Accounts
To access the class machines, you will first need to obtain a CS
account. Please go to
http://www.cs.uchicago.edu/info/services
to obtain an
account. A dedicated set of Sun Solaris machines are used for this
class. These machines are only available to students in CS230/330 and
are intended to provide an environment in which you can experiment
without receiving the wrath of annoyed system administrators. The
names of the class machines are as follows:
- stonecrusher.cs.uchicago.edu
- sunspot.cs.uchicago.edu
- stimulation.cs.uchicago.edu
- sidewinder.cs.uchicago.edu
Three of these machines are located in Ryerson 257 and can be used at
the console. Otherwise, all of the machines are remotely accessible
via 'ssh'.
A few words about the project
Operating systems is a very demanding course that requires dedication
and a significant amount of programming. Most of your grade in this
course is determined by a class project in which you will work in
groups to implement a fully-functional operating system kernel.
Everything you might have heard about the project is true. Therefore,
even though I will not be assigning daily busywork, you should plan on
spending a considerable amount of time working on the project.
Also, be advised that
you will not pass the class unless you receive a passing grade on the
project.
With this said, here are few things to keep in mind:
- This is an advanced computer science course intended for graduate
students and advanced undergraduates. I assume that you are reasonably
proficient with C/C++ programming and basic data structures. If you
aren't up to speed on these topics, it is your responsibility to hit
the books now.
- You should be able to work independently and find relevant
programming information on your own. For instance, you should know how
to use Unix man pages and how to find programming information in books
and on the internet. Don't expect an excuse of "I couldn't figure out
how to do it because you didn't tell us in class" to work here. When
in doubt, post a question to the class mailing list---we will answer
your questions (provided they are asked).
- 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 a C compiler. We will
provide some help to get you started, but this class isn't meant to be
an introduction to Unix. If you have never used Unix before, you
might consider installing Linux on your own computer and playing around with it.
- The time commitment required for the kernel project is
substantial. Based on previous course evaluations, students
report spending 15-30 hours per week outside of class working on the
project. Please keep this in mind when planning your time schedule.
I will do my part to make sure you are properly caffeinated.
- A significant amount of interaction tends to occur outside of the
classroom and in the labs. Therefore I encourage you to interact with
your classmates, to 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. Hint: a lot of
OS students tend to hang out in Ryerson 257 where there are machines,
snacks, and a generally high degree of OS-related mayhem.
- Last, but not least, remember that the kernel project is actually
a lot of fun. Not only do you get to write your own operating system,
you're going to be writing code that is so sick, so depraved, and so
twisted, it will make all of those lame script-kiddies want to run
away in horror. Besides, what could be better than getting a nice
winter tan from the glow of a CRT?
Midterm and final code review
Part of your grade is determined by a midterm and final code review.
For these code reviews, your kernel project group will meet
with myself and the TAs to discuss your project. In the
review, you may be asked to describe certain aspects of your kernel
implementation and design. We may also ask questions about how you
might modify your kernel to accomplish certain tasks. The primary goal of
these code reviews is to check on your progress and to
identify potential problems that would prevent you from successfully
finishing the project. The reviews might also be used to identify
project slackers (see below). Of course, this obviously doesn't apply to anyone
in this class.
Programming languages
The programming language used in this course is ANSI C. Although C++
could probably be used, most programmers don't understand C++ well
enough to use it in this class without blowing their whole leg off.
Therefore, it may not be used. We will provide some assistance to get
you started with C. However, you should consider getting the book
"The C Programming Language" by Kernighan and Ritchie if you don't
have it already.
How to fail
Despite the difficulty of this course, only a handful of students have
ever failed. All of them failed because they simply didn't do any work
on the project or they let the rest of their group do all of the work
(while they sat around and goofed off). Be aware that even if your
project partner earns an A, you can still get a well-deserved F for
lack of participation. Please don't become the newest member of this
"elite" club.
Academic Dishonesty
You are encouraged to interact with your classmates and to discuss
various design aspects of the projects and assignments. However, the
work you hand in must be your own. Blatant copying or sharing of
solutions or source code will result in an F in the course and
referral to the college administration. Also, be advised that the
operating system project changes from year-to-year. Therefore, past
"solutions" to the project are of questionable utility.
Taking care of your health
The best way to complete the OS class project is to make steady daily
progress. However, some students have the mistaken assumption that
they can simply finish each part of the project a couple of days
before the deadline in some kind of frantic coding marathon. This is
NOT a pretty sight! Aside from the obvious loss of sleep,
waiting to the last minute has caused some students to suffer from
repetitive stress injuries. Don't let this happen to you.
- Don't try to do the project all at once---work on it a little bit
each day. You will be surprised at how easy it is when you are
well-rested and you aren't working against the deadline all of the
time.
- Take frequent breaks. Walk around. Get some fresh air. Think
about the project away from the computer for awhile.
- Let your project partner do their fair share of the work. Don't
hog the terminal and be the one who does all of the typing.
- If you see someone slouched over a terminal, give them a dope slap
and tell them to sit up straight and get on with it.
Where to go for help
Operating systems is traditionally one of the most challenging
computer science courses. Do not hesistate to see me or the
TAs if you have any problems or concerns. Our goal is to make sure
that you succeed in this class.