Betriebssysteme
Echtzeit unter Linux mit dem RT-Preemption-Patch
17.10.2008 | Autor: Andreas Klinger*
Der RT-Preemption-Patch für Linux integriert sich beinahe nahtlos in den Standard-Kernel und bietet Echtzeitfähigkeit. Dieser Artikel beschreibt neue Features des Kernels aus der Perspektive der Echtzeit und welche Techniken ihn auf Echtzeit trimmen.
Mit dem Einsatz von Linux auf Embedded-Systemen kommt zwangsläufig die Frage nach den Reaktionszeiten auf Ereignisse auf den Tisch. Ist das System auch in der Lage echtzeitkritische Aufgaben zu übernehmen? Dass dies mit Linux möglich ist, steht außer Frage, nur über das wie entsteht oftmals große Verwirrung.
Da gibt es auf der einen Seite kommerzielle Distributionen und auf der anderen Seite Open-Source-Projekte, die sich alle mit dem Thema Echtzeit beschäftigen. Was soll ich nun nehmen? Der oder die Entscheidungsträger stehen vor der schwierigen und weit tragenden Aufgabe, sich für den nächsten Produktzyklus auf eine von vielen Alternativen festzulegen.
Der RT-Preemption-Patch ist eine Open-Source-Variante. Seit einigen Jahren ist er verfügbar und wurde seither sukzessive erweitert und verbessert. Inzwischen funktioniert er stabil und Referenzprojekte wurden damit realisiert. Ein weiterer Beleg für die Qualität des Patches ist, dass bereits mehrere Kerneländerungen die ursprünglich für den RT-Patch entwickelt wurden in den Mainstream eingeflossen sind und damit auch vom Standard-Kernel verwendet werden.
Mit dem im folgenden vorgestellten RT-Preemption-Patch können gemeinsam mit den schon in den Kernel-Mainstream eingeflossenen Mechanismen Anwendungen mit harter Echtzeit realisiert werden. Auf modernen CPUs sind Antwortzeiten unterhalb der 100 Mikrosekunden-Latte kein unlösbares Problem mehr, wenn man nicht auf ein umfangreiches Betriebssystem wie Linux verzichten möchte.
Ergänzendes zum Thema
+ Harte und weiche Echtzeitanforderung
Ergänzendes zum Thema
+ Verwendung von RT- und Batch-Tasks
Standard-Scheduler berücksichtigt Echtzeit-Tasks
Der Default-Scheduler des Kernel wird als „Completely Fair Scheduler“ (CFS) bezeichnet. Hinter dieser Titulierung steckt der Ansatz, dass alle Aufgaben des Systems adäquate Rechenzeit zugewiesen bekommen. Im Grunde genommen ist dies ein Gegensatz zur Echtzeit, bei der wenige Aufgaben so viel Rechenzeit als notwendig bekommen und die verbleibende Rest-Rechenzeit unter den weniger zeitkritischen Tasks aufgeteilt wird. Der Scheduler klassifiziert zeitkritische Funktionen und weist ihnen die notwendigen Ressourcen zu (Bild 1).An oberster Stelle steht naturgemäß die Interruptbehandlung. Sofern nicht gerade Interrupts abgeschaltet sind, unterbrechen die Interrupt-Service-Routinen alle Tasks des laufenden Systems. Nach Beendigung dieser wird überprüft, ob eine hochpriorisierte Aufgabe dazugekommen ist, welche schnellstmöglich abzuarbeiten ist.
SoftIRQ-Mechanismen werden sofort abgearbeitet und unterbrechen damit alle darunter liegenden Klassen. Sie werden bezogen auf eine CPU serialisiert abgearbeitet und müssen damit nicht gegen sich selber geschützt werden. Aus dieser Gruppe sind für den Entwickler Tasklets und Timer verwendbar. Die beiden vorgestellten Mechanismen sind zwar gut für zeitnahe Aufgaben geeignet, haben allerdings den Nachteil, dass sie nur in einem Kernel-Treiber Verwendung finden.
Im Userspace kommen an oberster Stelle die so genannten RT-Tasks, also Realtime-Tasks (der Begriff Task bezieht sich sowohl auf Prozesse, als auch auf Threads in einer Multithreading-Anwendung). Diese unterbrechen alle anderen „normalen“ Tasks und bekommen so viel Rechenzeit, wie sie benötigen. Dazu gibt es 99 Prioritätsstufen (1—99), welche sich wiederum untereinander unterbrechen. Erst wenn alle RT-Tasks ihre Rechenzeit abgeben, kommen normale Tasks zum Zug. Normale Tasks werden „fair“ untereinander nach einem Round-Robin-Verfahren gescheduled. Jeder Task bekommt Rechenzeit und zwar entsprechend seiner Priorität; der mit der höheren Priorität bekommt mehr und der mit der geringeren weniger.
Für CPU-intensive Aufgaben die im Hintergrund ablaufen können ist die Klasse der Batch-Tasks vorgesehen. Diese bekommen nur dann Rechenzeit, wenn kein anderer Task rechnet, das System sozusagen IDLE wäre. Mit diesem Mechanismus lassen sich langwierige Aufgaben in den Hintergrund auslagern, ohne dass diese die Reaktionsfähigkeit des Systems negativ beeinträchtigen. Die IDLE-Klasse wird kernelintern verwendet und wurde der Vollständigkeit wegen dargestellt.
hrtimer-Subsystem liefert zeitliche Auflösung
Das hrtimer-Subsystem ist eine fundamentale Überarbeitung der alten Timer-Behandlungen und eine essenzielle Grundlage für den RT-Preemption-Patch. Die hrtimer vereinen alle Funktionen im Zusammenhang mit zeitlichen Abläufen. Dazu gehören RTC, Datum/Uhrzeit-Behandlung und Zeitsynchronisierung. Vor allem aber bieten sie ein Framework für den exakten zeitlichen Ablauf. Sind Zeitpunkte bekannt, zu denen ein Ereignis eintreten soll, dann wird der Timer-Interrupt auf dieses programmiert. Damit ist der Kernel-Entwickler nicht mehr an die maximal 1 ms genauen jiffies angewiesen. Er kann zeitliche Ereignisse mit einer numerischen Granularität von 1 ns vorausplanen.
Verwaltet werden diese Ereignisse in einem zeitlich sortierten Red-Black-Tree (rb-tree). Damit skaliert das Betriebssystem wesentlich besser und der konstante Overhead der vormals periodischen Timer-Behandlung wird auf ein notwendiges Minimum reduziert.
Damit das bestehende, auf einem periodischen Zeittrigger basierende System weiterhin funktioniert, werden die jiffies durch die hrtimer emuliert und die alten Funktionen aufgerufen. Ziel ist es, das alte System komplett abzulösen und den Kernel zukünftig komplett ohne periodische Ticks zu gestalten.
Themenverwandte Beiträge
Linux: hrtimer: Hochauflösende Timer in Linux
Betriebssysteme: OSEK-RTOS für Jedermann
Betriebssysteme: OSEK-RTOS für Jedermann
Task/Thread-Scheduling: Entwurfsmuster für applikationsinternes Ereignis- und Thread-Scheduling
Task/Thread-Scheduling: Entwurfsmuster für applikationsinternes Ereignis- und Thread-Scheduling
Kommentare zu diesem Artikel
Lizenzierung urheberrechtlich geschützter Artikel
Nutzen Sie diesen Artikel ID 271436 oder andere Fachinformationen für Ihr Marketing. Wir bieten Ihnen die Nutzungsrechte für Ihre Website, Ihren Newsletter oder Ihre Kundenzeitschrift. Für alle Fragen wenden sie sich bitte an Frau Maurer unter Tel. 0931 / 418-2888 oder unseren Content-Dienstleister www.mycontentfactory.de .
Betriebssysteme
Android findet den Weg ins Auto
Auf seinem Innovationsforum hat das Software-Entwicklungshaus Noser Engineering ein Projekt über die Implementierung des mobilen Betriebssystems Android im Automobilbereich vorgestellt. Zusammen mit der Mercedes-Tochter AMG wurde ein Car-Informationssystem auf Android-Basis entwickelt. weiter
Debugging von Embedded Linux-Anwendungen auf ARM-Prozessoren
Embedded Linux als Betriebssystem für moderne ARM-Prozessoren? Keine schlechte Idee! Aber da Linux ein Multitasking-Betriebssystem ist, verkompliziert sich das Debuggen von Prozessen. Wirklich?
Embedded Linux als Betriebssystem für moderne ARM-Prozessoren? Keine schlechte Idee! Aber da Linux ein Multitasking-Betriebssystem ist, verkompliziert sich das Debuggen von Prozessen. Wirklich?
OSEK-basiertes Echtzeitbetriebssystem für jedermann
An der FH Regensburg wurde ein freies Echtzeitbetriebssystem auf Basis des OSEK-Standards entwickelt, das an unterschiedliche Anwendungen auch jenseits der Kfz-Elektronik angepasst werden kann.
An der FH Regensburg wurde ein freies Echtzeitbetriebssystem auf Basis des OSEK-Standards entwickelt, das an unterschiedliche Anwendungen auch jenseits der Kfz-Elektronik angepasst werden kann.
Windows Embedded Compact 7 Echtzeit-Tuning
Windows Embedded Compact 7 eignet sich grundsätzlich für Echtzeit ist aber in Bezug auf seinen Einsatz hochflexibel. Welche Anpassungen OEMs daher vornehmen können, erklärt dieses Whitepaper.
Windows Embedded Compact 7 eignet sich grundsätzlich für Echtzeit ist aber in Bezug auf seinen Einsatz hochflexibel. Welche Anpassungen OEMs daher vornehmen können, erklärt dieses Whitepaper.
Wind River Network Stack-Treiber und -Anwendungen
Whitepaper über verschiedene Techniken und Tipps zur Steigerung der Networking Performance von Anwendungen und Treibern.
Whitepaper über verschiedene Techniken und Tipps zur Steigerung der Networking Performance von Anwendungen und Treibern.
Copyright © 2012 Vogel Business Media








Home




(nicht registrierter User)