% Studienarbeit von Marc Weikard
%
% Universitaet Hamburg
% Fachbereich Informatik
% Arbeitsbereich DBIS
%
% Kapitel: Zusammenfassung


\chapter{Zusammenfassung}
\label{Kap. Zusammenfassung}

Abschlie"send werden in den beiden folgenden Abschnitten der Stand der Implementierung vorgestellt und die in den vorangegangenen Kapiteln beschriebene Technik der dynamischen Maschinencodeerzeugung und das Laufzeitverhalten bewertet sowie ein Ausblick auf die weitere Entwicklung gegeben.

\section{Stand der Implementierung}
\label{Abs. Implementierung}

Ein Prototyp des dynamischen Codegenerators wurde auf \pn{SunSPARC} Workstations unter den Betriebssystemen \pn{SunOS 4} und \pn{Solaris 2.x} implementiert. Die Entwicklung wurde allerdings durch Probleme erschwert, deren Ursachen teilweise au"serhalb des Codegenerators liegen und die noch nicht befriedigend gel"ost werden konnten:
\begin{itemize}
\item Mit zunehmender Anzahl dynamisch gebundener Maschinencodefunktionen wird das Laufzeitverhalten des Tycoon-Systems instabil. Dies "au"sert sich in Systemabst"urzen, die durch das "Uberschreiben wichtiger Speicherbereiche ausgel"ost werden. Als Ursache konnte das Zusammenspiel mit dem dynamischen Linker des Betriebssystems lokalisiert werden. Ob es sich hierbei um eine prinzipielle Schw"ache oder fehlerhafte Implementierung des Linkers handelt oder die Probleme auf Wechselwirkungen mit dem Laufzeitsystem, eventuell mit der Ausnahmebehandlung auf C-Ebene (Abschnitt~\ref{Abs. Ausnahmen}), zur"uckzuf"uhren sind, konnte nicht festgestellt werden. \\
Umfangreiche Testmessungen zur Absch"atzung des zu erzielenden Geschwindigkeitszuwachses bei gro"sen persistenten Applikationen (Abschnitt~\ref{Abs. Performanz}) konnten aus diesem Grund nicht bzw. im Fall des TL-"Ubersetzers nur in Ans"atzen durchgef"uhrt werden.
\item Die hohen Laufzeiten des externen C-"Ubersetzers wirken sich direkt auf die Entwicklungsarbeit aus. Testl"aufe  zur Fehlerfindung bzw. -bereinigung, insbesondere in Verbindung mit den Instabilit"aten des Systems, nahmen mit einer Dauer von jeweils 1 bis 1,5 Stunden "uber die H"alfte der Erstellungszeit des Prototypen in Anspruch.

\newpage
 
\item Effizienter Maschinencode durch Optimierungen des Codegenerators in der Transformationsphase von Bytecode zu C-Quellcode setzt in hohem Ma"s bereits optimierten Bytecode voraus. Als wesentlicher Faktor erweist sich hierbei das \e{inlining} von Funktionen durch den dynamischen Optimierer des Compiler-Backends. Da dessen Funktionalit"at seit einer Neustrukturierung des Backends jedoch stark eingeschr"ankt ist, mu"ste von einem verbesserten Codegenerator Abstand genommen werden.      
\end{itemize}


\section{Bewertung und Ausblick}
\label{Abs. Bewertung}

Das persistente und modulare Tycoon-System ist eine persistente Programmierumgebung f"ur datenintensive Applikationen. Sein portables und plattformunabh"angiges Laufzeitsystem erm"oglicht den Einsatz auf verschiedenen Rechnerarchitekturen, bedingt durch die interpretierende Ausf"uhrung von Programmen jedoch eine im Vergleich zu Maschinencode geringe Performanz. Die dynamische Maschinencodeerzeugung kann die Geschwindigkeit des Tycoon-Systems steigern, ohne dabei an Portabilit"at und Flexibilit"at zu verlieren. Sie weist dabei gegen"uber einem statischen Codegenerator folgende Vorteile auf:
\begin{itemize}
\item Ihre Integration in das Gesamtsystem erfordert nur geringe Modifikationen am Laufzeitsystem.
\item Da sie nur eine Erg"anzung, aber keinen Ersatz des Interpreters darstellt, ist ihre Realisierung f"ur jede Plattform optional. Einzelne Implementierungen k"onnen auch unabh"angig voneinander erfolgen.
\item Der Einsatz eines dynamischen Codegenerators ist auf h"oheren Systemebenen transparent.
\item Maschinencode wird nur f"ur Funktionen erzeugt, die auch zur Ausf"uhrung gelangen. Dies f"uhrt, da seine Lebensdauer zudem auf einen Systemlauf beschr"ankt ist, im Gegensatz zu statisch erzeugtem Code, der persistent im Objektspeicher gehalten werden mu"s, zu einer deutlichen Reduktion des Speicherverbrauchs.  
\end{itemize}
Durch die Entscheidung, TVM-Bytecode als Ausgangsbasis f"ur die Codegenerierung zu verwenden und mit dem Maschinencode dem Ausf"uhrungsmodell der virtuellen Maschine zu folgen, mu"s nicht auf die innovativen Konzepte, die auf der Plattformunabh"angigkeit des Tycoon-Systems beruhen, wie z.B. die Migration persistenter Threads, verzichtet werden. Die besonderen Anforderungen, die von einer persistenten Umgebung gestellt werden, insbesondere die Bindung von dynamisch generiertem Code an ein laufendes System, die Unterst"utzung von persistenten Sicherungspunkten und einer Freispeicherverwaltung, lassen sich, wie in Abschnitt~\ref{Abs. Implementierungsprobleme} beschrieben, mit geringem Aufwand l"osen.

Die Programmiersprache C als Zwischenrepr"asentation unter Verwendung eines externen C-"Ubersetzers erweist sich f"ur die Portabilit"at des Systems als vorteilhaft. Auch die G"ute des erzeugten Maschinencodes wird durch Optimierer auf Seiten des "Ubersetzers deutlich verbessert.

Der dynamisch generierte Maschinencode weist selbst in dem in dieser Arbeit vorgestellten einfachen Ansatz einen Geschwindigkeitsvorteil gegen"uber der Ausf"uhrung von Bytecode durch den TVM-Interpreter auf. F"ur die Beurteilung der Effizienz des dynamischen Codegenerators ist jedoch neben der Geschwindigkeitssteigerung durch den Maschinencode die Performanz des Codegenerators selbst von Bedeutung. Hier erweist sich die gew"ahlte L"osung als problematisch, da der verursachte Performanzverlust aufgrund der "Ubersetzungszeiten erst bei einer entsprechend langen Systemlaufzeit durch den Maschinencode wieder aufgeholt und ein effektiver Geschwindigkeitsvorteil erreicht wird.

F"ur die Zukunft, auch im kommerziellen Umfeld von Tycoon, ist die Implementierung von speziellen, der jeweiligen Rechnerplattform angepa"sten dynamischen Codegeneratoren vorgesehen. Neben vollst"andigen Eigenentwicklungen k"onnten hier auch wieder bestehende, schnelle Werkzeuge \cite{EP94} verwendet werden.        

