Operating Systems - CSCI 402, Fall 2015, All Sections

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 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.)

DEN Videos

  • DEN lecture videos will be made accessiable to all of the non-DEN sections.


  • You must take all the exams in the section for which you are registered.

  • The dates and times for the final exams are deteremined by the university and there is absolutely no way to change them for you. If you know that you cannot come to the final exam for a particular section, do not register for that section because I will not change your final exam date or time.


  • 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 kernel 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 15 weeks and implement all the programming assignments yourself, you will realized that you have learned so much when the course is over.

Kernel Teams

  • 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.

Late Registration

  • 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 up to 4% extra credit for class participation. But you will only earn extra credit if you attend the lectures and discussion sections for which you are registered. (You can sit in another lecture or discussion section without prior approval. You just won't get class participation extra credit.) For students registered in the DEN section (i.e., section 29946D), you get this 4% extra credit automatically (i.e., without signing roll sheets).


  • 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, fgets, etc. 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. Please take a look at my review on pointers and make sure you understand everything there. 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. Our 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. 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. 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.

Important Dates

  • (Aug 24, 2015) - first day of class
  • (Sep 7, 2015) - Labor day holiday
  • (Sep 11, 2015) - warmup1 due
  • (Oct 2, 2015) - warmup2 due
  • (Oct 23, 2015) - kernel1 due
  • (Oct 28, 2015) - midterm for DEN/PM (MW) sections (firm)
  • (Oct 29, 2015) - midterm for TT section (firm)
  • (Nov 13, 2015) - kernel2 due
  • (Nov 25-27, 2015) - Thanksgiving recess
  • (Dec 4, 2015) - kernel3 due
  • (Dec 10, 2015) - TT final exam, 11am - 1pm (firm)
  • (Dec 11, 2015) - PM (MW) final exam, 11am - 1pm (firm)
  • (Dec 14, 2015) - DEN (MW) final exam, 8am - 10am (firm)

[Last updated Sat Sep 19 2020]    [Please see copyright regarding copying.]