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 Fall 2014 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 register accordingly. There will
be no exceptions.
- I will make DEN lecture videos accessiable to both of the non-DEN sections.
- Up to 4 students per team will be permitted but no more.
- All members of a team must be registered in the same section.
(You will not be permitted to have a teammate who is registered in a different section.)
- If you are already registered in one section and would like to switch to another section
because your kernel assignment partners are there,
I'm sorry that there is no way to do that. You can either unregister yourself and get on the
wait list of another section, or stay in your current section and look for other kernel assignment partners.
- You must take all the exams in the section for which you are registered.
- 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 come to 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 3% extra credit for class participation. But you will only
earn extra credit if you attend the lectures for which you are registered.
(You can sit in another lecture without prior approval. You just won't get
class participation extra credit.)
- The prerequisites 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.
- 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.
- You should also learn how to use Unix (we will not teach you how to use Unix in this class).
You should also get familiar with the Unix development environment (vi/pico/emacs, cc/gcc, make, etc.)
If you are not familiar with Unix, I strongly urge you to read
Unix for the Beginning Mage by Joe Topjian
before semester starts.
- If you want something to do before the semester starts, I would suggest the following:
- Learn C. If you need programming exercises, get a basic data structure book and implement ALL
the basic sorting algorithms. For every sorting algorithm, implement it using an array, and then using a linked list.
Create your own test data and put them in a text file. Each line of text should contain a numeric value
and a description. Use C file I/O to read unsorted data lines from this file, parse it, sort it based on the
numeric field, and print out the sorted data (values and description).
- Our kernel programming assignments must run on Ubuntu 12.04. Therefore, you
should install Ubuntu 12.04 on your laptop or desktop.
Learn how to use the Terminal program to compile, run, and debug programs.
Learn how to use a text editor (such as vi, emacs, or nano to create and edit C program source code.