System Level Programming

Course Number 705101 | Wintersemester 2019/20


Daniel Gruß


The goal of this class is to introduce concepts, relevant for system-level programming. This includes deepening and strengthening your understanding of basic stuff—like pointers—or more basic stuff—like compiler errors—and getting in touch with things like semaphores, fork, malloc or POSIX.

The course topics include

  • Refresh and complement Linux Basics, Debugging and C/C++ know-how
  • Understand memory behavior of programs and fault-aware dynamic memory management
  • Interaction of threads and processes in C/C++ (POSIX, Fork, Exec, waitpid, pipes)
  • Synchronization of threads and processes (semaphores, mutexes, condition variables)
  • Memory Mapped I/O and shared memory (POSIX)

The learning experience in this course is hands-on.


All the material for the course can be found here.

Administrative Information

This course currently is only a practical exercise (KU). Instead of a lecture you have to acquire the knowledge on your own (which is by itself a great exercise). The practicals are completed by submitting your results and defending your solutions in an oral exam.


  • Basic knowledge of C/C++

These prerequisites are best fulfilled by taking the following courses beforehand:

  • Introduction to Structured Programming
  • Software Development Practical Exercises


Daniel Gruß

Assistant Professor

View more