This is an undergraduate course on computer operating systems.
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 semester.
My actual CS 402 class web site for Summer 2015 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.)
Students with a Full-time Job
- Up to 4 students per team will be permitted but no more.
- 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 in on Friday of the 3rd
week of classes, you will be expected to turn in warmup #1 by late night that Friday.
- You can earn 4% extra credit for class participation (i.e., attending lectures and signing roll sheets).
For students registered in the DEN section, you get this 4% extra credit automatically.
- The recommended preparation for this class are (1) CSCI 201L or CSCI 455x, and (2) EE 357 or EE 352L.
Basically, you should know how to program and you should know what's inside a processor/CPU and
how it works (i.e., how it 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
(thus forms a linked list). You then need to be able to follow the pointers to traverse the linked list.
Learn to use gdb
to examine memory addresses 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 semester 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.
The kernel programming assignments must run on Ubuntu 12.04. Therefore, you
might as well install Ubuntu 12.04 on your laptop or desktop as soon as
possible. 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.
- (May 20, 2015) - first day of class
- (Jun 2, 2015) - warmup1 due
- (Jun 16, 2015) - warmup2 due
- (Jun 30, 2015) - kernel1 due
- (Jul 6, 2015) - midterm (firm)
- (Jul 14, 2015) - kernel2 due
- (Jul 30, 2015) - kernel3 due
- (Aug 3, 2015) - final exam (firm)