6.1. Zunächst die Übersicht

Abbildung 6-1. Asynchrone Verarbeitung im Kernel

Die technologischen Möglichkeiten, Funktionen oder gar ganze Applikationen im Kernel ablaufen zu lassen, haben sich ständig erweitert und verfeinert. Denn Vorgänge automatisiert im Kernel unterzubringen hat zwei Vorteile: Erstens wird Zeit – Kontextwechselzeit – eingespart, und zweitens verbessert sich die Reaktionszeit. Wenn also ein bestimmtes Zeitverhalten oder zyklisches Zugreifen gefordert ist, Statistiken zu erstellen sind oder im Treiber gepuffert werden soll, sind solche Funktionen geeignet und effizient.

Die Funktionen arbeiten im Prozess- oder im Interrupt-Kontext vgl. Abarbeitungskontext und Unterbrechungsmodell. Da sie asynchron zur Applikation ablaufen, werden sie unter dem Begriff »asynchrone Verarbeitung« zusammengefasst.

Asynchrone Funktionen lassen sich anhand des Zeitpunktes ihres Aufrufes voneinander abgrenzen (siehe Abbildung Asynchrone Verarbeitung im Kernel). Ein typischer Vertreter asynchroner Abarbeitung, die Interrupt-Service-Routine (auch Hardirq genannt), wird beim Eintreffen eines Interrupts aufgerufen und unterbricht jegliche aktuelle Verarbeitung mit Ausnahme einer anderen Interrupt-Service-Routine. Sie selbst ist also normalerweise nicht unterbrechbar. Für hochpriore, möglicherweise auch zeitintensive Aufgaben stehen dem Programmierer hingegen so genannte Softirqs zur Verfügung. Hierbei handelt es sich um Routinen, die direkt nach Abarbeitung der ISR aufgerufen werden. Bei Mehrprozessorsystemen können Softirqs mehrfach parallel laufen. In der speziellen Ausprägung als so genannte Tasklets laufen sie hingegen garantiert nur ein einziges Mal ab. Für periodische Aufgaben kann der Treiberprogrammierer auf – ebenfalls den Softirqs zugezählte – Timer zurückgreifen.

Die dritte Basistechnologie der asynchronen Verarbeitung stellen so genannte Kernel-Threads dar. Der Zeitpunkt ihres Aufrufes wird durch Scheduling-Algorithmen geregelt. Neben dem Aufziehen eigener Kernel-Threads können auch spezielle Kernel-Threads, die so genannten Workqueues verwendet werden. Und als besondere, einfach und direkt zu verwendende Workqueue wiederum steht die Event-Workqueue zur Verfügung. Im Gegensatz zu Kernelfunktionen, die im Interrupt-Kontext ablaufen, können Kernel-Threads – ebenso wie die Treiberinstanzen – den kompletten Funktionsumfang des Betriebssystemkerns nutzen. Konkret heißt das, dass Kernel-Threads »schlafen« können und dass Kernel-Threads Daten zwischen dem Kernel-Space und dem User-Space kopieren dürfen.


Lizenz