UnivIS
Informationssystem der Friedrich-Alexander-Universität Erlangen-Nürnberg © Config eG 
FAU Logo
  Sammlung/Stundenplan    Modulbelegung Home  |  Rechtliches  |  Kontakt  |  Hilfe    
Suche:      Semester:   
 Lehr-
veranstaltungen
   Personen/
Einrichtungen
   Räume   Forschungs-
bericht
   Publi-
kationen
   Internat.
Kontakte
   Examens-
arbeiten
   Telefon &
E-Mail
 
 
 Darstellung
 
Druckansicht

 
 
Einrichtungen >> Technische Fakultät (TF) >> Department Informatik (INF) >> Lehrstuhl für Informatik 2 (Programmiersysteme) >>
Übersetzung für eingebettete Systeme

Ob im Auto oder zur Steuerung von Maschinen, in vielen elektronischen Geräten sind eingebettete Systeme ein unverzichtbarer Bestandteil. Mit zunehmender Komplexität und Größe der Anwendungen ergibt sich die Anforderung, Software für eingebettete Systeme in modernen Programmiersprachen zu entwickeln. Diese Sprachen wurden jedoch inbesonders für Desktop-Systeme entwickelt, welche mit verschwenderisch vielen Resourcen ausgestattet sind (z.B. Prozessoren mit einem Takt im Gigahertz-Bereich, viel Hauptspeicher, Strom usw.). Eingebettete Systeme verfügen meist nur über sehr eingeschränkte Resourcen. Möchte man hier den Einsatz moderner Programmiersprachen ermöglichen, so ist es das vornehmlichste Ziel, den mit der Verwendung dieser Sprachen einhergehenden hohen Resourcenbedarf zu reduzieren.
Am Lehrstuhl werden insbesondere die folgenden drei Teilgebiete untersucht:

1.) Stromsparoptimierung. Für batteriebetriebene Systeme wie z.B. Mobiltelefone oder PDAs ist es wichtig, maßvoll mit der ihnen zur Verfügung stehenden Energie umzugehen. Um Strom zu sparen, besitzen viele Prozessoren die Möglichkeit, dynamisch zur Laufzeit ihre Taktfrequenz und Versorgungsspannung herab- und wieder heraufzusetzen. Diese Technologien werden Dynamic-Frequency-Scaling (DFS) und Dynamic-Voltage-Scaling (DVS) genannt. Am Lehrstuhl wurde erforscht, inwiefern Übersetzer und Betriebssystem zusammenarbeiten können, um diese Technologien auszunutzen. Führt der Prozessor Programmteile aus, die viele Daten aus dem Speicher laden bzw. hineinschreiben, so muss er oft auf den meist wesentlich langsameren (Arbeits-)Speicher warten. Takt und Spannung können in diesem Fall herunterskaliert werden, ohne dass dies aus Sicht der Rechenzeit ins Gewicht fällt. Frühere Ansätze haben versucht, DVS entweder über das Betriebssystem oder direkt vom auszuführenden Programm aus zu realisieren. Bei unserem Ansatz wird das DVS vom Betriebssystem gesteuert, der Übersetzer bettet jedoch Anweisungen in das Programm ein, welche dem Betriebssystem Informationen über den Rechenzeitbedarf des aktuellen Programmabschnittes mitteilt. Das Betriebssystem erlangt somit Kenntnis über den aktuellen Rechenzeitbedarf einer jeden Anwendung und kann die jeweils optimale Frequenz und Versorgungsspannung bestimmen und einstellen. Die Arbeit wurde 2004 abgeschlossen, wobei der reine Kernalgorithmus ohne zusätzliche Übersetzerunterstützung Energieeinsparungen von bis zu 25% bei einer um 19% erhöhten Ausführungszeit erzielen konnte. Die zusätzliche Unterstützung durch den Übersetzer konnte jedoch nur geringe Energieeinsparungen erzielen. In einer Anwendung mit stark unterschiedlicher Dichte von Hauptspeicherzugriffen konnte die Energieeinsparungen von 16,5% auf 18% erhöht werden.

