CS-537: Introduction to Operating Systems

University of Wisconsin, Madison
Department of Computer Sciences
Spring 2001

Basic Information

Lecture: Tuesday and Thursday at 9:30 - 10:45
Discussion: Tuesday at 2:30 - 3:20
Where: Both lecture and discussion are in 2317 Engineering Hall ( timetable entry )

Professor: Remzi Arpaci-Dusseau (remzi@cs)
Office: 7357 Computer Sciences
Office Hours: Tuesday at 3:30pm, and Thursday at 1:30 pm, and by appointment

TA: Det Buaklee (det@cs.wisc.edu)
Office: 1302 Computer Sciences
Office Hours: Monday at 2:30pm - 4:00pm and Tuesday at 3:30pm - 5:00pm
Office Phone: 262-6600

TA: Vishal Sanghvi (sanghvi@cs.wisc.edu)
Office: 1338 Computer Sciences
Office Hours: Monday at 9:00am - 10:30am and Friday at 11:00am - 12:30pm
Office Phone: 262-6592


5/10: Thank you all for a fun class! Grades will be posted by the morning of 5/11. I will send out mail when it's all done

5/9: Exam notes
Here is an overview of exam topics for those who missed the review.
You will be allowed a single page (both sides) as a cheat sheet.

Here are some Summer Readings for those who are interested.

Old Notes


Welcome to introduction to operating systems! This course will introduce you to an exciting range of materials from the broad field of operating systems, including basic operating system structure, file systems and storage servers, memory management techniques, process scheduling and resource management, security and a few other "hot" topics.

This course assumes familiarity with basic computer organization (e.g., processors, memory, and I/O devices as covered in cs354) and data structures (e.g., stacks and hash tables). You will need to be able to program in both Java and C (or C++) to perform the assignments in the course.

Mailing List

Important announcements will be sent to the class mailing list, so please read it frequently! You are responsible for the material sent to that list. The mail sent to the class list is also archived. Note that if you are not officially enrolled in the class, we cannot add you to this mailing list because it is automatically generated by the CSL.

The mailing list is cs537-2list@cs.wisc.edu. The log of email is available at this url.


Readings will be assigned in Operating Systems: A Modern Perspective (Second Edition) by Gary Nutt, Addison-Wesley.

You may also find a number of on-line references useful. For Java references, Marvin Solomon has written an excellent tutorial, Java for C++ Programmers. He also recommends the following book on Java: The Java Programming Language by Ken Arnold and James Gosling, Addison-Wesley, 1996. You may also want to check out the materials for the self-paced CS368 course called "Java for C++ programmers".
There are also lots of helpful materials about Java available on-line. The following references are available at the Java home site.

A short overview of the C programming environment is now available too.

You will be able to use either C or C++ or the system programming assignments in the class. You may choose whichever you prefer. For those of you who want to learn C++, you might want to check out the notes and exercises for the self-paced course "C++ for Java Programmers". The best C book in the world is Kernighan and Ritchie's beautifully sparse "The C Programming Language."


As part of the course, you will complete five programming assignments. You may perform these projects on the Sun SPARCstation workstations running Solaris in the instructional clusters.

New Unix users and novice Unix users new to the CSL Unix facilities are encouraged to attend an orientation session as early in the semester as possible. You may also purchase a copy of CS 1000 (An Introductory Manual to the Unix Operating System and the Computer Sciences Department's Instructional Computing Environment) at the DoIT Tech Store (first floor of the Computer Sciences and Statistics Building).

The projects are a fundamental part of this course. Although the first assignment will be relatively easy, the remaining projects each require a significant amount of time, so do not procrastinate! It is likely things will take longer than you expect. Do not wait until the day before the assignment is due to start. These assignments should be started well over a week before they are due. All information necessary to complete the assignments will be available from the class web page.

If you plan to perform software or hardware development after graduation, you will need to know how to work well within a group. Therefore, for all projects after the first assignment, we suggest that you form groups of two students. Team members will all receive the same grade on the programming assignments.

Most of the programming assignments will use Java; however, half of the first assignment and one other assignment will require C or C++. We assume that you have enough programming background that learning the basics of a new language will not be difficult.

For some of the projects, you will be graded on how well your implementation works. For these assignments, we will test your program on a suite of input sets while you are present. Your grade will be based on how many of the tests your application passes and how well you are able to answer our questions; we will only briefly examine your code to ensure that you followed the specifications of the assignment. For the other projects, you will be graded on your design, functionality, and documentation. For these assignments, you will need to develop input sets that convince us that your application has the desired behavior. Your grade will be based on how well you describe your implementation and document its functionality. Each assignment will be worth the same number of points, although some will be easier than others.

For all Java assignments, you must adhere to the following conventions:

The following table specifies the general topic of each assignment, the tentative programming language, and a tentative due date. The programming language and due data will be fixed once the specification for the assignment has been made available.
1 Threads
2 Scheduling
3 Synchronization
4 Virtual Memory
5 File Systems
C and Java
Due Date
Feb. 6
Feb 27
March 27
April 17
May 8
Project #1
Project #2
Project #3
Project #4
Project #5


There will be two exams to test your knowledge. The exams will be closed book, and will cover material from class and the textbook. They will be equally weighted. Dates will be announced soon.


Projects are worth 60% your total grade, and the two exams will make up the rest.

Tentative Schedule

Jan 23
Jan 25
Jan 30
Feb 1
Feb 6
Feb 8
Feb 13
Feb 15
Feb 20
Feb 22
Feb 27
Mar 1
Mar 6
Mar 8
Mar 13
Mar 15
Mar 20
Mar 22
Mar 27
Mar 29
Apr 3
Apr 5
Apr 10
Apr 12
Apr 17
Apr 19
Apr 24
Apr 26
May 1
May 3
May 8
May 10
CPU Scheduling
Advanced Topics
Synchronization (cont)
Message passing
Memory Allocation
Memory Management
Spring Break
Spring Break
Virtual Memory
Virtual Memory
Virtual Memory
I/O, Disks
Class cancelled
File Systems
File Allocation
Beyond FFS
Application Case Study and Future of OS
Final Exam
Ch. 1-4 (skim)
Ch. 6
Ch. 7

Ch. 8

Ch. 9
Ch. 17.2, 17.3
Ch. 10
Ch. 11

Ch. 12
Spring Break
Spring Break

Ch. 5

Ch. 13

FFS paper

Ch. 14

Other Information
Class Survey
Project #1: Available

Project #1: Due

Project #2: Available

Project #2: Due

Project #3: Available
Spring Break
Spring Break

Project #3: Due

Project #4: available

Project #4: Due

Project #5: available

Project #5: Due

Complaints about this page, operating systems, or the woes of being an undergraduate, should be sent to Remzi Arpaci-Dusseau.