next up previous contents
Next: Ziel der Arbeit Up: Einleitung Previous: Einleitung   Inhalt


Das Komodo-Projekt

Beim Komodo-Projekt, in dessen Rahmen diese Arbeit angesiedelt ist, handelt es sich um ein gemeinsames Forschungsprojekt des Institut für Rechnerentwurf und Fehlertoleranz (IRF) und des Institut für Prozeßrechentechnik und Robotik (IPR), dessen Ziel es ist, eingebettete Echtzeitsysteme einfacher zu gestalten.

Abbildung 1.1: Schichtenarchitektur des Komodo-Projekts

Die einzelnen Schichten der Architektur sind in Abbildung 1.1 zu sehen. Die Hardwareschicht stellt ein mehrfädiger Java-Mikrocontroller mit Schnittstellen dar. Darauf setzt eine angepaßte Java Virtual Machine (JVM) auf. Sie enthält die Datenstrukturen, die zum Laden von Klassen und zum Ausführen von Methoden notwendig sind. Weitere Bestandteile sind die Speicherverwaltung und die Speicherbereinigung sowie die Trap-Routinen zur Ausführung komplexer Bytecode-Befehle. Dazu kommen einige Betriebssystemklassen.

Um normale Java-Programme auf dieser JVM ausführen zu können, wird eine Programmierschnittstelle (API) benötigt. Dazu müssen alle Java-Klassen angepaßt werden. Besonders problematisch sind Klassen, die native Methoden enthalten, die normalerweise in C implementiert sind.

Auf diesem System setzt die Middleware OSA+ [BrKR+] des IPR auf, dessen Aufgabe es ist, die Programmierung von heterogenen verteilten Echtzeitsystemen zu vereinfachen.

Das System wird mit Hilfe eines realen industriellen Anwendungsbeispiels - eines autonomen Fahrzeugs (führerloses Transportsystem, FTS) - evaluiert.

Das Problem der komplexen Programmierung wird durch die Verwendung von Java als Programmiersprache gelöst. Java ist eine objektorientierte Hochsprache, die einfach zu programmieren ist, ein starkes Sicherheitskonzept enthält und viele Programmierfehler schon sehr früh erkennt und offenlegt. Dadurch können Entwicklungs- und Testzeiten verkürzt werden.

Der Bytecode, in den Java-Programme übersetzt werden, ist mit durchschnittlich 1,8 Bytes pro Befehl sehr kompakt und benötigt daher wenig Speicher. Zudem ist er portabel und wiederverwendbar, so daß die Programme nicht bei jedem Wechsel der Hardware angepaßt werden müssen und auch auf anderen Systemen getestet werden können.

Allerdings bringt der Bytecode auch ein Problem mit sich. Mit den beschränkten Ressourcen eines eingebetteten Systems ist es nicht möglich, eine JVM laufen zu lassen, die den Bytecode interpretiert. Sie wäre zu langsam für die hohen Ansprüche heutiger Echtzeitsysteme. Auch Just-in-Time-Compiler, die eine deutliche Beschleunigung bringen würden, können aufgrund ihres Speicherplatzbedarfes und ihres schwer vorhersagbaren Zeitverhaltens nicht verwendet werden.

Um dennoch Java-Programme schnell ausführen zu können, muß die Verarbeitung des Bytecode direkt in Hardware geschehen. Zu diesem Zweck sieht das Projekt einen mehrfädigen Java-Mikrocontroller ([BKKU99b]) vor, dessen Kern in [Zula00] entworfen wurde.

Das Problem der Ereignisbehandlung wird durch ein neues Konzept gelöst, bei dem anstelle der Interrupt Service Routinen Interrupt Service Threads verwendet werden ([BKKU99a]). Diese fügen sich in die Threadverwaltung von Java ein und sind somit deutlich einfacher zu handhaben. Zusätzlich ist es auf einem mehrfädigen Mikrocontroller möglich, den Threads sehr flexibel Rechenzeit zuzuteilen, so daß die Nachteile der starren Prioritäten vermieden werden.

Um diese Flexibilität des Scheduling ausnutzen zu können und sehr feingranular Latenzen zu verdecken, muß der Mikrocontroller einen sehr schnellen Kontextwechsel unterstützen und über zusätzliche Hardware verfügen, die sehr schnell entscheiden kann, welcher Thread als nächstes Rechenzeit bekommen soll - den Prioritäten-Manager.

Zur Zeit sind zwar einige Prozessoren am Markt vorhanden, die Java-Bytecode direkt in Hardware ausführen können, jedoch bietet keines dieser Produkte die nötigen Eigenschaften für dieses Projekt, insbesondere den schnellen hardwareunterstützten Kontextwechsel.

Weitere Details zum Komodo-Projekt sind in [KrMU99] und [BrKR+] zu finden.


next up previous contents
Next: Ziel der Arbeit Up: Einleitung Previous: Einleitung   Inhalt
Alexander Schulz
2000-06-18