2.) Speicherbereinigung für Code. Da der Arbeitsspeicher (neben Energie) eine weitere beschränkte Resource im Bereich eingebetteter Systeme ist, sind Techniken erforderlich, die den Arbeitsspeicherverbrauch eines Programmes verringern. Die gegenwärtig verfolgte Idee beruht darauf, dass nicht der gesamte Programmcode einer Anwendung komplett im Arbeitsspeicher liegen muss, um das Programm auszuführen. Das Laden des benötigten Codes wird normalerweise vom Betriebssystem übernommen, welches mittels virtuellem Speicher die Möglichkeit besitzt, Programmcode seitenbasiert in den Speicher zu laden bzw. wieder zu verdrängen. Die Größe der Seiten liegt dabei meist im Bereich mehrerer Kilobytes. Die Seiten enthalten mehr als nur den minimal benötigten Code. Bedingt durch ihre Architektur besitzen eingebettete Systeme oft keine Einheit zur Verwaltung von virtuellem Speicher oder sie müssen ganz ohne ein Betriebssystem auskommen. Die am Lehrstuhl entwickelte automatische Speicherverwaltung für Programmcode lädt den Code nicht seitenweise in den Speicher, sondern es werden nur kleine Code-Fragmente (Basisblöcke) geladen, welche garantiert vollständig zur Ausführung kommen. Wenn es zu einem Speicherengpass kommt, wird nicht mehr benötigter Code automatisch erkannt und aus dem Speicher entfernt. Die Laufzeitinformationen, welche die Speicherverwaltung über das auszuführende Programm hat, können verwendet werden, um das Programm dynamisch zu optimieren. Das Potential dieser Optimierungen soll in der Zukunft untersucht werden.
Im Jahr 2004 wurden verschiedene Entwurfsalternativen für den automatischen Speicherbereiniger untersucht, wobei für die folgenden beiden Optionen jeweils ein lauffähiger Prototyp erstellt wurden:

  • Der am Lehrstuhl entwickelte Übersetzer Jackal wurde so erweitert, dass er den erzeugten Code in Fragmente zerteilt und diese in eine Datei schreibt. Relevante Informationen können bei diesem Ansatz leicht gefunden werden, da sie dem Übersetzter bekannt sind und in die Datei mit eingebracht werden können. Als Problem erwies sich jedoch, dass der vollständige Quellcode inklusive aller Bibliotheken mit dem angepassten Übersetzer übersetzt werden muss.

  • Der zweite Ansatz arbeitet direkt mit ausführbaren Programmen, welche durch zusätzliche Informationen ergänzt werden. Diese werden in einem für jedes Programm nur einmal anfallenden Vorverarbeitungsschritt durch ein Analysewerkzeug ermittelt. Das auszuführende Programm wird zusammen mit den Informationen an den autom. Speicherbereiniger übergeben, welcher das Programm ausführt. Dieser Ansatz ist genereller, da kein spezieller Übersetzer notwendig ist. Jedoch kann das Analysewerkzeug nicht mehr auf die Informationen zurückgreifen, die zur Übersetzungszeit bekannt sind, sondern muss gegebenenfalls relevante Informationen rekonstruieren. Dies wird im Jahr 2005 angegangen.

3.) RAM-Optimierung. Eine 2004 abgeschlossene Dissertation untersuchte, inwieweit im Bereich gewisser eingebetteter Systeme eine engere Zusammenarbeit von Übersetzern und statischen Betriebssystemen Vorteile bei Effizienz und Sicherheit bringt. Das Interesse lag hier speziell auf kleinen eingebetteten Systemen, die in Hochsprachen wie C programmiert werden und statische Echtzeitbetriebssysteme benutzen. Solche Systeme werden z.B. in der Automobilindustrie verstärkt eingesetzt. Einsparungen von einigen Dutzend Bytes können aufgrund der hohen Stückzahlen insgesamt Kosten in Millionenhöhe einsparen. Eine Studie, die den Overhead eines C-Übersetzers gegenüber direkt in Assembler entwickelten Programmen auf 100 - 1000% schätzt, zeigt das noch große Einsparungspotential durch Optimierungen zur Übersetzungszeit zu erwarten sind. Konkret wurden drei Möglichkeiten untersucht, den RAM-Verbrauch solcher Systeme zu reduzieren:

  • Der Einfluss klassischer Übersetzeroptimierungen auf den RAM-Verbrauch wurde gemessen. Eine geschickte Auswahl aus der Menge der klassischen Optimierungen konnte den RAM-Verbrauch in einer kleinen Testreihe um fast 20% senken.

  • Modulübergreifende Stackanalyse im Übersetzer wurde mit einem kommerziell erhältlichen Post-Linktime Analysewerkzeug verglichen. Testergebnisse zeigen eine verbesserte Handhabung und höhere Zuverlässigkeit als die existierenden Ansätze. Durch statische Analyse des worst-case Stackverbrauchs konnten der Verschnitt an Stackspeicher minimiert und das Risiko für Stacküberläufe fast eliminiert werden.

  • Als neues Verfahren wurden die von statischen Betriebssystemen gespeicherten Taskkontexte (d.h. Registersätze, die bei Unterbrechung eines Tasks gesichert werden müssen) minimiert. Für jeden Task werden möglichst wenige Register gesichert (die sowohl Werte enthalten als auch überschrieben werden können) und auch nur so viel RAM reserviert. Eine um Inter-Task Registervergabe erweiterte Implementierung für ein kommerziell in der Automobilindustrie eingesetztes Betriebssystem zeigt die Machbarkeit dieser Verfahren. Es gelang, sowohl die Handhabung zu verbessern als auch den Speicherbedarf einiger Benchmarks um meist 30%-60% zu reduzieren.

Projektleitung:
Prof. Dr. Michael Philippsen

Beteiligte:
Dr.-Ing. Volker Barthelmann, Dr.-Ing. Dominic Schell, PD Dr. Ronald Veldema

Laufzeit: 1.1.2001 - 31.12.2005

Förderer:
Deutsche Forschungsgemeinschaft
Elektrobit Automotive Software

Kontakt:
Philippsen, Michael
Telefon +49-9131-85-27625, Fax +49-9131-85-28809, E-Mail: michael.philippsen@fau.de
UnivIS ist ein Produkt der Config eG, Buckenhof