Dossiers
Mediathek
Forum
Whitepaper

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.


Bildhintergrund: pixelio, geralt
Bildhintergrund: pixelio, geralt
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

Bei harten Echtzeitanforderungen liegen die Reaktionszeiten der Anwendung mit hundertprozentiger Sicherheit innerhalb einer von der Spezifikation definierten ...

Ergänzendes zum Thema

 + Verwendung von RT- und Batch-Tasks

Um unter Linux RT-Tasks zu verwenden, wird in einem Userspace-Programm mit dem Systemaufruf sched_setscheduler() dem Kernel mitgeteilt, dass dieser Prozess ...

Standard-Scheduler berücksichtigt Echtzeit-Tasks

Bild 1: Beim Standard-Kernel werden zuerst die ISRs der Interrupts und deren Sekundärreaktionen (Soft-IRQs) bearbeitet. Der Spielraum für Echtzeit-Aufgaben ist damit sehr eingeschränkt und verlässliche Antwortzeiten lassen sich kaum abschätzen. 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.
1  |  2  |  weiter
Redakteur: Martina Hafner
Social Networks:
Themenverwandte Beiträge
Linux: hrtimer: Hochauflösende Timer in Linux
20.05.2010 - Obwohl sich das hrtimer-Framework schon seit Linux-Kernel 2.6.21 im Mainstream befindet, wird es nur wenig aktiv genutzt. Eine Ursache mag sein, dass es kaum geeignete Dokumentationen gibt. Wie das hrtimer-Framework aufgebaut ist und wie man es sich direkt im Treiber oder auch in der Userspace-Anwendung zunutze machen kann, beschreibt dieser Artikel. weiter
Betriebssysteme: OSEK-RTOS für Jedermann
Betriebssysteme: OSEK-RTOS für Jedermann
08.09.2009 - Die Hochschule Regensburg hat ein freies Echtzeitbetriebssystem auf Basis des OSEK-Standards entwickelt, das durch Konfiguration an Anwendungen auch jenseits der Kfz-Elektronik angepasst werden kann. weiter
Task/Thread-Scheduling: Entwurfsmuster für applikationsinternes Ereignis- und Thread-Scheduling
Task/Thread-Scheduling: Entwurfsmuster für applikationsinternes Ereignis- und Thread-Scheduling
17.03.2010 - Möchten Sie einen einfachen, aber effektiven Scheduler bauen, der Sie von einem Betriebssystem, etwa für kleine Systeme, unabhängig macht, oder den Sie vollkommen durchschauen? Dieser Beitrag stellt Ihnen ein passendes Design Pattern (Entwurfsmuster) vor. weiter
Kommentare zu diesem Artikel
Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)
Spamschutz 

Bitte geben Sie das Resultat dieser Rechenaufgabe (Addition) ein:


Artikel Bewertung

VIDEO ZUM THEMA

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

Alle Videos >>
Firma zum Artikel

Andreas Klinger

Burgkirchen, Deutschland


Firmen in diesem Themenumfeld


Whitepaper und Webcasts zum Thema
Whitepaper
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?
Whitepaper
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.
Whitepaper
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.
Whitepaper
Wind River Network Stack-Treiber und -Anwendungen
Whitepaper über verschiedene Techniken und Tipps zur Steigerung der Networking Performance von Anwendungen und Treibern.