Operating Systems


This undergraduate course motivates and explains the principles of computer systems. We will introduce all relevant layers and study their connection: architecture, algorithms, computability, complexity, languages, syntax, semantics, compilers, data structures, memory management, concurrency, kernels, virtual machines, and cloud computing. For this purpose we use code examples from the Selfie Project which is an educational system of a self-compiling C compiler and a self-executing MIPS emulator.


Time, Location: First class is on Monday, October 5, 2015 at 4pm in T02. Check the schedule (iCal) for updates.

Syllabus

  1. Introduction
  2. Architecture
  3. Algorithms
  4. Computability & Complexity
  5. Languages
  6. Syntax & Semantics
  7. Compilers
  8. Data Structures
  9. Memory Management
  10. Concurrency
  11. Kernels & Virtual Machines
  12. Cloud Computing

Content

This course is on principled engineering of computer systems. We will study all relevant layers, from the lowest levels of machine architecture via algorithm, programming language, compiler, kernel, and virtual machine design to the highest levels of cloud computing. The goal is to gain a deep understanding of the many development and performance tradeoffs in systems engineering.

Goal

At the end of the course students will be able to appreciate principled engineering of computer systems but also know how one really looks like and, as a consequence, through insights in architecture, algorithms, computability, complexity, languages, compilers, kernels, and virtual machines become fundamentally better programmers and computer scientists.

Exam

The final exam will be on January 25, 2016.