You will study the design and theory of multiprogrammed operating systems, concurrent processes, process communication, input/output devices, memory management, resource allocation and scheduling are studied. The intent is to familiarize you with OS theory past and present, while exposing them to 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.
Time and Place:: Tuesdays, 6:00pm - 9:50pm, HL116
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 will be two in-class exams. The first is roughly mid-way through the semester and the second is during the last week. There is a remote possibility of a pop quiz for which no advance notice will be provided. Exams will be closed book and closed notes, unless otherwise indicated. 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 of the Silberchatz book are as follows (see the corresponding chapters in the Tanenbaum book):
Slides from the in-class lectures will be available the day following class. Here are the electronic versions of what we have so far:
Admin | ppt | |
Introduction | ppt | |
Processes | ppt | |
Process Scheduling | ppt | |
Process Synchronization | ppt | |
Threads | ppt | |
Memory Management | ppt | |
Virtual Memory | ppt | |
File Systems | ppt | |
I/O | - | ppt |
Experiments | - | ppt |
Sockets | ppt | |
Review | ppt |
[Flo00] J. S. Florido. Journal File Systems, Linux Gazette, Volume 55, July 2000. (slides: ppt, pdf)
[GAK+02] A. Goel, L. Abeni, C. Krasic, J. Snow, and J. Walpole. Supporting Time-Sensitive Applications on a Commodity OS, In Proceedings of USENIX 5th Symposium on Operating System Design and Implementation (OSDI), Boston, MA, USA, December 2002. (slides: ppt, pdf)
[HLM02] D. Hitz, J. Lau, and M. Malcolm. File System Design for an NFS File Server Appliance, Technical Report TR3002, NetApp, 2002. (slides: ppt, pdf)
[SCG+00] V. Sundaram, A. Chandra, P. Goyal, P. Shenoy, J. Sahni and H. Vin. Application Performance in the QLinux Multimedia Operating System, In Proceedings of ACM Multimedia, Los Angeles, CA, USA, November 2000. (slides: ppt, pdf)
[Wal02] C. Waldspurger. Memory Resource Management in VMware ESX Server, In Proceedings of USENIX 5th Symposium on Operating System Design and Implementation (OSDI), December 2002.
There are 4 (maybe 3) programming projects that are designed to give you some coding experience and expose you to practical systems issues.
The implementation can be done in a variety of environments and languages. However, C and Unix implementations are encouraged because of the relative ease of exploring OS systems issues in that environment. C and Unix will not be taught as part of this course. System calls and other aspects of Unix will be introduced as needed and as the course progresses. Specific Unix help on the programming project can be arranged on a case by case basis.
You will work alone or in a group of two for the project. I'd prefer to limit the groups to only 2, but groups of 3 are also possible. If you really want a group with a different number of students, come talk to me.
There is no specific CS laboratory assigned for this course. Your CCC computer accounts can be used for any and all of the assignments. Other systems, such as personal computer systems, may also be acceptable for some projects. However, you must ensure that your code compiles and runs on the CCC systems as that is where they will be turned in and graded.
Projects and due-dates will be placed here as they are defined.
Project 0: Unix Dabbling, (Not due)
Project 1: Mini Shell, (Due June 20th) (Grading guide)
Project 2: Mini Chat, (Due July 13th) (Grading guide)
Project 3: Macro Shell, (Due July 25th) (Grading guide)
In this section, there will be code samples discussed in class, practice exams or any other demonstration-type class materials.
Final exam stuff:
Mid-Semester exam stuff:
Here are samples of using shared memory and semaphores:
share-mem.c
-
create/attach to shared memory and write/read it.
share-sem.c
-
create/attach to a semaphore and signal/block on it.
Here is a simple utility to help clean them up:
ipckill
-
remove all shared memory segments and semaphores allocated
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.
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 are some code samples of the SOS:
system.h
- the
global system header file
dispatcher.c
- the dispatcher code
timer.c
- the
procedure called when a timer interrupt occurs
semaphore.c
- the
semaphore implementation
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
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.
Two virtual machine projects (one open-source) that are interesting are:
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: