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


\chapter{Einleitung}
\label{Kap. Einleitung}

Informationssysteme, d.h. Systeme, die die kooperative Arbeit von Menschen unterst"utzen und koordinieren, sind gekennzeichnet durch ihre Langlebigkeit und Kompexit"at, ihre verteilte Ausf"uhrung in Netzwerkumgebungen und ihren Bestand an Massendaten. Die Entwicklung von Informationssystemen auf der Basis hierarchischer oder relationaler Datenbanksysteme ist von einer wesentlichen Einschr"ankung betroffen: Die Persistenz erstreckt sich nur auf die Datenobjekte selbst. Programme und langlebige Aktivit"aten, z.B. Gesch"aftsprozesse, die auf diesen Daten operieren, m"ussen au"serhalb des Datenbanksystems in einer f"ur jeden Rechner spezifischen Darstellung vorliegen (Abbildung~\ref{ISTraditionell}). 

\begin{figure}[H]
\begin{center}
\leavevmode
\epsfxsize=10.5cm
\epsffile{Bilder/ISTraditionell.eps}
\caption{Informationssystem auf Basis relationaler Datenbanken}
\label{ISTraditionell}
\end{center}
\end{figure}
\clearpage

Dieser Mangel zeigt sich einerseits im Systemdesign, zum anderen wirkt er sich auf den Informationsflu"s innerhalb des Systems aus. Da Informationssysteme zu einem gro"sen Teil in heterogenen Client-Server Netzwerkumgebungen eingesetzt werden, k"onnen nur die persistenten Daten, f"ur welche genormte "Ubertragungsprotokolle\footnote{\fn{CCITT} X.409, \fn{OSI} ASN.1 und BER, \fn{Sun Microsystems} XDR} existieren, gemeinsam auf verschiedenen Rechnerplattformen genutzt werden. Der Austausch von Programmen ist aufgrund von unterschiedlichen Betriebssystemen und Prozessorarchitekturen nur durch eine Portierung auf den jeweiligen Zielrechner m"oglich.

Integrierte, persistente Programmierumgebungen f"ur datenintensive Applikationen wie das Tycoon\footnote{Tycoon: \s{Typed Communicating Objects in Open Environments}}-System \cite{MSS96} bieten als Erweiterung gegen"uber traditionellen Datenbanksystemen orthogonale Persistenz, die sich auf Daten, Funktionen und in Ausf"uhrung befindliche Prozesse erstreckt, welche in einem persistenten Objektspeicher gehalten werden (Abbildung~\ref{ISPersistent}).

\begin{figure}[t]
\begin{center}
\leavevmode
\epsfxsize=10.5cm
\epsffile{Bilder/ISPersistent.eps}
\caption{Informationssystem auf Basis einer persistenen Programmierumgebung}
\label{ISPersistent}
\end{center}
\end{figure}

Um neben Daten auch Funktionen und Prozesse zwischen inkompatiblen Rechnern auszu\-tauschen, existiert eine einheitliche Darstellung von Basisdatentypen und Programmcode. Mit der Definition einer virtuellen Maschine, einer Schnittstelle, die die Coderepr"asentation und ein plattformunabh"angiges Ausf"uhrungsmodell beschreibt, wird von der zugrundeliegenden Rechnerarchitektur abstrahiert. Die virtuelle Maschine wird auf jeder Plattform von einem Interpreter emuliert. Auf diese Weise kann die Frage der Portabilit"at in orthogonal persistenten Systemen gel"ost werden. Die interpretierende Ausf"uhrung bedingt jedoch einen im Vergleich zu plattformspezifischen Maschinencode erheblichen Verlust an Performanz, der sich vor allem bei Applikationen, die mit dem Benutzer interagieren, negativ bemerkbar macht. Aus diesem Grund m"ussen M"oglichkeiten, die Programmausf"uhrung zu beschleunigen, untersucht werden:
\begin{enumerate}
\item Die Optimierung der Codeerzeugung in persistenten Systemen, wie sie in \cite{Kira94} f"ur das Tycoon-System durchgef"uhrt wurde.
\item Die in dieser Arbeit vorgestellte dynamische Generierung von Maschinencode.
\end{enumerate}
Die dynamische Maschinencodegenerierung "ubersetzt Programmcode, der in einer platt\-formunabh"angigen Repr"asentation vorliegt, erst unmittelbar vor der Ausf"uhrung (\e{just in time}) in Maschinencode f"ur die jeweilige Rechnerarchitektur. Die Portabilit"at wird bei dieser Art der Codegenerierung nicht ber"uhrt, da der Daten- und Programmaustausch weiterhin auf der plattformunabh"angigen Ebene erfolgt. Durch den Einsatz existierender Codegeneratoren kann auch die Implementierung des dynamischen Codegenerators auf portable Weise erfolgen und so der Implementierungsaufwand vermindert werden.

