Beschreibung
Das vorliegende Buch analysiert und visualisiert Schritt für Schritt auf elementarer Ebene die Konzepte und Probleme der Parallelverarbeitung für herkömmliche und echtzeitfähige Multitasking/Multithreading-Systeme (Uniprozessoren, parallele und verteilte Systeme), und liefert Lösungen in Form von C-Funktionen, unterstützt von einigen wenigen Assembler-Routinen. Am Ende steht ein kompletter Betriebssystem-Kern mit einer Reihe zugänglicher Funktionen für die angewandte parallele Programmierung zur Verfügung (Task-Kommunikation, Betriebsmittelnutzung, Echtzeitbetrieb etc.) und eine Reihe nicht-zugänglicher Funktionen, die den Betriebssystem-Kern realisieren und den sicheren, lebendigen und gerechten Ablauf paralleler Anwender-Programme ermöglichen. Multitasking ist die Fähigkeit eines Betriebssystems, mehrere Programme (Tasks) quasi parallel auf einem Prozessor ablaufen zu lassen. Für den Betrachter sieht es so aus, als würde jedes Programm ständig laufen. So wird ihm die Illusion der Parallelität vermittelt. Mit Windows, Linux, VxWorks, QnX, RMOS, etc. sind eine ganze Reihe verschiedener Multitasking/Multithreading-Betriebssysteme für kommerzielle oder Echtzeit-Anwendungen im Einsatz. Sie haben eines gemeinsam: Sie realisieren Parallelität nach den gleichen elementaren Prinzipien und Methoden z.B. zur Synchronisation von Tasks/Threads und deren Kommunikation. Unterstützt wird die Multitasking-Fähigkeit dieser Betriebssysteme von ausgereiften Prozessor- Architekturen, wie z.B. den Protected Mode-Mechanismen der INTEL-Prozessoren (x86-Familie). Weil Parallelität sehr schnelle Wechsel von Task zu Task erforderlich macht, übernimmt die dafür notwendigen Operationen die Hardware und befreit damit den Betriebssystem-Kern von dieser aufwendigen Arbeit. Zusätzlich schützt die Hardware die Adressräume der Anwender-Tasks und des Betriebssystem- Kerns und schließt auf diese Weise gegenseitige Störungen aus. Die Hauptlast für den korrekten Betrieb eines Multitasking/Multithreading-Systems tragen jedoch seine Kern-Funktionen. Sie sorgen dafür, daß parallele Programme sicher und lebendig ablaufen. So dürfen z.B. Botschaften, die zwischen den Tasks ausgetauscht werden, nicht verloren gehen (Sicherheit). Auch sollten Tasks am Gesamtgeschehen gleichmäßig beteiligt werden (Lebendigkeit). Und keine der Tasks sollte begünstigt oder gar ausgesperrt werden (Gerechtigkeit). Dies gilt in gleicher Weise auch für Parallel-Programme, die über Rechnergrenzen hinweg in verteilten Multicomputer- Systemen ablaufen. Eine weitere Dimension der Programmierung stellt für die System-Software die parallele Multicore-Architektur bereit. Die meisten Multicore-Prozessoren unterstützen "shared memory" in Hardware, wobei jeder Prozessor-Core in den gemeinsamen Adressenraum schreiben kann und ihn lesen kann. Dabei ist die Korrektheit des "shared memory"-Systems von Bedeutung. Von Nutzen sind hierfür zwei Sub-Aspekte, die sich in die Speicher-Konsistenz und in die Cache-Kohärenz einteilen lassen. Die Speicher-Konsistenz definiert das für die Software sichtbare Verhalten des Speichersystems ("in sich stimmig") und die Cache-Kohärenz unterstützt die Konsistenz ("Zusammenhalt"), indem sie die Kopien im verteilten Cache-System immer auf dem neuesten Stand hält. So analysiert und liefert das vorliegende Buch die Fundamente der parallelen System- Programmierung für Singlecore-Prozessoren, für verteilte Multicomputer-Systeme und für die parallele Multicore-Architektur. Sie veranschaulicht das Zusammenwirken der Betriebssystem- Mechanismen und der hierfür erforderlichen und unterstützenden Prozessor-Hardware an über 400 Abbildungen und realisiert die typischen Funktionen eines Betriebssystem-Kerns.