Softwarekonferenz für parallele
und hochperformante Programmierung
Heidelberg, Print Media Academy, 19.-21.Februar, 2019

// Posix Threads und fork(2) und setuid: Fallstricke aus der Praxis

Der Vortrag wird zeigen, welche Probleme bei der Implementation von Bibliotheken auftreten, die intern Threads verwenden, und die in einem Umfeld funktionieren müssen, das in keinster Weise auf Threads vorbereitet ist. Berichtet wird von Erfahrungen aus dem Samba-Projekt.

Samba ist ein klassischer Unix-Prozess, der pro Client einen Prozess forked. Es ist vor Multicore- und Multi-Thread-Programmierung entstanden und hat damit historisch große Mengen an nicht Thread-safe Code angehäuft. Externe Anforderungen wie Asynchrones I/O beziehungsweise dessen Nicht-Existenz in Linux erzwingen jedoch die Benutzung von Threads. Diese Voraussetzungen gelten für eine Menge anderer historisch gewachsener Software, die über Jahre gewartet wird.

* Threads und fork passen in Posix nicht zusammen: Womit kann eine Bibliothek nach einem Fork rechnen? Was muss sie tun, um im Kindprozess noch zu funktionieren?

* Threads und globaler Zustand: Wie kann ein Thread mit Aufrufen von setuid(), chdir() und anderen Systemaufrufen umgehen, die den Prozesszustand verändern?

Vorkenntnisse
Kenntnisse in Posix-APIs.

Lernziele
Kennenlernen der Schwierigkeiten, die sich aus dem Posix-API zu Threads in Kombination mit prozessglobalen Zuständen wie dem aktuellen Arbeitsverzeichnis, der aktuellen Benutzerkennung ergeben. Zusätzlich ein Abriss über die Probleme, die sich aus Bibliotheken ergeben, die intern Threads benutzen, die aber fork-safe sein müssen.


// Volker Lendecke Volker Lendecke

ist Mitglied im Samba Team und Mitgründer der SerNet GmbH in Göttingen. Im Samba-Code stammt ein großer Teil der Infrastuktur für asynchrone Programmierung und Thread-Infrastruktur von ihm.