Operating Systems - CSCI 402, Spring 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 Spring 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 register accordingly. I tend to be a stickler to rules, so there will be no exceptions.

DEN Videos

  • I will make DEN lecture videos accessiable to both of the non-DEN sections.

Discussion Sections

  • The discussion sections will be conducted by the TAs to help you with programming assignments and course material. You can enroll in one discussion section and attend another discussion section. We will not have exams or do roll calling during discussion sections. One of the discussion sections is on DEN and the lecture videos will be made accessible to all.

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.


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

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

  • 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:
    1. 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).
    2. 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.

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