UNIVERSITY OF WISCONSIN-MADISON
Computer Sciences Department
CS 736
Fall 2011
Barton Miller

Project List

(Project Assigned: Wednesday, September 28)
(Project Proposal Due: Friday, October 14, in class)
(Midway Interviews: Monday, November 7)
(Draft Report to Referees: Wednesday, December 7, 4pm)
(Referee Reports to Authors: Monday, December 12, noon)
(Final Report Due: Wednesday, December 14, 4pm)
(Project Presentation Session: Monday, December 19, time TBA)

General Comments

The projects are intended to give you an opportunity to study a particular area related to operating systems. Your project will require a test implementation, measurement study or analysis, literature search, and evaluation.

The project suggestions below are briefly stated. They are intended to guide you into particular areas and you are expected to expand these suggestions into a full project descriptions. This gives you more freedom in selecting an area and more burden in defining your own project. There may be more issues listed for a project than you can cover. If you have a topic of your own that is not listed below, you should come and talk with me so we can work out a reasonable project description.

You will write a paper that reports on your project. This paper will structured as if you were going to submit it to a conference. I will provide more details on the project report later in the semester.

You should work in teams of two people (and, in certain cases three people) on the project and report.

Projects

Here are a few project suggestions. I have mentioned other ideas in class and I encourage you to develop an idea of your own.

(1) Dynamic Instrumentation API:

The Paradyn project has developed a library for the analysis and patching of binary (executable) programs and libraries, for both the executable files and running programs. This library, called the Dyninst API, allows programmers to write tools that can patch code into unmodified programs in a machine-independent way. So, a tool that uses Dyninst can work on x86 (32 and 63 bit), IA64, Power, and SPARC. Many simple tools have been built using Dyninst for tracing and debugging, and more complex tools for doing such things as checkpointing and process migration.

With Dyninst, you can extract structural information such as control flow and call graphs, and identify functions, basic blocks, and instructions. You can instrument code and patch it to change its behavior, either statically (before execution) or dynamically (during execution).

The goal is to choose some analysis, instrumentation, or control task, and build a Dyninst-based tool. The task could be in the area of tracing, program analysis, modeling, cyber-security and forensics, performance profiling, or debugging.

(2) Random Testing of Programs:

Join a distinguished line of CS736 projects! In the past (1990, 1995, 2000, and 2006), we have used random input to test the reliability of application programs on UNIX and NT. These techniques have been quite effective in finding bugs, and have been widely cited. Fuzz testing has become a fundamental technique in both the testing and security communities, and it all started with CS736 projects. There are a few different fuzz projects that you might undertake:

A. Fuzz Testing of Threads

This notion of random testing can be applied to domains such as thread scheduling. The goal of this project is to test multi-threaded programs by randomizing and biasing the thread scheduler. Such randomization and bias has the potential to expose synchronization problems in multi-thread programs. As multi-core processors increase the prevalence of multi-threaded programs, such testing only becomes more interesting.

You will have to choose a threading environment, probably pthreads, understand what type of controls an application program has over the scheduling decisions, and how you will manipulate these controls under test. You will also have to choose a set of programs to test and (when you find bugs), identify the causes of the bugs.

B. Comparing the Free Unix Variants

The goal of this project is to take the previous study of applications on various platforms and repeat the study on command-line and X-window applications across the various free/open UNIX systems such as Linux, BSDi, and freeBSD. As a product of this project, we would like to provide: (1) an update of the tool set that can be used by other developers, (2) bug reports for the software vendors, and (3) bug fixes for these bugs.

(3) A Real /proc for Linux:

Linux uses the archaic ptrace interface for debugging and process control, and only uses the /proc file system for monitoring or informational purposes.

As far back as 1984, Unix developers saw /proc as a better way to control processes. The Solaris operating system (Sun's version of Unix) developed a nice version of /proc (which was also used by IBM in AIX and SGI in Irix). The Plan 9 operating system further extended and cleaned up /proc.

The goal of this project is to modify and extend a recent version of Linux to use /proc for debugging purposes. You are free to choose which specific version of /proc that you want to support.

(4) An API for Determinized Programs

In the Dtrheads paper, we read about an approach to determinizing the execution of multi-threaded programs to make their behavior reproducible. Even though the programs were made to be deterministic in their execution, they still used the normal pthreads interface (which can, of course, create programs that are far from deterministic).

If we accept the approach from Dthreads, then it is natural to ask if we should be programming in a way that has a simpler API that more closely matches the semantics guaranteed by Dthreads. Such an interface might be smaller, simpler to program, simpler to implement, and potentially provide better performance under the Dthreads techniques. The goal of this project would be to develop such an interface and prototype it.

(5) Linux's Pedigree

In the 1980's, every vendor had their own, proprietary, somewhat incompatible version of the Unix operating system. There were SunOS, Solaris, Ultrix, Unicos, HP-UX, AIX (at least five variants!), Irix, Sinix, and Dynix, just to name a few. This balkanization of the Unix world frustrated software developers and helped to allow the "standard" Windows system to dominate.

In recent years, it appeared that the dominant and quasi-standard version of Unix had become Linux. Such standardization would allow it to compete with Windows on a more equal footing; a software developer knew that if they ported their software to run on Linux, it should run on all distributions of Linux.

Unfortunately, the various Linux distributors (such as Red Hat, Tao, Ubuntu, and SuSE) are now adding their own code, so that they distinguish their distribution. In some cases, it is merely additional services on top of Linux, but in other cases, they are changing the kernel, its interface, and the way that the software is built and linked. These changes cause incompatibilities that might balkanize the Linux world.

The goal of this project is to study the basic Linux kernel, runtime libraries, and basic utilities, to identify the ways in which some of the common distributions vary. These results are interesting both qualitatively (what kinds of things change and in what areas?) and quantitatively (how much of the code changes?).

Project Proposal

The project descriptions listed above a intentionally brief. You will need to expand and refine these to develop your own project. Different groups may choose the same topic, but have significantly different emphases.

Your project proposal will describe your goals, methods, implementation outline, evaluation criteria, and resources needed. First, you should describe the basic problem that you will be addressing. Next, you should provide a more detailed description of how you will approach the problem. This description should be contain much more detail than the brief paragraphs given above. You will provide an outline of features that you project will include, an implementation plan, and an evaluation plan.

Project proposals will typically be 3 to 4 double-spaced pages.

Referee Report

Each of you will referee the paper from another group. I am providing you with a sample referee report form, that is similar to one that I used for a recent conference. I am also providing you with two sample referee reports, to give you an idea of what might appear in a real report.

In general, a referee report starts with a summary of the main idea(s) in the paper, and then has an overall statement of the quality. You should then review the main technical ideas. In addition, either a marked-up copy of the paper, with typos and related errors, or a summary of typos and related errors should be given to the authors. 

Valid HTML 4.01 Transitional


Last modified: Wed Oct 5 10:59:45 CDT 2011 by bart