23.03.2010 | Autor / Redakteur: Rudi Swiontek und Ralf Ebert* / Martina Hafner

Echtzeitbetriebssysteme, kurz RTOS, besitzen neben harter Echtzeitfähigkeit einen Systemzeitgeber (Systemtimer), haben ein deterministisches (vorhersagbares) Verhalten und werden durch Ereignisse gesteuert. Diese können durch die Hardware (I/O-Controller) ausgelöst werden (Interrupts) oder durch CPU-Ereignisse (Exceptions, Division durch 0). Beispielhaft werden diese Eigenschaften an Hand von Windows Embedded CE 6.0 erklärt.
Ein Echtzeit-Embedded-System besteht aus vier Komponenten: der Hardware, dem BSP, dem RTOS und der Anwendersoftware. Das BSP realisiert die Anpassung des Betriebssystems an die zu Grunde liegende Hardware. Diese vier Komponenten müssen im Zusammenspiel das deterministische Verhalten garantieren. Hier gilt je härter die zeitlichen Anforderungen sind, desto schneller muss die eingesetzte Hardware sein. Für jedes verwendete API wird eine minimale und maximale Verzögerungszeit (Latency) garantiert, egal wie viele Ereignisse gerade bearbeitet werden müssen.
Für jede Anwendung kann ein kleiner Prototyp realisiert werden um zu zeigen, dass die Anwendung sich mit dem verwendeten Betriebssystem realisieren lässt. Dazu werden die maximalen Verzögerungszeiten zusammengezählt (worst-case definition). Ist die maximale Zeit aller verwendeten APIs kürzer als das benötigte Zeitfenster, dann wird immer garantiert rechtzeitig zu reagieren und alle Ereignisse zu verarbeiten (die Firma: www.dedicated-systems.com testet RTOS-Systeme und zeigt Meßmethoden auf, wie man die verschiedenen Verzögerungszeiten ermitteln kann).
|
| Ein Echtzeit-System besteht aus den vier Komponenten Hardware, BSP, RTOS und Applikation. |
Echtzeitbetriebssysteme besitzen einen Kernel. Es handelt sich im Prinzip um einen hardwareunabhängigen effizienten Scheduler mit präzise definierten Schnittstellen, der die höchsten Rechte (Privileged-Level) im System hat. Das Echtzeitbetriebssystem bildet eine Schale um den Kernel, die von Applikationsprogrammen nicht durchdrungen wird. Der Kernel beinhaltet die Systemuhr (Retriggerable Timer), den Scheduler (Threadmanager) und eine Verwaltung der Synchronisationsobjekte. Der Scheduler steuert den zeitlichen Ablaufen der Threads. Wird ein neuer Thread erzeugt, d.h. dem Kern bekannt gemacht (CreateThread), laufen verschieden Aktionen gleichzeitig ab.
|
| Ein Thread ist eine organisatorische Einheit aus Programmcode, Speicher und Variablen und gekennzeichnet durch Priorität und Taskzustand. Bild: mögliche Taskzustände. |
Eine Thread ist eine organisatorische Einheit, die aus ausführbarem Programmcode, eigenem Speicher und Variablen besteht und ist gekennzeichnet durch eine Priorität und einen Taskzustand. Der Thread wird mit seiner Priorität in eine Kernelliste eingetragen. Der Kern verwaltet mehrere Listen und für den richtigen zeitlichen Ablauf wird eine Ready Queue angelegt (Bild 3), die die einzelnen ablaufbereiten Threads beinhaltet. Der Scheduler prüft anhand der Ready Liste welcher Thread die CPU zugeteilt bekommt. In prioritätsgesteuerten Systemen bekommt derjenige Thread die CPU zugeteilt, der ablaufbereit ist und die höchste Priorität besitzt.
|
| Interrupt-Controller Master und Slave. |
Alle Interrupt-Programme sind im BSP (Board Support Packed) integriert, Teil des RTOS und besitzen die höchste Privilegierungs-Stufe im System. Interrupts sind Benachrichtigungen, die von der Hardware oder Software generiert werden, um die CPU zu informieren, dass ein Ereignis aufgetreten ist, das sofort beachtet werden muss (z.B. Systemtimer oder Keyboard Interrupt).
Beim Auftreten eines Interrupts hält die CPU die Ausführung der aktuellen Anwendung (Thread) an, springt zu einem Handler im Kernel, um auf das Ereignis zu reagieren, und setzt die Ausführung des ursprünglichen Threads fort, nachdem der Interrupt verarbeitet wurde. Jeder Interruptquelle wird eine Priorität zugeordnet. So hat der Systemtimer die höchste Interrupt-Priorität und der Keyboard-Interrupt die zweithöchste Priorität.
Echtzeitbetriebssysteme unterstützen sowohl „Nested-Interrupts“ als auch „Shared-Interrupts“. Nested-Interrupt bedeutet, dass ein Interrupt mit einer höheren Priorität einen Interrupt mit einer niedrigeren Priorität jederzeit unterbrechen kann. (z.B. Systemtimer-Interrupt unterbricht einen Keyboard-Interrupt). Shared Interrupt bedeutet, dass sich mehrere PCI-Geräte einen Interrupt (IRQ10) teilen müssen. Je nach Interruptquelle kann ein Interrupt als Pegel- oder Flanken-getriggerter Interrupt programmiert werden.
»1 »2 »3 nächste Seite
Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 341320)