Systemprogrammierung: Virtuelles Memory, IPC, Shared Libraries

Will man in Tiefen des Systems steigen, die dem Alltagsprogrammierer normalerweise verborgen bleiben, ist dieser Kurs genau der Richtige. Linux und Unix bieten an der Basis eine Vielzahl von Schnittstellen, die es ermöglichen, hochperformante Anwendungen zu schreiben. Hier wird ein Überblick gegeben.

Kursinhalt

  • Virtuelles Memory. Speicherverwaltung in modernen Bertriebssystemen basiert auf sogenanntem virtuellen Memory. Zum Beispiel bleibt dem Benutzer verborgen, dass unter Umständen Speicherbereiche seiner Programme auf die Festplatte ausgelagert werden (Swap), oder dass der Code von zwei Instanzen desselben Programmes nur einmal im Hauptspeicher liegt.

    • Memory Mappings: Grundlagen

    • Sichtbarkeit: “Private” vs. “Shared”

    • Speicherzugriff: Schutzmechanismen

    • Assoziierte System Calls: mmap, mlock, mlockall, …

    • Realtime-Aspekte

  • POSIX IPC. Netzwerk-Kommunikation mittels Sockets ist nur ein Mittel, Prozesse miteinander kommunizieren zu lassen. IPC (Inter Process Communication) ist eine Sammlung weiterer Mechanismen, auf die hier eingegangen wird.

    • Shared Memory

    • Semaphoren

    • Message Queues

  • Neue, Linux-spezifische Systemcalls. Gewisse Mechanismen in Unix sind steinalt und haben bis heute überlebt, obwohl es keineswegs einfach ist, sie fehlerfrei zu benutzen - man denke an Signale und Timer. Linux führt die Unix-Tradition “Everything is a File” konsequent weiter und verpasst genau diesen Mechanismen ein alternatives Interface, das genau auf diesem Prinzip beruht.

    • Signal Handling: signalfd

    • Timer: timerfd_create

    • Events: eventfd

  • Shared Libraries. Dynamisch ladbare Libraries sind ein mächtiges, wenngleich kompliziertes, Werkzeug, um Flexibilität, Ressourcenschonung, und einen wasserdichten Upgradepfad zu erreichen.

    • ELF: “Executable and Linkable Format”

    • Automatisches/implizites Laden: Linux Loader

    • Explizites Laden mit dlopen(): “Loading Scopes” etc.

Empfohlene Vorkenntnisse

Solide Kenntnisse in C werden vorausgesetzt, genau wie eine Grundkenntnis des Systems (vgl. Einführungskurs).