Open Source im professionellen Einsatz

Kernel- und Treiberprogrammierung mit dem künftigen Kernel 2.6 - Folge 4

Kern-Technik

,

Die Treiber aus den ersten Kern-Technik-Folgen reagieren nur auf Anfragen einer Userspace-Applikation. Andere Vorgänge laufen im Kernel asynchron ab. Sie reagieren auf Hardware- und Software-Interrupts, sind Timer-gesteuert oder arbeiten als eigenständiger Kernel-Thread.

Es spart Zeit, Vorgänge automatisiert im Kernel ablaufen zu lassen. Das bewies beispielsweise der im 2.4er Kernel integrierte Webserver »khttpd«, auch Tux genannt[1]. Er ist im Kernel 2.6 allerdings wieder verschwunden. Die Technik, einzelne Funktionen oder ganze Applikationen im Kernel ablaufen zu lassen, wurde aber erweitert und verfeinert. Wer ein bestimmtes Zeitverhalten implementieren oder zyklisch auf Daten zugreifen muss, Statistiken erstellen oder Informationen puffern will, der verwendet asynchrone Funktionen.

Aufgeräumt

Dem im Kernel 2.4 vorherrschenden Wildwuchs hat Linus Torvalds in Version 2.6 Einhalt geboten. Neben den in der dritten Kern-Technik-Folge[4] vorgestellten Interrupts (Hard-IRQs) gibt es jetzt die beiden Basistechnologien Soft-IRQ und Kernel-Thread.

Zur Unterscheidung: Beim Abarbeiten eines Hard-IRQ sind weitere Interrupts auf dem gleichen Prozessor im Regelfall nicht zugelassen. Soft-IRQs und Kernel-Threads hingegen können sehr wohl von Interrupts unterbrochen werden. Soft-IRQs laufen im so genannten Interrupt-Kontext ab, Kernel-Threads im Prozess-Kontext (siehe Kasten "Begriffe aus der Kernelwelt").

Diese Unterschiede sind gerade für Kernel-Programmierer wesentlich, da ihnen einige Kernelfunktionen im Interrupt-Kontext nicht zur Verfügung stehen. Die Basistechnologien Soft-IRQ und Kernel-Thread existieren in unterschiedlichen Ausprägungen. So sind Soft-IRQs feiner differenziert in Soft-IRQ, Tasklet und Timer. Bei Kernel-Threads unterscheidet man Kernel-Thread, Workqueue und Event-Workqueue.

Kernel-Programmierer sollten die Ausprägung Soft-IRQ nach Möglichkeit meiden und dafür auf Tasklets und Timer zurückgreifen. Ein Tasklet übernimmt länger dauernde Aufgaben von einer ISR (Interrupt Service Routine). Ein Timer ist dann nützlich, wenn zu einem bestimmten Zeitpunkt oder periodisch Jobs auszuführen sind.

Wenn es um komplexe Aufgaben geht, greift der Entwickler gern zu Kernel-Threads. In der Ausprägung Workqueue kann er Funktionen durch den Betriebssystemkern aufrufen lassen. Noch weniger Aufwand fällt bei der vordefinierten Event-Workqueue an; allerdings ist bei ihr am wenigsten genau bestimmbar, wann der Auftrag an der Reihe ist.

Weiche Interrupts und Tasklets

Soft-IRQs sind als Erste an der Reihe, wenn alle Hardware-ISRs abgearbeitet sind. Von den 32 möglichen sind in den Kernelquellen (»linux/interrupt.h«) die sechs bereits vordefinierten Soft-IRQs aufgelistet. Für den Treiberentwickler sind hiervon die beiden Ausprägungen Tasklet sowie Timer interessant.

Tasklets übernehmen komplexe Aufgaben von Hardware-ISRs. Lange Hardware-ISRs führen zu ungünstigen Interrupt-Latenzzeiten und sind daher zu vermeiden. Sinnvoller ist es, solche Routinen in zwei Teile zu trennen. Der erste führt die (zeit-)kritischen Aktionen aus, während die Interrupts gesperrt sind. Die übrigen Berechnungen finden im zweiten Teil statt, bei freigegebenen Interrupts. Für diesen früher Bottom Half genannten Teil (siehe Kasten "Portierungshilfe") eignen sich Tasklets.

Der Kernel sorgt dafür, dass ein Tasklet zu einem Zeitpunkt maximal einmal abläuft. Das gilt auch für Mehrprozessorsysteme. Unterschiedliche Tasklets zur gleichen Zeit einzusetzen ist allerdings möglich. Da Tasklets zur Gruppe der Soft-IRQs gehören, genießen sie im System die zweithöchste Priorität, direkt nach den Hardware-Interrupts. Allerdings kommen Tasklets in zwei Prioritätsstufen vor.

Abbildung 1: Asynchrone Verarbeitung im Kernel ist mit mehreren Technologien möglich, die in unterschiedlichen Kontexten ablaufen. Bei Soft-IRQs und Kernel-Threads gibt es je drei Ausprägungen.

Abbildung 1: Asynchrone Verarbeitung im Kernel ist mit mehreren Technologien möglich, die in unterschiedlichen Kontexten ablaufen. Bei Soft-IRQs und Kernel-Threads gibt es je drei Ausprägungen.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook