New Course
Computer Science 251 -- Advanced Systems Programming

Time and Place: MWF 1:00-2:30, Maxwell Dworkin 221 (note room change!)
Instructor: Norman Ramsey, Maxwell Dworkin 231
Staff Assistant:Hetchen Ehrenfeld, Maxwell Dworkin 133
Teaching Fellow: Christopher Thorpe

Overview

To do research in computer systems, you have to implement your ideas. CS 251 presents advanced implementation techniques through case studies. The case studies give practical experience in systems programming over a wide range of topics. To solve the problems will require intensive programming. Students may work alone or may form groups according to criteria that will be discussed in class. Some problems may have to be solved using C or C++. Other problems can be solved in any language. A problem may require some knowledge of machine architecture and assembly language.

Problems

There will be four problems for the course. They are likely to be chosen from the following five candidates; students in the class will have some input into which problems are chosen.
Conservative Garbage Collection
Build a garbage collector for C or C++. You can see my lecture notes on garbage collection.
Automated Prettyprinting
Automatically prettyprint program source code or machine-generated code or data.
Translation Validation
Test the correctness of compiler transformations such as register allocation, code generation, or optimization.
Transparent Data-Compression Library
Build a compressor and decompressor, and build a dynamically linked library such that existing C codes can transparently read compressed files, without recompiling.
Phonetic String Matching
Build a framework to evaluate phonetic-matching algorithms, and provide University phone-directory service based on approximate matching.
It may also be possible to do one of the following problems instead:
  • Configurable network router (Kaashoek)
  • Call-graph profiling (Graham et al, Spivey)
  • User-level threads in Unix (Cormack)
  • Type-directed partial evaluation (Danvy)
  • Machine-independent linking (Fraser and Hanson)
  • Reading floating-point numbers (Clinger)
  • Writing floating-point numbers (Steeele and White)
  • JIT compilation to replace interpretation (Fraser and Proebsting)
  • Peephole optimization (Davidson and Fraser)
  • C program browser
  • Multi-precision arithmetic (Brinch Hansen)
  • You will address each problem in stages:

    1. Read about the problem and discuss approaches in class. All students are expected to participate.
    2. Solve the problem, possibly as a member of a team. You may work by yourself or with a team or any size. I expect results commensurate with the size of your team.
    3. Turn in a well-documented description of your implementation.
    4. Write an anonymous review of one or two other implementations.
    5. Based on the reviews you receive of your implementation, revise your solution and its written description.
    6. In class, discuss the best and worst of solutions. What did you learn?
    7. Possibly present the high points of your solution. How presentation works will depend on the size of the class.
    Grades will be based on written implementations, reviews, and class participation.

    Schedule

    Each case study will be divided into three phases: introduction, implementation, and revision. Each phase will take about a week and will include two class meetings of 90 minutes each. The class meetings will be staggered over three days (Monday, Wednesday, and Friday); the purpose of the staggering is to allow you appropriate time for implementation and revision. Because of holidays and other constraints, every problem will be scheduled differently. The schedule as best I know it is on the Web.

    Readings

    You will of course read papers related to the problems we solve. You will also read some books for general programming background. The book list is on the web.