Software Systems
Fall 2006


  • Professor: Allen Downey,, Olin Center 359, x2558.

  • Class time: Monday and Thursday 10-11:50am.

  • Textbooks:

    • Tanenbaum, Modern Operating Systems, Second Edition.

    • Oualline, Practical C Programming, 3rd Edition.

    • Downey, The Little Book of Semaphores, Second Edition. I will hand this book out in class; you don't have to buy it, and you should avoid looking at the online version!

  • Web page: The class web page is at On campus, it can be abbreviated wb/ss. There is also a class wiki at

  • Class mailing list:


Software Systems covers topics in Operating Systems, Networks and Runtime systems. It is intended to give students an understanding of the software systems that underlie common application programmer interfaces, and to allow students to develop and apply tools of system analysis.

During the first 8 weeks, students work on series of exercises covering the memory hierarchy, caching, the process abstraction, indexing and address spaces, timesharing, scheduling, and allocation. During the next 6 weeks, students work in small groups on an extended project that applies techniques of performance evaluation to a problem of the students' choice. These projects might include workload measurement and modeling, simulation, modification of existing systems, or implementation of new operating system features.

Regular class meetings will be used for lectures, hands-on work and collaborative work, as well as written evaluations. The prerequisite for the class is Software Design or intermediate programming skills.


Work in this class will include readings from a variety of sources, homeworks (some of which will involve programming), a final project, two exams, a final exam, and written quizzes.

The total course load is intended to be 12 hours per week (including class time); the load should be spread evenly across the semester.

Final grades are determined by a weighted average of exam scores, quizzes, homeworks, the project, and an additional factor that reflects my subjective impression of the quality of your work, your progress and effort, and your contribution to the educational goals of the class.

  • Quizzes: We will have about one quiz per week. The quizzes are intended to help figure out how things are going, so they make up a small part of the final grade. Since there are many quizzes during the year, it is too difficult to try to schedule makeups and other accomodations. Instead, I will drop the lowest quiz score at the end of the semester.

  • Exams: The two in-class exams are scheduled for Monday 2 October and Monday 6 November. The final exam will be given during the final exam period.

    If you miss one of the in-class exams, your final grade will be based on the other exams, possibly with some points deducted, depending on the reason. If you miss both in-class exams or the final for any reason, you cannot pass the class. In that case it may be possible to take an Incomplete, at the discretion of the Office of Student Life.

  • Homeworks: During the first 6-8 weeks of the class, we will have weekly homeworks that are meant to give you an opportunity to apply and practice the material we cover in class. Homeworks are graded on a coarse scale: check-plus has the numerical value 10/10; check has the value 8/10; check-minus has the value 6/10.

    I believe that these homeworks are most effective if we have an opportunity to discuss them in class shortly after the due date. In order to make that possible, I will have to enforce the due dates with some strictness. Homework that is up to one day late can get a check or lower; homework that is more than one day late can get a check-minus or lower. But late is still much better than never!

  • Project: During the last 6-8 weeks of the class, you will be working on a project. The final report for the project is due on the last day of instruction, December 12. I will provide more information about the projects later.

  • Competency assessment: One part of this class is focused on the design and implementation of software systems; it is intended to develop competency in Design and Diagnosis. A second part of the class is focused on performance evaluation and modeling; it is intended to develop competency in Quantitative and Qualitative Analysis. Finally, the organization of the class projects is intended to develop competency in Lifelong Learning. I may assess some or all of these competencies in this class.


The easiest way to reach me is by email; I read my mail fairly often, even in the evening and on weekends. You are also welcome to call me at x2558 any time, or at home during normal waking hours.

If I am in my office and my door is open, you are welcome to come in and talk to me. If I can't meet with you, I will let you know, and schedule a meeting for later. When I know my schedule for the semester, I will make it available.

You are encouraged to communicate with the other members of the class using whatever means you choose, including the class mailing list. You can join the mailing list (and change your membership configuration) at

It is appropriate to use this mailing list to discuss anything pertaining to the class or the topic of the class, broadly defined. For example, I will probably post messages about news items that pertain to computer science or technology and society.


Some of the coursework you will do this semester is intended to help you develop understanding of the material, and some is intended to allow me to evaluate your understanding. While you are developing your understanding, you are encouraged to work with other students, but when you are being evaluated you will have to work alone (with the exception of the project, which is collaborative).

As always, your actions in this class are bound by the Honor Code; in particular, the principle of integrity states, `Each member of the college community will accept responsibility for and represent accurately and completely oneself, one's work, and ones actions.'' When you submit course work for evaluation, you are representing that the work is entirely yours, unless you state otherwise. Representing someone else's work as your own is a serious violation of the Honor Code.


The following are the topics we will be covering, roughly in the order we will be covering them:

  1. Basic performance modeling, bandwidth and latency.

  2. Memory hierarchy, caching, locality.

  3. Threads and synchronization.

  4. Process abstraction, indexing, address space.

  5. Timesharing, scheduling.

  6. Memory management, allocation.

  7. File system implementation, database implementation.

  8. Performance evaluation: measurement, modeling, experimental design.

Depending on student interest (and time), we will cover some of these additional topics:

  1. I/O implementation, interrupt handling, real time OS.

  2. TCP/IP, congestion control.

  3. OS support for parallel processing.

  4. Peer-to-peer networks, distributed hash tables.

  5. Garbage collection.

  6. Database performance and out-of-core algorithms.