This is an undergraduate course on computer operating systems.
(Although this course is for graduate students! USC undergraduate students must take CS 350 in order to get credit for OS.
If you are an undergraduate student, you cannnot be in this class!)
In addition to exploring concepts such as synchronization, virtual memory,
processes, file systems and virtualization. Students will develop elements
of a fairly complete operating system during the course of the summer session.
My actual CS 402 class web site for Summer 2017 is not ready yet.
Since many students are registering now, I felt that I
should post some important rules about my sections so students can know what to expect and register accordingly.
I tend to be a stickler to rules, so there will be no exceptions.
(In general, I'm bound by my own written rules and I have to stick to them.)
- I do not sign D-clearances and I will not sign anything to put one student ahead of everyone else.
Please see your adviser to get your D-clearance.
- I heard that there is a Viterbi policy that non-CS masters students cannot take a CS class during their first
year at USC. I do not know if this rule is in effect or if this rule is applicable to you during the
summer. Please understand that I will not waive this rule for anyone.
Please see your adviser if you want to know if this rule applies to you this summer.
- [BC: added 5/16/2017]
If you are on the wait list and is concerned about whether you will eventually get your D-clearance,
I can only suggest that you wait it out.
Typically, quite a few students would drop the course before the drop deadline. So, if you stay on the wait list,
there is a reasonable chance that you will get in (although I cannot make any guarantees).
According to the schedule of classes, the last day to add this course is 5/31/2017 (5/30/2017 for the "remote DEN" section, i.e., section section 29947D).
Please also see your responsibility if you register late for this course.
- This class is very demanding and the last programming assignment is
extremely difficult and very very time-consuming. The coverage of this class is very vast.
There is really no time for me to explain every topic to the point where every
student in the class understands everything perfectly because we have to move
along quickly to get you ready for the programming assignments.
So, please do not expect "spoon feeding" in this class and you need
to be prepared to figure things out on your own. Of course, you are welcome
to come talk to me about anything related to the course material, so you are not completely on your own.
You will also be expected to learn certain things completely on your own.
This class can also be very rewarding. If you work super hard for 11 weeks and
implement all the programming assignments yourself,
you will realized that you have learned so much when the course is over.
Students with a Full-time Job
- Even though you are on the wait list and there is no guarantee that you will get in,
if you intend to take this class, you are expected to attend every lecture and
submit all assignments on time (i.e., same deadlines as students who are already registered).
So, even if you get registered after warmup #1 deadline, you will still be expected to turn in
warmup #1 by the end of Tuesday of the 3rd week of classes! For all the assignment submission dates,
please see the bottom of this web page.
- You can earn 4% extra credit for class participation
(i.e., attending lectures and signing roll sheets).
For students registered in the remote DEN section (i.e., section 29947D),
you get this 4% extra credit automatically (i.e., without signing roll sheets).
- The prerequisites for this class are (1) CSCI 201L or CSCI 455x, and (2) EE 357 or EE 352L.
But prerequisites are only enforced for undergraduate students. For grad students, they are
turned into "recommended preparation". The way to interprep these recommended preparation is that
you should know how to program and you should know what's inside a processor/CPU and
how it works (i.e., how the CPU executes machine instructions).
- The programming assignments of this class will be very demanding (kernel 3 will be extremely difficult and very very time-consuming).
You will be required to write C code. Since C is
a proper subset of C++, knowing C++ well would give you enough
background. However, some of the things that available in C++,
such as strings and streams, are not be available in C.
So, you need to know how to do things such as
manipulating C-strings (i.e., null-terminated array of characters)
using functions such as strchr, strrchr, strlen, strcmp, strncpy, etc.
You also need to know how to perform console and file I/O in C
using functions such as read/write, printf/snprintf, fread/fwrite,
No other programming language will be accepted.
We will not teach C in this class.
You are expected to pick up C on your own if you are not familiar with it.
If you are not good with programming in C and you want to get prepared for
this class, you can start by implementing some basic data structures and algorithms.
For example, read a file of integers, sort them in a linked list, and sort the
linked list using selection sort, bubble sort, insertion sort, merge sort, and
quick sort is a good place to start. To practice file I/O and string manipulation,
you can change the file of integers to lines of text and parse the lines into fields
(e.g., separated by semi-colons or tabs) then sort the lines based on a particular
field and print the sorted records. You must understand what a memory address
is and what it means to store the address of a data structure into a pointer data type
(e.g., in forming a linked list). You then need to be able to follow pointers to traverse a linked list.
Please take a look at my review on pointers and make sure you understand everything there.
Finally, you need to learn to use gdb
to examine memory locations and debug your program.
- You must know how to use Unix/Linux. If you are not familiar with Unix/Linux,
you must learn it on your own. We will not teach you how to use Unix/Linux in this class.
If you are not familiar with Unix/Linux, I strongly urge you to read
Unix for the Beginning Mage (by Joe Topjian)
before the course starts.
You should also get familiar with the Unix/Linux development environment (vi/pico/emacs, cc/gcc, make, etc.)
If you don't have access to a Unix/Linux machine, you can install your own.
Our kernel programming assignments must run on Ubuntu 14.04
(if your machine is slow or has less than 4GB memory, Ubuntu 12.04 is also acceptable). Therefore, you
might as well install Ubuntu 14.04 on your laptop or desktop as soon as
If you do not have a personal laptop or desktop that runs Windows or Mac OS X, please contact the instructor as soon as possible.
You should learn how to use the Terminal program to compile, run, and debug programs.
It's probably a good idea to also learn how to use a text editor (such as vi, emacs, or nano)
to create and edit C program source code.
- (May 18, 2017) - first day of lecture
- (May 30, 2017) - warmup1 due
- (Jun 13, 2017) - warmup2 due
- (Jun 27, 2017) - kernel1 due
- (Jul 4, 2017) - Independence Day, university holiday
- (Jul 6, 2017) - midterm (firm)
- (Jul 11, 2017) - kernel2 due
- (Jul 27, 2017) - kernel3 due
- (Aug 1, 2017) - final exam (firm)