CS 3013 C-Term 1998
More detailed information can be found here, including: time and place, purpose, prerequisites, books, grading, cheating, and computer systems and labs.
Here is the list of topics covered in this course. They will be mapped to chapters from the text as the course progresses.
You might 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.
Most of the slides:
Virtual Memory:
Parallel Systems and Threads:
Microsoft Windows NT:
There will be 6 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:
The projects are the programming assignments you will have for the course. I encourage you to work in groups of two for the projects. I'd prefer to limit the groups to only 2, but if you really want a larger group, come talk to me. 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!
The projects and due-dates will be placed here as they are defined:
With the exception of project 0, you will need to turn in your assignments on-line. Check here for information on how to turn in your assignments.
In this section are any code samples discusses in class, practice exams or any other demonstration-type class materials.
Here is a topic outline for the first exam. You might try the first practice exam to help you prepare (with solution!).
Here is a topic outline (with reading list) for the second exam. Here is the second practice exam to help you prepare (with solution!).
Here is a topic outline (with reading list) for the third exam. There is a small third practice exam (with a solution).
Here are the code samples for the simple operating system we have been looking at:
system.h
- the
system header file used by all the simple OS samples.
create-proc.c
- a
code sample of a process creation routine for the simple OS.
dispatcher.c
- a
code sample of a dispatcher for the simple OS.
timer.c
- a
code sample of a timer interrupt function for the simple OS.
system-parallel.h
- modifications to the system header file to allow for a two-processor OS.
use-proc-table.c
- modifications to the SelectProcessToRun()
function to allow
for a two-processor OS.
Here are the Unix code samples we've used in demos:
Here is a nifty perl script that will help you clean up shared memory, message queue and semaphore system resources (see project 2 for more information):
ipckill
- remove
message queues, shared memory and semaphores.
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 samples of using the wrappers for semaphores and shared memory as in Project 2:
sem.c
-- an example
showing simple semaphore use.
critical.c
-- an example
showing how access to an unprotected critical region can lead to
problems (if you run two or more of these at once).
critical-sem.c
-- the same critical section code sample protected with semaphores.
Here's how you use the "env" argument to
env.c
-- walk through and printout all the environment variables.
Here is the simple "Bite Me" client-server example that shows the use of the socket wrappers used in Project 3:
server.c
-- the "Bite Me" server.
client.c
-- the "Bite Me" client.
server.h
-- the "Bite Me" header file.
sock.c
-- the socket wrapper code.
sock.h
-- the socket wrapper header file.
Makefile
-- the Makefile to build the client and server.
Here is the simple "Up Yours" client-server example that shows the
use of threads as in
Here are the demos that have separate add and subtract threads that access a global variable:
add1.c
-- add and subtract to an unprotected variable.
add2.c
-- add and subtract to an variable protected by a mutex.
Makefile
-- the Makefile to build the add programs.
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 Operating Systems: