CS 239 Section 3: Readable Software Systems

Spring 2004

Lectures:      TR 2-3:50pm, Franz 1260 (Most classes will complete at 3:30.)
Instructor:      Eddie Kohler
Office hours:      M 2-3pm or by appointment

T 5/25    Links to papers for L15 are available. L15 will continue the operating systems unit for another day.
   Old news

L15 R 5/27    Links to papers for L16-17
Handout 13: Problem Set 3 [PDF]
L14 T 5/25    Handout 12: Project Writeup Guidelines [PDF]
L12 T 5/18    Links to papers for L13-15
Handout 11: Problem Set 2 Solutions [PDF]
L10 T 5/11    Links to papers for L11-12
L8 T 5/4    Links to papers for L9-10
L7 T 4/27    Handout 7: Sample Solutions for Problem 3 in Problem Set 1 [PDF]
Handout 8: Problem Set 2 [PDF]
Handout 9: Network Stack Readings [PDF]
Handout 10: Revised Schedule [PDF]
L6 R 4/22    Handout 5: Problem Set 1 Solutions [PDF]
Handout 6: Project Proposal Guidelines [PDF]
Links to papers for L6-8
L3 T 4/13    Handout 4: Measurement & Profiling Readings [PDF]
Links to papers for L4-5
L2 R 4/8    Handout 2: Concrete Asynchronous I/O and Problem Set 1 [PDF]
L1 T 4/6    Handout 1: Course Overview [PDF]
Links to papers for L1-3

Introduction: Speedy, reliable, flexible software systems must be easy to program, so that programmers can analyze and improve the systems' performance and correctness. This seminar will look at recent systems literature, focusing on tractability, programmability, and ease of analysis: in a word, readability.

What does "software system" mean here? A program that interacts with the outside world (other programs) under unusual performance and/or reliability constraints. Canonical examples are operating systems, routers, load balancers, web servers, and databases. Microsoft Flight Simulator isn't a software system by this definition: who cares if it fails? But programs that run on actual airplanes are.

What does "readable" mean? Programmable, extensible, easy to reason about, and fun. Probably "programmable" and "fun" are most important. My underlying assumption is that systems programming is not fun enough (although it's pretty fun). Systems would be better if systems programming were more fun, because then we'd want to solve system problems, rather than to avoid dealing with them. We'll focus less on automatic techniques, and more on human programmers.

Over the course of the term, we should cover individual system abstractions, performance measurement and analysis, building blocks like scheduling and notification, state storage (soft state vs. hard), distributed system structure (peer-to-peer vs. client/server), security, and more.

This course differs from Rupak's Computer-Aided Verification seminar and Todd's seminar in a couple ways, but it will be useful to take all three. In this seminar, systems issues like performance will be primary, and our goal is to broadly improve readability; we'll cover individual techniques like verification in less depth. Fewer proofs, more code.

The class will be structured around presentations of papers from the recent systems literature, and a project. (There may also be programming assignments.) One type of good project would be to take a software system important for your research and use techniques learned throughout the term to make it more "readable". The project writeup would contain both code comparisons and in-depth measurements, showing how the system improved its performance and/or reliability.

Tentative Grading: 25% paper presentations and discussion, 75% assignments and projects. There will be no midterm or final exam.

Informal Prerequisites: CS 111 (Operating Systems) or equivalent. Systems programming experience will be extremely helpful.


Old news
T 5/18    Links to papers for L13 are available.
T 5/4    Links to papers for L9 are available.
Version 3 of readable-ps2.tar.gz is available.
Su 5/2    Version 2 of readable-ps2.tar.gz is available.
W 4/28    Download readable-ps2.tar.gz
Also, the problem set itself has been updated slightly.
T 4/20    For Thursday's class, please read "The Click Modular Router", by me, Robert Morris, Benjie Chen, John Jannotti, and M. Frans Kaashoek, ACM Transactions on Computer Systems 18(3), August 2000.
R 4/8    Please note the problem set included in Handout 2, which is due Thursday 4/15.
The reading assignment for Lecture 3 is here.