You will study the design and theory of multiprogrammed operating systems, concurrent processes, process communication, input/output devices, memory management, resource allocation and scheduling. The intent is to familiarize you with OS theory past and present, while exposing some practical issues in OS implementation. Hence, part of the course deals with bookwork, part with implementation projects and part with OS research papers. Prerequisites are a working knowledge of common data structures such as stacks, queues, and linked lists; a knowledge of computer organization; a strong programming background; and an interest in learning about Operating Systems.
Required Textbook:
Or:
Good Reference Textbooks:
Final grades will be computed as follows:
Final grades will reflect the extent to which you have demonstrated understanding of the material, and completed the assigned projects. The base level grade will be a "B" which indicates that the basic objectives on assignments and exams have been met. A grade of "A" will indicate significant achievement beyond the basic objectives and a grade of "C" will indicate not all basic objectives were met, but work was satisfactory for credit. No incomplete grades will be assigned unless there exist exceptional, extenuating circumstances. Similarly, no makeup exams will be given unless there exist exceptional, extenuating circumstances.
There may be homework or quizzes assigned without warning in class that account for some fraction of your grade. The purpose of these assignments is to gauge how well you are following the course material. In the event that an insufficient number of these have been provided by the end of the term, the portion of the class grade in this category will be folded into Exams and Projects.
There will be two in-class exams. The first is roughly mid-way through the term and the second is during the last week. Exams will be closed book (and notes) with the exception of a single sheet of paper (front and back) on which you can write (handwritten, not typed) whatever notes you wish. The majority of each exam will cover basic ideas and objectives of the class with a few questions testing additional understanding and insight.
Late anything will be be penalized 10% of total assignment value per day (with the weekend counting as one day) or partial day, and no assignments will be accepted after seven days beyond the due date. All assignments are due at the start of class on the due date. Projects will be submitted as directed in class. Exceptions to these rules can be made only beforehand.
Here is the list of topics covered in this course:
The reading material for the various chapters, provided in approximately the order it is presented in class:
You should check out the assignment timeline to help you plan for doing homeworks, projects and exams.
Slides from the in-class lectures will be available shortly after they are presented, depending upon how things go. Here is what we have so far:
Admin | ppt | |
Intro | ppt | |
Processes | ppt | |
Scheduling | ppt | |
Synchronization | ppt | |
Threads | ppt | |
Memory Management | ppt | |
Virtual Memory | ppt | |
I/O | - | ppt |
Review | ppt |
There are 4 projects. The projects are the programming assignments you will have for the course. You must work in groups of 2 for the projects (unless specified otherwise). Groups of 3 are possible, too, but please check with me first. Working in groups will give you valuable ``real-world'' experience as well as provide you with a ``built-in'' source for help. Do remember, however, that all exams will be taken alone. Make sure each group member understands the programs completely!
Another constraint is that for most of the projects, you will be using the Fossil Lab, which has only 30 machines. Your group will be assigned a machine to use for the projects, although you can use alternate Fossil machines (when they are free) for browsing, etc. Note that each group will have priority on it's machine, even if others are using it. Please see the Fossil Web page for more information.
You will need to turn in your projects on-line using turnin. More detailed instructions will be provided when projects are due.
Projects and due-dates will be placed here as they are defined. Here is what we have so far:
Project 0: Linux Dabbling, (Not due)
Project 1: Background Process Scheduling, (Sep 08) (Grading guide)
Project 2: Hidden Processes, (Sep 21) (Grading guide)
Project 3: Remote Shell, (Sep 30) (Grading guide)
Project 4: Process/Thread Accounting or Memory Accounting (Oct 11) (Grading guide)
There are 2 short homework assignments (assigned after the mid-term). Homeworks are to be turned in individually. Discussion of problems among students is encouraged, but when it comes to ultimately solving the problem (and writing down the answer), your answers must be your own.
Homework and due-dates will be placed here as they are defined. Here is what we have so far:
Homework A, (October 3rd) (Solution)
Homework B, (October 12th) (Solution)
In this section are any code samples discussed in class, practice exams or any other demonstration-type class materials.
Final exam stuff:
Mid-Term exam stuff:
Here are two samples showing a race condition and using semaphores to fix it:
crit.tar
-
add/subtract to a shared variable.tar xvf crit.tar
gcc critical.c shm.c
a.out 1 &; a.out -1
crit-sem.tar
-
add/subtract to a shared variable.tar xvf crit-sem.tar
gcc critical-sem.c shm.c
a.out 1 &; a.out -1
Here are some samples showing the use of software signals:
signal.c
- simple use of a Unix signal handler.
signal2.c
- another simple use of a Unix signal handler.
signal3.c
- still another simple use of a Unix signal handler.
signal-usr.c
- using user-defined signals
signal-alarm.c
- using signal to catch alarms.
signal-child.c
- using signal for parent-child communication.
signal-child2.c
- receiving the signal from a child process exiting.
A very simple example using a software pipe (with a fork()):
pipe.c
- Simple use
of the pipe()
call
Here are some sample programs concerning processes:
fork.c
- Simple use of
the fork()
call
execl.c
- Simple use
of the execl()
call
make-zombie.c
- code that shows how zombies are created.
make-orphan.c
- code that shows how orphans are created.
Here is the Linux scheduler and the Linux process control block:
linux-sched.c
-
the scheduler proper
linux-pcb.c
-
the process control block
Here are some code samples from the SOS:
system.h
- the
global system header file
dispatcher.c
- the dispatcher code
timer.c
- the
procedure called when a timer interrupt occurs
sys-interrupt.c
- the
procedure called when a system call is made
thread-small.c
- the
start of some SOS code to support threads
system-parallel.h
- the modifications to the SOS header to allow a two-processor
OS
use-proc-table.c
-
code showing two-processor solution to access processor table
From the minds of professors Claypool, Finkel and Wills comes the Free/Open Source Laboratory (aka the "Fossil lab"). The Fossil lab is funded under an NSF grant designed for laboratory use in the cs3013 (Operating Systems) and cs4513 (Distributed Computing Systems) courses. The lab includes 30 PC's running Linux on a dedicated network and a server running Linux for use as a router and firewall. Students using the Fossil lab have the opportunity to run experiments on a dedicated machine, do some kernel "hacking" and gain valuable system administration experience that is not possible in current CS laboratory environments.
Linux is a completely free Unix operating system. Linux runs primarily on 386/486/Pentium PC's, but has been ported to various other architectures. If you like Unix, want to learn more about system administration and have access to a PC, I recommend checking it out. Read a short info sheet or a more detailed info sheet for more information. You might also want to check out The Cathedral or the Bazaar, an interesting look at open source software development, such as Linux.
You might also try the Linux Source Navigator, a CGI interface to browse the entire Linux kernel source. The Navigator formats the raw source tree on-the-fly, using italics, bolds, colors and hyperlinks to present the source in a much more manageable format. Right now, there's just a 2.0.0 kernel set up to use i386 architecture, but more versions may be there shortly.
Some useful course material (e.g. slides, notes, Java simulations, etc.) includes:
You can also have a look at the Yahoo! Operating Systems pages and related WWW pages:
Or perhaps you would like to know more about some of the companies involved in commercial Operating Systems: