Computational Systems Engineering Course, Winter 2004/2005

Department of Computer Sciences, University of Salzburg

Prof. Christoph Kirsch

Time, Location: Tue 13-14, Techno-Z, T03; Th 14-16, Techno-Z, T06. First lecture on Oct 7, 2004.

Brief overview:

This course is an experiment. Within the first 3-4 weeks various concurrency models and operating system concepts will be introduced. E.g., events, threads, signals, semaphores, and sockets will be covered. Then, within the remainder of the semester, all students will, in a team-based effort, develop, implement, and run a simple web server but with state-of-the-art performance. The students will form groups of 2-3 students where each group is responsible for developing some part of the system. The students will choose, buy, and administrate the required hardware (with funding from the Computational Systems Group), install and maintain appropriate operating systems and tools, and develop and implement the server as well as the performance evaluation tools and scenarios. All sources and presentations will be made available on the web. The course hours after the introductory 3-4 weeks will be used for discussions and code reviews.


Goal of the course:

Learn how to evaluate a highly concurrent application with high-performance requirements, identify adequate concurrency model, programming paradigm and platform, develop and implement the application and the necessary computational systems infrastructure.


  • Each student is expected to read papers (see list below) before certain lectures (not more than one paper per week) and send a short summary (3-4 bullet items) of each paper by email before these lectures.
  • There will be a few home work assignments, e.g., programming exercises.
  • Teams of 2-3 students will develop and implement parts of the web server project, present their parts at the end of the semester, and write project reports that could eventually result in publications.

Papers on Thread-Based and Event-Driven Programming:

  • J.R. von Behren, J. Condit, F. Zhou, G.C. Necula, E.A. Brewer: Capriccio: Scalable Threads for Internet Services. SOSP 2003.
  • M. Welsh, D. Culler, E. Brewer: SEDA: An Architecture for Well-Conditioned, Scalable Internet Services. SOSP 2001.
  • G. Shekhtman, M. Abbott: State Threads for Internet Applications.
  • A. Adya, J. Howell, M. Theimer, W.J. Bolosky, J.R. Douceur: Cooperative Task Management without Manual Stack Management or, Event-driven Programming is Not the Opposite of Threaded Programming. USENIX 2002.
  • H.C. Lauer, R.M. Needham: On the Duality of Operating System Structures. Operating Systems Review, vol. 13 (2), 1979.
Papers on Real-Time Programming:
  • T.A. Henzinger, C.M. Kirsch: The Embedded Machine: predictable, portable real-time code. PLDI 2002.
  • C.M. Kirsch: Principles of Real-Time Programming. EMSOFT 2002.
Papers on Web Servers:
  • V.S. Pai, P. Druschel, W. Zwaenepoel: Flash: An efficient and portable web server. USENIX 1999.

Web sources: Capriccio, The C10k Problem, State Threads, Accelerating Apache.

Grading: 10% paper summaries, 20% home work, 70% project.

Mailing list: cst-winter-2004 @ cs . uni-salzburg . at

Prerequisites: C programming experience, basic knowledge of operating system concepts.

Restrictions: Course language is English or German.

Administrative contact: Petra . Kirchweger @ cs . uni-salzburg . at