Semesterwochenstunden 2 Vorlesung + 2 Übung
ECTS-Punkte 6

Ziele

Die Teilnehmer lernen die Nebenläufigkeit von Prozessen als ein weitreichendes, grundlegendes Prinzip in der Theorie und Praxis der modernen Informatik kennen. Durch die Untersuchung und Verwendung unterschiedlicher formaler Modelle gewinnen die Teilnehmer ein vertieftes Verständnis von Nebenläufigkeit. Dabei lernen die Teilnehmer wichtige formale Konzepte der Informatik korrekt anzuwenden. Das im ersten Teil der Veranstaltung erworbene theoretische Wissen wird in der zweiten Hälfte in der (Programmier-) Praxis angewendet. Dabei lernen die Teilnehmer verschiedene Phänomene des nebenläufigenden Programmierens in den formalen Modellen zu beschreiben und mit deren Hilfe konkrete Lösungen für die Praxis abzuleiten. Des Weiteren werden die Teilnehmer in der Praxis existierende Konzepte auf diese Art auf ihre Verlässlichkeit hin untersuchen.

Inhalt

Nebenläufigkeit als Konzept

  • Potentieller Parallelismus
  • Tatsächlicher Parallelismus
  • Konzeptioneller Parallelismus

Nebenläufigkeit in der Praxis

  • Objektorientierung
  • Betriebssysteme
  • Multi-core Prozessoren, Coprozessoren
  • Programmierte Parallelität
  • Verteilte Systeme (client-server, peer-2-peer, Datenbanken, Internet)

Die Schwierigkeit von Nebenläufigkeit

  • Ressourcenkonflikte
  • Fairness
  • Gegenseitiger Auschluss
  • Verklemmung (Deadlock)
  • gegenseitige Blockaden (Livelock)
  • Verhungern (Starvation)

Grundlagen der Nebenläufigkeit

  • Sequentielle Prozesse
  • Zustaende, Ereignisse und Transitionen
  • Transitionssysteme
  • Beobachtbares Verhalten
  • Determinismus vs. Nicht-Determinismus
  • Algebren und Operatoren

CCS: Der Kalkül kommunizierender Prozesse

  • Konstruktion von Prozessen: Sequenz, Auswahl, Rekursion
  • Nebenläufigkeit
  • Interaktion
  • Strukturelle operationelle Semantik
  • Gleichheit von Beobachtungen
  • Implementierungsrelationen
  • CCS mit Datentransfer

Programmieren von Nebenläufigkeit

  • Java vs. C++
  • Objekte in Java
  • Sockets, Protokolle, Datenstroeme in Java
  • Shared Objects und Threads in Java
  • Shared Objects und Threads als Transitionssysteme
  • Monitore und Semaphoren

Analyse und Programmierunterstützung

  • Erkennung von Verklemmungen
  • Zusicherung von Sicherheit und Lebendigkeit
  • Model-Basiertes Design von Nebenläufigkeit
  • Software Architekturen für Nebenläufigkeit