%Bei der dynamischen Maschinencodegenerierung, wird Programmcode, der in einer platt\-formunabh"angigen Repr"asentation vorliegt, erst unmittelbar vor der Ausf"uhrung (\e{just in time}) in Maschinencode f"ur die jeweilige Rechnerarchitektur "ubersetzt und direkt ausgef"uhrt. Die Portabilit"at wird bei dieser Art der Codegenerierung nicht ber"uhrt, da der Daten- und Programmaustausch weiterhin auf der plattformunabh"angigen Ebene erfolgt. Durch den Einsatz existierender Codegeneratoren kann auch die Implementierung des dynamischen Codegenerators auf portable Weise erfolgen und so der Implementierungsaufwand vermindert werden.


\section{Zielsetzung}
\label{Abs. Zielsetzung}

Ziel dieser Arbeit ist die Entwicklung eines dynamischen Codegenerators f"ur die persistente Programmierumgebung Tycoon. Von vorrangiger Bedeutung ist dabei eine Implementierung, die weiterhin die Portabilit"at des Systems garantiert und zu keiner Einschr"ankung der Funktionalit"at f"uhrt.

Neben der eigentlichen Technik der dynamischen Codeerzeugung soll ein Weg aufgezeigt werden, wie ein Codegenerator in das Tycoon-Schichtmodell integriert werden kann. Von Bedeutung sind hierbei die Vorteile, die sich aus der Nutzung existierender plattform"ubergreifender Werkzeuge zur Codeerzeugung ergeben.    

Das Tycoon-System stellt besondere Anforderungen an seine Laufzeitumgebung, die von Seiten des dynamischen Codegenerators ber"ucksichtigt und unterst"utzt werden m"ussen. F"ur diese sind L"osungsm"oglichkeiten zu erarbeiten und zu realisieren. Im Einzelnen betrifft dies:   
\begin{itemize}
\item Einbindung von dynamisch erzeugtem Code in ein laufendes System
\item Persistente Sicherungspunkte
\item Persistente leichtgewichtige Prozesse
\item Ausf"uhrung paralleler Prozesse
\item Ausnahmebehandlung
\item Unterst"utzung einer Freispeicherverwaltung
\end{itemize}
Daneben ist die Frage zu beantworten, wie gut sich das Ausf"uhrungsmodell der virtuellen Maschine auf eine tats"achliche Rechnerarchitektur umsetzen l"a"st, und inwieweit Optimierungen w"ahrend der Transformation von der plattformunabh"angigen Repr"asentation zum Maschinencode m"oglich sind.

Eine Analyse sowohl der durch den Maschinencode erzielten Performanzsteigerung als auch des n"otigen Generierungsaufwands soll eine realistische Absch"atzung hinsichtlich der Effizienz der implementierten L"osung erm"oglichen. Zus"atzlich soll das Potential der dynamischen Maschinencodegenerierung n"aher beleuchtet werden, um zuk"unftige Entscheidungen, die ihren Einsatz in Weiterentwicklungen des Tycoon-Systems (Tycoon2) betreffen, zu erleichtern.


\section{"Ubersicht}
\label{Abs. Uebersicht}

Maschinencode wurde bereits mit Erfolg f"ur die persistente Programmiersprache TL in einer "alteren Version des Tycoon-Systems generiert. Kapitel~\ref{Kap. Vorarbeiten} beschreibt kurz, welche ver"anderten Rahmenbedingungen eine neue Implementierung notwendig machen.  

Eine "Ubersicht des Tycoon-Schichtmodells  wird in Kapitel~\ref{Kap. TycoonSystem} gegeben. Im daran anschlie"senden Kapitel folgt eine genauere Betrachtung der virtuellen Maschine und des Laufzeitsystems unter besonderer Ber"ucksichtigung der f"ur die Implementierung relevanten Details. 

Die Technik der dynamischen Codegenerierung und die Einbindung des Codegenerators in das Gesamtsystem werden in Kapitel~\ref{Kap. Maschinencode} dargestellt. Hier werden auch die Probleme, die sich in persistenten Systemen ergeben, erl"autert sowie L"osungsm"oglichkeiten aufgezeigt.

Schlie"slich erfolgt in Kapitel~\ref{Kap. Laufzeitverhalten} eine Analyse des in einer Reihe von Testmessungen ermittelten Performanzgewinns und des bei der Codeerzeugung entstehenden Aufwands.

