More static, but detailed information can be found here, including: time and place, purpose, prerequisites, books, grading, and computer systems and labs.
Here is the list of topics covered in this course.
You might check out the assignment timeline to help you plan for exams, homework and projects.
The reading material for the various chapters are as follows:
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 | |
Inter-Process Communication | ppt | |
Parallel Systems and Threads | ppt | |
Memory Management | ppt | |
Virtual Memory Management | ppt | |
Sockets | ppt | |
File Systems | ppt | |
I/O Devices | ppt | |
Final Exam Review | ppt |
There are 4 (maybe 3) short homework assignments. Homeworks are to be turned in individually. Discussion of problems among students is encouraged, but when it comes to ultimately solving the problem, 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:
There are 4 (maybe 3) programming projects that are designed to give you some coding experience and expose you to practical systems issues.
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.
Projects and due-dates will be placed here as they are defined. Here is what we have so far:
shell.c
proj2.tar
(extract
using tar xvf
)
proj3.tar
(extract
using tar xvf
)
In this section, there will be code samples discussed in class, practice exams or any other demonstration-type class materials.
Final exam stuff:
Mid-term stuff:
Some sample thread code that adds and subtracts
an integer (compile with -lpthread
):
add1.c
- add and subtract to an unprotected variable.
add2.c
- add and subtract to an variable protected by a mutex
Sample code for using TCP sockets:
talk.tcp.c
-
client talk code for TCP
listen.tcp.c
-
client listen code for TCP
Misc:
get-opt.c
- code that parses command line arguments (fairly) painlessly.
make-zombie.c
- code that shows how zombies are created.
make-orphan.c
- code that shows how orphans are created.
Here are some sample programs concerning Process stuff :
Here are some code samples of the SOS:
dispatcher.c
- the dispatcher code
system.h
- the
global system header file
timer.c
- the
procedure called when a timer interrupt occurs
semaphore.c
- the
semaphore implemenations
use-proc-table.c
-
code showing a two-processor solution to access processor table
mem-alloc.c
- code to show basic memory allocation
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 code samples from Linux:
sched.c
- the main kernel scheduling code
sched.h
- the header file for sched.c
linux-pcb.h
-
the Linux process control block (pcb) structure.
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 managable 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: