Laufzeitumgebungen am Beispiel der Java Virtual Machine

Größe: px
Ab Seite anzeigen:

Download "Laufzeitumgebungen am Beispiel der Java Virtual Machine"

Transkript

1 Westfälische Wilhelms-Universität Münster Ausarbeitung Laufzeitumgebungen am Beispiel der Java Virtual Machine im Rahmen des Seminars Übersetzung von künstlichen Sprachen Benjamin Leenen Themensteller: Prof. Dr. Herbert Kuchen Betreuer: Tim Majchrzak Institut für Wirtschaftsinformatik Praktische Informatik in der Wirtschaft

2 Inhaltsverzeichnis 1 Einleitung 1 2 Übersetzung und Ausführung von Programmen Compiler, Interpreter und Laufzeitumgebungen Virtuelle Maschinen als Laufzeitumgebung Die Java Virtual Machine Die Programmiersprache Java Das class-dateiformat Speicherbereiche zur Laufzeit Verifizierung von class-dateien Die Ausführung der JVM Laden, Binden und Initialisieren Sicherheit Die Architektur Risiken und Herausforderungen Die Squawk Java Virtual Machine Die geteilte Architektur Das suite-dateiformat Die geräteseitige VM Fazit und Ausblick 21 A Übersetzung von Java-Code in Bytecode 22 Literaturverzeichnis 23 i

3 Kapitel 1: Einleitung 1 Einleitung In den Anfangszeiten der Programmierung wurden Computer über Maschinensprachen gesteuert, die über Nullen und Einsen den Rechnern direkt die Anweisungen vorgegeben haben [ALUS08, S. 16]. Um eine intuitivere und weniger fehleranfällige Programmierweise zu ermöglichen, entstanden mit der Zeit zunächst Assemblersprachen zur einfacheren Darstellung von Maschinenbefehlen und im Weiteren höhere Programmiersprachen wie C, Cobol, C# und Java, in welchen Programme in intuitiveren abstrakten Notationen verfasst werden. Zur Ausführung von Programmen, die nicht in Maschinensprache geschrieben worden sind, muss die Quellsprache jener in diese übersetzt werden [ALUS08, S. 3]. Dies ist die Aufgabe von Compilern. Eine der wichtigsten Aufgaben dieser, ist die Erkennung von Fehlern im Quellcode während der Übersetzung. Zudem erzeugt und verwaltet er eine Laufzeitumgebung, in welcher die Zielprogramme als Ergebnis des Kompilierens ausgeführt werden können [ALUS08, S. 520]. Eine andere Möglichkeit bietet der Einsatz einer virtuellen Maschine (VM) als Laufzeitumgebung. Dabei wird der Quellcode nicht direkt in Maschinencode übersetzt, sondern in einen Zwischencode, welcher von der VM bei der Ausführung verarbeitet wird [Re06, S. 766]. Dies bringt den Vorteil mit sich, dass der Zwischencode unabhängig von Hardware und Betriebssystem des Zielrechners erstellt werden kann. Lediglich die Implementierung einer VM muss auf diesen abgestimmt sein. Dies ermöglicht die Übertragung eines Programms auf jeden anderen Rechner, auf welchem sich dieses dann immer gleich verhält [LY99, Kap. 1]. Diese Ausarbeitung gibt in Kapitel 2 zunächst einen Überblick über die einzelnen zu beachtenden Komponenten, die bei der Ausführung von Programmen höherer Programmiersprachen von Bedeutung sind, wie etwa Compiler, Laufzeitumgebungen und eine VM in der Funktion von Laufzeitumgebungen. Kapitel 3 widmet sich im Detail der Java Virtual Machine (JVM), welche als Laufzeitumgebung für Java fungiert. Neben deren grundlegendem Aufbau und der internen Verarbeitung von übersetztem Java-Code, beschreibt 3.6 wichtige Aspekte der Java-Sicherheitsarchitektur und 3.7 zum Abschluss die Squawk JVM als Beispiel für eine Implementierungsmöglichkeit für kleine tragbare Geräte. 1

4 Kapitel 2: Übersetzung und Ausführung von Programmen 2 Übersetzung und Ausführung von Programmen 2.1 Compiler, Interpreter und Laufzeitumgebungen Die Übersetzung von Quellprogrammen in Zielprogramme wird im Allgemeinen durch einen Compiler durchgeführt (Vgl. Abb. 1) [ALUS08, S. 3]. Soll ein Quellprogramm, welches in einer höheren Sprache verfasst ist, vom späteren Benutzer ausgeführt werden, um es bspw. für Ein- und Ausgabevorgänge nutzen zu können, muss das zugehörige Zielprogramm in ausführbarer Maschinensprache vorhanden sein. Abbildung 1: Verfahrensweise eines Compilers, in Anlehnung an [ALUS08, S. 3] Eine andere Möglichkeit zur Ausführung eines Programms bietet ein Interpreter [ALUS08, S. 3]. Im Gegensatz zum Compiler übersetzt ein Interpreter nicht vor der Ausführung, ein Quell- in ein Zielprogramm, sondern interpretiert jenes direkt zur Laufzeit. So z. B. bei einer Nutzereingabe (Vgl. Abb. 2). Dieses Vorgehen hat in der Regel eine bessere Erkennung von Fehlern als Vorteil gegenüber der Verwendung von Compilern, da der Interpreter die Befehle zur Laufzeit sequentiell abarbeitet. Der Einsatz von Compilern beschleunigt dafür jedoch die Verarbeitung des Zielprogramms zur Laufzeit, da die Maschinensprache direkt auf dem Zielrechner ausgeführt werden kann. Abbildung 2: Verfahrensweise eines Interpreters, in Anlehnung an [ALUS08, S. 3] Der komplette Zeitraum, in dem die Ausführung eines kompilierten Zielprogramms stattfindet, ist die Laufzeit [DN07, S. 27]. Jene findet in einer Laufzeitumgebung statt, die der Compiler gemeinsam mit Zielrechner und Betriebssystem verwaltet [ALUS08, S. 520]. Diese Umgebung sorgt dafür, dass die kompilierten Abstraktionen des Quellprogramms auf dem Zielrechner unterstützt werden. Hierzu sorgt sie z. B. für die Zuweisung von Speicher für Objekte, die Verknüpfung zwischen Variablen und Methoden und die Bereitstellung von Schnittstellen zum Betriebssystem und anderen Programmen. 2

5 Kapitel 2: Übersetzung und Ausführung von Programmen 2.2 Virtuelle Maschinen als Laufzeitumgebung Bei einigen höhreren Programmiersprachen, wie etwa Java und C#, fungiert eine VM als Laufzeitumgebung [Re06, S. 766]. Eine VM stellt eine Umsetzung einer Rechnerarchitektur als Software dar und verfügt dabei über einen eigenen Befehlssatz und Speichersegmente für die auszuführenden Programme. Bei einer VM werden die Startprogramme im ersten Schritt in Zwischenprogramme übersetzt. Diese bestehen nicht aus ausführbarer Maschinensprache, sondern sind so konzipiert, dass die VM sie ausführen kann. Meistens, so z. B. auch in Java, kommt dafür Bytecode zum Einsatz. Diese Zwischensprache ist unabhängig von dem auszuführenden Zielrechner. Stattdessen repräsentiert sie den Befehlssatz einer VM bzw. die VM-Sprache [Ke01, S. 12 f.] (Vgl. Tab. 1 in Anhang A). Diese muss schließlich in der Lage sein, diesen Code verarbeiten und für die Ausführung des zugehörigen Programms auf dem Zielrechner sorgen zu können. Nach der Erstellung des Bytecodes durch einen Compiler muss jener durch die VM Abbildung 3: Verfahrensweise eines Hybridcompilern, in Anlehnung an [ALUS08, S. 4] bearbeitet werden [Re06, S. 766]. Eine Option dafür ist die Interpretierung des Zwischencodes durch einen Interpreter in der VM (Vgl. Abb. 3). Andere Möglichkeiten sind die Übersetzung des Bytecodes in Maschinensprache beim Laden dessen in die VM, wodurch der Interpreter überflüssig werden würde, oder die Verwendung eines Just-in-time-Compilers (JIT-Compiler). Dieser übersetzt zur Laufzeit die am häufigsten verwendeten Programmteile in Maschinensprache, wodurch deren Ausführung beschleunigt wird. Die restlichen Programmteile werden weiterhin interpretiert. 3

6 3 Die Java Virtual Machine 3.1 Die Programmiersprache Java Die Motivation zur Entwicklung der Programmiersprache Java waren die Gewährung einer generellen - und insbesondere sicheren Ausführbarkeit von Java-Anwendungen auf unterschiedlichen Rechnern und eines sicheren Transports dieser Anwendungen über Netzwerke [LY99, Kap. 1.1]. Java ist eine objektorientierte Programmiersprache, welche Programmierern eine möglichst schnelle und einfache Beherrschung derselbigen ermöglichen soll [GJSB05, Kap. 1]. Hierzu abstrahiert Java von den Instruktionen, welche bei der späteren Ausführung durch die VM abgearbeitet werden. So erfolgt bspw. die Speicherverwaltung automatisch, um Speicher nicht wie anderen Sprachen manuell freigeben zu müssen. Ein Java-Programm besteht aus einzelnen Klassen, welche zu Paketen zusammengefasst werden können [LY99, Kap. 2]. Klassen können eigene Klassenvariablen, Methoden und Konstruktoren enthalten. Die beiden Datentypen, die Variablen und Ausdrücken zugewiesen werden können, sind primitive - und Referenzdatentypen. Java ist dabei strikt getypt. Alle Datentypen von Variablen und Ausdrücken sind somit zum Zeitpunkt des Compilierens bekannt. Dadurch können dabei leichter Fehler erkannt werden. Primitive Datentypen sind boolean und numerische Werte, wie int und char. Referenztypen sind Klassen-, Interface- und Array-Typen. Bei Klassen existieren die beiden vordefinierten Typen Object, welche die Elternklasse aller anderen Klasse ist, und String, deren Instanzen Zeichenketten darstellen. Bezeichner, z. B. für Variablen, Kommentare und Zeichenketten in Form von char und String bestehen alle aus einer Folge von Buchstaben und Zahlen in Form der Zeichenkodierung Unicode 1. Der restliche Java-Code besteht aus American Standard Code for Information Interchange (ASCII )-Zeichen. Unicode kommt in den genannten Fällen zum Einsatz, da es die meisten existenten natürlichen Sprachen darstellen kann, wodurch Entwickler auf der ganzen Welt z. B. Bezeichner in ihrer eigenen Sprache darstellen können. Die Behandlung von Ausnahmen oder unerwünschten Vorgängen findet über das Werfen einer exception statt. Dies kann automatisch geschehen, über den Befehl throw aber auch manuell geschehen. In jedem Fall können diese Ausnahmen im Programmcode abgefangen werden, um im Falle einer solchen darauf reagieren zu können

7 Die vom Programmierer erstellten java-dateien, welche den Programmcode beinhalten, werden vom Compiler in class-dateien übersetzt, die u. a. VM-Befehle in Form von Bytecode enthalten. Die JVM kann nur das class-dateiformat lesen und keinen ursprünglichen Java-Code. Somit besteht prinzipiell die Möglichkeit auch andere Programmiersprachen auf einer JVM ausführen zu lassen, wenn der Startcode in ein gültiges class-dateiformat überführt werden kann. Die Spezifikation der JVM von Lindholm, Yellin bechreibt eine mögliche Implementierung einer VM [LY99, Kap. 3]. Diese kann jedoch auch anders umgesetzt werden. Die einzige Anforderung dafür ist, dass später das class-dateiformat und die darin definierten Funktionen korrekt ausgelesen und ausgeführt werden. Einige Implementierungsdetails werden somit bewusst dem Entwickler der VM überlassen, so beispielsweise die Wahl des Algorithmus zur Garbage Collection. Eine Umsetzung dieser Spezifikation stellt die Java HotSpot VM dar, welche als Kern der Java Laufzeitumgebung (Java Runtime Environment) von Sun Microsystems die gängige JVM darstellt [SM09a]. 3.2 Das class-dateiformat Eine class-datei enthält immer die Bytecode-Darstellung einer Klasse oder Interface und enthält einen Datenstrom, der aus 8-bit Bytes besteht [LY99, Kap. 4]. Diese können auch zu Werten, die aus mehreren Bytes bestehen, zusammengesetzt werden. Eine korrekte class-datei enthält immer eine einzige ClassFile Struktur (Notation ähnlich der des Datentyps Struct der Programmiersprachen C und C++): ClassFile { u4 magic; u2 minor version; u2 major version; u2 constant pool count; cp info constant pool[constant pool count-1]; u2 access flags; u2 this class; u2 super class; u2 interfaces count; u2 interfaces[interfaces count]; u2 fields count; field info fields[fields count]; u2 methods count; 5

8 method info methods[methods count]; u2 attributes count; attribute info attributes[attributes count]; } (u1, u2 bzw. u4 stehen dabei für die Anzahl von Bytes (1 -, 2 - bzw. 4 Bytes)), aus welchen ein Wert besteht) Die class-datei beginnt immer mit dem Element magic, welches diese über den festen Wert 0xCAFEBABE als solche identifiziert [LY99, Kap. 4.2]. Die Festlegung von Zugriffsrechten über access flags existiert nicht nur für ganze Klassen, sondern ebenfalls für einzelne Felder und Methoden. Hierüber kann festgelegt werden, wer direkt auf diese zugreifen darf. So sind Felder und Methoden bspw. über das Angeben von public von überall aus sichtbar und über private hingegen nur für Klassen aus dem selben Paket. Der Eintrag fields[] umfasst alle Klassenvariablen inkl. zusätzlicher Informationen wie bspw. den Typ des Feldes (String, int, boolean usw.) die Zugriffsrechte (public, private usw.) und zugehörige Attribute (z. B. Annotations) [LY99, Kap ]. Der Aufbau von methods[] entspricht im Prinzip diesem. Als Typ wird der jeweilige Rückgabewert angegeben. Als Attribute werden dabei u. a. der auszuführende Code in Maschinensprache (im Element code[]) und die Exceptions, welche dabei geworfen werden können, geführt. Der Konstantenpool (constant pool count[]) beinhaltet Referenzen auf andere Klassen, Felder und Methoden. Diese Referenzen bestehen aus allen Unicode- Bezeichnern, die für eine eindeutige Identifikation notwendig sind. So werden Methoden bspw. über die jeweilige Klasse, den Bezeichner der Methode, den Rückgabewert und alle Parameter eindeutig identifiziert. Um sich wiederholte Angaben dieser und somit Speicherplatz sparen zu können, werden diese Informationen nur einmal pro class-datei in dem Konstantenpool angeben. Alle Elemente der class-datei, die einen Verweis auf ein anderes Element benötigen, nutzen deshalb eine symbolische Referenz auf den passenden Eintrag im Konstantenpool. 3.3 Speicherbereiche zur Laufzeit Die JVM umfasst mehrere Speicherbereiche, die zur Laufzeit von Bedeutung sind [LY99, Kap. 3.5]. Diese unterteilen sich in solche, die vom Start bis zum Ende der JVM existieren, und solche, die einem Thread zugewiesen sind und von dessen Dauer abhängig sind. Ein Thread beinhaltet die Abarbeitungsabfolge mehrerer Instruktio- 6

9 nen nacheinander, wobei die JVM die gleichzeitige Ausführung mehrerer Threads unterstützt (Weiteres zu Threads in [LY99, Kap. 2.19]). Die Ausführung eines Threads ist dabei immer unabhängig von der anderer Threads, auch wenn sich diese Werte und Objekte von einem gemeinsam genutzten Speicherbereich teilen. Allerdings besitzt jeder Thread ein eigenes Register, das PC (Program Counter) Register [LY99, Kap. 3.5]. Dieses enthält die Adresse der aktuell auszuführenden JVM-Instruktion, wenn diese nicht Bestandteil einer nativen Methoden ist, also einer Methode, die in einer plattformabhängigen Sprache, gewöhnlich C, C++ oder eine Assemblersprache, geschrieben ist (Weiteres zu nativen Methoden in [GJSB05, Kap ]). Bei diesen ist der Registereintrag undefiniert. Zum zweiten ist jedem Thread ein eigener Stack (der Java Virtual Machine Stack) zugeordnet, welcher gleichzeitig mit dem Thread erstellt wird. Dieser Stack speichert lokale Variablen und Zwischenergebnisse in Form von Frames. Unterstützt die JVM die Ausführung von nativem Code, umfasst diese zusätzliche Stacks zur Ausführung dessen, die Nativen Methoden Stacks, deren Bestehen normalerweise von der Dauer eines Threads abhängig ist. Ein Frame wird beim Aufruf einer Methode als Teil des Stacks des aktuellen Threads erstellt und mit der Fertigstellung dieser Methode wieder gelöscht [LY99, Kap. 3.6]. Ein Frame besteht aus einem eigenen Array, welcher lokale Variablen enthält, dem Variablenarray, einem eigenen Operandenstack, welcher nach dem Last-In-First- Out (LIFO) System zur Ablage und weiteren Verarbeitung von Konstanten und Variablen genutzt wird, und einem Verweis auf den Laufzeit-Konstantenpool. Dieser wird zusammen mit der jeweiligen Klasse erstellt und stellt eine Laufzeitrepräsentation des Konstantenpools aus der class-datei dieser Klasse dar. Die Speicherbereiche, welche beim Start der JVM erzeugt werden und sich alle Threads teilen, sind der Heap und der Methodenbereich (Method Area) [LY99, Kap. 3.5]. Der Heap stellt für alle Klasseninstanzen und Arrays Speicher zur Verfügung. Dieser wird von einem automatischen Speicherverwaltungssystem verwaltet, dem Garbage Collector. Dessen Implementierung bleibt dabei dem Entwickler der VM überlassen. Der Methodenbereich umfasst klassenabhängige Daten, wie etwa den Laufzeit-Konstantenpool, Felder- und Methodendaten und den Code der Methoden und Konstruktoren. 7

10 3.4 Verifizierung von class-dateien Vor dem eigentlichen Laden einer class-datei muss überprüft werden, ob deren Format dem vorgegebenen class-dateiformat entspricht [LY99, Kap. 4.9]. Dabei wird kontrolliert, ob die ersten vier Bytes den korrekten magic-eintrag enthalten, alle vorhandenen Attribute von korrekter Länge sind und die Datei weder kürzer noch länger ist als vorgeschrieben. Vor der Verarbeitung einer class-datei durch die JVM muss eine der bedeutendsten Schritte dieser Verarbeitung stattfinden, die Verifizierung. Diese prüft, ob eine class-datei alle notwendigen Bedingungen, welche aus statischen und strukturellen bestehen, erfüllt [LY99, Kap. 4.11]. Dadurch kann sichergestellt werden, dass zur Laufzeit bspw. kein Überlauf (Overflow) und Unterlauf (Underflow) auf dem Operandenstack möglich ist und alle Parameter der verwendeten JVM-Instruktionen einen zulässigen Datentyp haben. Ein Java-Compiler muss im Normalfall die Einhaltung aller statischen Bedingungen überprüfen. Die JVM kann sich beim Ladevorgang jedoch nicht sicher sein, dass der Compiler, der die class-datei erstellt hat, dies tatsächlich beachtet hat und ob diese somit im korrekten Format vorliegt. Dies ist besonders bei der Verteilung von class-dateien über das Internet von Bedeutung. Die Verifizierung, ob alle notwendigen Bedingungen erfüllt sind, folgt zum Zeitpunkt des Bindens (Vgl. Kap. 3.5). Dies verbessert die Schnelligkeit bei der Ausführung durch den Interpreter. Statische Bedingungen sind zum einen für die Attribute der Klasse selbst (Vgl. Kap. 4.8 in [LY99]) einzuhalten und zum anderen für den ausführbaren Code aller Methoden einer Klasse, für welchen zudem noch strukturelle Bedingungen existieren [LY99, Kap. 4.10]. Statische Bedingungen definieren im Allgemeinen die Wohlgeformtheit der Datei und in diesem speziellen Fall, wie die JVM-Instruktionen angegeben werden müssen. So wird bspw. vorgegeben, dass das Element code[] mindestens die Länge von eins haben muss und welche Operanden für welche Instruktionen verwendet werden dürfen. Strukturelle Bedingungen geben an, wie sich die Instruktionen in gegenseitiger Beziehung zueinander verhalten müssen bzw. dürfen. Die Verifizierung des Codes aller Methoden einer class-datei wird durch den Bytecode Verifier durchgeführt [LY99, Kap ]. Dieser teilt im ersten Schritt alle Bytes, die den Code repräsentieren, in die einzelnen Instruktionen auf und analysiert diese, um bspw. deren mögliche Operanden erkennen und auf ihre Zulässigkeit überprüfen zu können. Dies geschieht für jede Methode unabhängig von den anderen. Für jede Instruktion erfasst der Bytecode Verifier vor deren Ausführung den 8

11 Inhalt des Operandenstacks, inkl. der Größe und des Typs aller Einträge, und des Variablenarrays, inkl. des Typs aller Variablen. Als nächstes wird das Datenflussanalyseprogramm (data-flow analyzer) gestartet, welches die vorbereiteten Instruktionen durchgeht und so die Zuweisung von Werten und Speicherplätzen an Variablen simulieren kann. Zur Kontrolle, ob eine Instruktion noch überprüft werden muss, wird für eine jede ein geändert-bit ( changed bit) geführt. Beim Start der Analyse ist der Operandenstack noch leer, allen lokalen Variablen, welche Parameter der jeweiligen Methode darstellen, werden initiale Werte zugewiesen und das geändert-bit der ersten Instruktion wird auf 1 gesetzt. Das Analyseprogramm durchläuft alle Instruktionen schleifenförmig, bis jedes geändert-bit den Wert 0 hat. Zunächst sucht jenes nach der ersten Instruktion, dessen geändert-bit auf 1 steht und setzt dieses auf 0. Im zweiten Schritt werden die Auswirkungen der Instruktion auf den Operandenstack und den Variablenarray simuliert. Liest die Instruktion Werte des Operandenstacks, wird untersucht, ob dieser genügend Werte enthält und ob diese dem notwendigen Typ entsprechen. Ist ebenfalls ein schreibender Zugriff auf den Operandenstack vorgesehen, muss geprüft werden, ob genügend Platz hierfür vorhanden ist. In diesem Fall wird der Schreibvorgang durchgeführt. Bei einem lesenden Zugriff auf lokale Variablen, werden die referenzierten Variablen ebenfalls auf ihren Typ hin getestet. Soll dieser Typ von einer Instruktion verändert werden, wird dies vorgenommen. Schlägt eine der Überprüfungen der beiden lesenden Vorgänge fehl, tut dies auch die gesamte Verifizierung. Als drittes werden alle möglichen Folgeinstruktionen bestimmt. Diese können bspw. die folgende in der Liste aller Instruktionen sein, aber auch eine über den Befehl goto oder eine Verzweigung erreichbare sein. Als letztes werden die aktuellen Operandenstack und Variablenarray mit den beiden aller Folgeinstruktionen zusammengeführt. Wird eine dieser zum ersten mal untersucht, werden bisheriger Stack und Array als der Status vor der Ausführung der Folgeinstruktion festgehalten. Wurde diese bereits einmal überprüft, müssen die beiden jeweiligen Stacks und Arrays zusammengeführt werden. Dabei ist zu beachten, dass bei den Stacks sowohl die Anzahl aller Werte als auch deren Typen übereinstimmen müssen. Bei den Arrays werden die Werte paarweise auf ihren jeweiligen Typ hin überprüft. Wird eine dieser Bedingungen nicht erfüllt, scheitert die komplette Verifizierung. Nach diesem vierten Schritt springt das Datenflussanalyseprogramm wieder zum ersten. 9

12 3.5 Die Ausführung der JVM Laden, Binden und Initialisieren Binden Laden Verifizierung Vorbereitung Auflösung Initialisieren Abbildung 4: Vorbereitung der Ausführung durch Laden, Binden und Initialisieren, in Anlehnung an [Ve00, Kap. 7] Klassen und Interfaces durchlaufen vor der endgültigen Ausführung drei Phasen Laden, Binden und Initialisieren (Loading, Linking and Initializing) (Vgl. Abb. 4). Die Verarbeitung von Java Bytecode auf der JVM beginnt mit dem Erstellen einer initialen Klasse, welche zuvor spezifiziert werden muss, und dem Aufruf deren main-methode (void main(string[])) [LY99, Kap , 5.2 und 5.3]. Enthält die JVM diese Klasse noch nicht im Binärformat, wird der Prozess des Ladens, Bindens und Initialisierens angestoßen. Die Erstellung einer Klasse erfolgt über das Laden derselbigen. Der Ladevorgang wird immer von einer anderen Klasse ausgelöst und erfolgt durch einen Klassenlader (Class Loader), welcher nach einer Binärdarstellung der Klasse, die im Regelfall durch eine class-datei gegeben ist, sucht [LY99, Kap. 5.3]. Ein Klassenlader kann eine Klasse direkt selbst laden und erstellen oder diese Aufgaben an einen anderen Klassenlader übertragen. Zur Laufzeit wird eine Klasse nicht nur über ihren Namen, sondern auch über ihren Klassenlader, der sie erstellt hat, definiert. Array-Klassen bilden hierbei eine Ausnahme, da sie nicht von einem Klassenlader, sondern von der JVM direkt erstellt werden. Es existieren zwei verschieden Arten von Klassenladern nutzerdefinierte - und der Bootstrap Klassenlader [Ve00, Kap. 1]. Der Bootstrap Klassenlader ist direkter Bestandteil der JVM. Nutzerdefinierte hingegen werden wie alle sonstigen Objekte eines Java-Programms in Java geschrieben, in das class-dateiformat übersetzt und zur Laufzeit eingebunden. Dies ermöglicht die dynamische Erweiterung einer Java- Applikation zur Laufzeit, indem dadurch zu jeder Zeit neue Klassen mit zugehörigem Klassenlader nachgeladen werden können. So bspw. über das Internet. Eine Klasse wird immer vom selben Klassenlader erstellt wie die Klasse, welche den Ladevorgang ausgelöst hat [LY99, Kap. 5.3]. Vor dem Ladevorgang einer Klasse 10

13 K mit Namen N durch den Klassenlader L prüft die JVM zunächst, ob K mit Namen N bereits geladen worden ist. In diesem Fall ist ein erneutes Laden und Erstellen nicht notwendig. Andernfalls stößt die JVM den Ladevorgang durch L an, wobei L diesen auch an einen anderen Klassenlader übertragen kann. Dieser Vorgang verläuft sowohl beim Bootstrap - als auch bei nutzerdefinierten Klassenladern im Prinzip gleich. Nur im ersten Schritt unterscheidet sich das Vorgehen. Bei Verwendung des Bootstrap Klassenladers sucht die JVM nach einer bereits vorhandenen, vorgegeben Darstellung der zu ladenden Klasse K mit Namen N. Nutzerdefinierte Klassenlader hingegen erzeugen selbst eine Darstellung in Byteform von K mit Namen N. Ist dies erfolgreich versucht die JVM in beiden Fällen mittels dieser Darstellung und des jeweiligen Klassenladers eine Klasse mit Namen N abzuleiten. Hierbei wird zunächst überprüft, ob die vorgeschlagene Darstellung in einer gültigen Form vorliegt. So muss sie z. B. dem class-dateiformat entsprechen. Zudem werden die Verweise auf mögliche Elternklassen aufgelöst und auf ihre Korrektheit untersucht. Laufen diese Schritte ohne Fehler ab, hält die JVM fest, dass der verwendete Klassenlader L der erstellende der Klasse K ist. Nach Abschluss des Ladevorgangs beginnt das Binden der Klasse K, welches die Verifizierung und Vorbereitung von K inkl. möglicher Elternklassen und Elementtypen (bei Array-Klassen) und als letzten Schritt die optionale Auflösung umfasst [LY99, Kap. 5.4]. Die Verifizierung umfasst die Prüfung, ob die Binärdarstellung von K zulässig ist, also dem class-dateiformat genügt (Vgl. Kap. 3.4). Dies kann das Laden zusätzlicher Klassen zur Folge haben. Während des daran anschließenden Vorbereitungsschrittes weist die JVM allen Variablen von K einen Speicherort zu und besetzt diese mit initialen Werten. Die Auflösung ist der letzte Schritt des Bindens, während dessen die symbolischen Verweise von K auf andere Klassen durch konkrete Werte ersetzt werden. Dieser Schritt ist an dieser Stelle optional, da die Auflösung der symbolischen Verweise auch erst zu dem Zeitpunkt der tatsächlichen Verwendung stattfinden kann. So wird bei dem Verweis auf Felder oder Methoden einer anderen Klasse diese zunächst über einen Klassenlader geladen, um darauf zugreifen zu können. Dabei wird bei Feldern und Methoden überprüft, ob die aufrufende Klasse die Berechtigung dazu hat. Dies ist bspw. bei einer Deklaration als public der Fall oder wenn beide Klassen Bestandteil des selben Pakets sind. Die dritte und letzte zu durchlaufende Phase ist die Initialisierung einer Klasse, in welcher den Klassenvariablen die initialen Werte zugewiesen werden, die der Ent- 11

14 wickler im Programmcode vorgesehen hat [LY99, Kap und ]. Dabei hat die JVM für die Synchronisation, wenn mehrere Threads gleichzeitig die Initialisierung vornehmen wollen, und rekursive Initialisierung, die bspw. auftritt, wenn eine Klasse A die Methode einer Klasse B und B wiederum eine Methode von A aufruft, zu sorgen. 3.6 Sicherheit Die Architektur Die Sicherheitsarchitektur von Java besteht aus den drei Hauptkomponenten Bytecode-Verifier (Vgl. Kap. 3.4), Klassenlader (Vgl. Kap. 3.5) und Sicherheitsmanager (Security Manager) [Ec08, S ]. Dieser ist die zentrale Komponente dieser Sicherheitsarchitektur und setzt das Sicherheitsmodell um, indem er alle Zugriffe auf sicherheitskritische Systemressourcen zur Laufzeit kontrolliert. Dazu gehören Zugriffe auf Dateien, Netzressourcen, Betriebssystemdienste und die Definition neuer Klassenlader. lokaler oder entfernter Code JVM A.class geladene Klassen B.class C.class Sicherheitsstrategie Systemdomäne Sandboxdomäne Domäne 1 Domäne 2 freier Zugriff Policy Policy Sicherheitsmanager Systemressourcen (Daten, Speicher usw.) Abbildung 5: Die Sicherheitsarchitektur der JVM [Ec08, S. 608] Die allererste Version des Sicherheitsmodells ist als Sandbox-Modell bekannt [Ec08, S ]. In diesem darf lokal erzeugter Code auf alle benötigten Systemressourcen zugreifen und Code, welcher von einem anderen Rechner stammt, wird in einer Sandbox ausgeführt, welche diesem Code nur eingeschränkte Rechte gibt. In einer zweiten Version wurde dieses Modell um die Möglichkeit erweitert, Code zu signieren, welcher auf einem anderen Rechner dadurch als vertrauenswürdig eingestuft und mit allen Zugriffsrechten ausgeführt werden kann. In der aktuellen Version ist das Sicherheitskonzept wesentlich umfangreicher (Vgl. Abb. 5), um einer 12

15 Java-Anwendung nur noch so viele Rechte geben zu können, wie benötigt. So fällt auch die grundsätzliche Unterscheidung zwischen lokalem und entferntem Code weg. Die generelle Sicherheitsstrategie für den auszuführenden Code wird durch eine zugehörige Policy-Datei festgelegt, welche auf dem Rechner des Nutzers angelegt sein muss [Ec08, 606 f.]. Fehlt diese Datei, wird der Code in der Sandbox ausgeführt. Die Datei kann abhängig von Herkunftsort (z. B. Internetadresse) oder Signaturen des Codes Rechte vergeben, wie bspw. den Lese- oder Schreibzugriff auf bestimmte lokale Dateien oder die Verbindungsherstellung zu bestimmten Internetadressen. Die Überprüfung von Signaturen erfolgt über einen Abgleich von dem privaten Schlüssel, mit dem der Code signiert ist, mit einem öffentlichen Schlüssel, der in einer Schlüsseldatenbank auf dem ausführenden Rechner vorhanden sein muss [Go09, Kap. 3.3]. Folgendes Code-Bsp. zeigt zwei mögliche Einträge in einer Policy-Datei (in Anlehnung an [Ec08, S. 607]). Der erste Eintrag erlaubt allen Klassen, die als Herkunft die URL haben und von Duke signiert sind, den lesenden und schreibenden Zugriff auf alle Dateien im Verzeichnis /bob/temp/, den lesenden Zugriff auf alle class-dateien (gekennzeichnet durch die Endung auf / statt auf /* ) im Verzeichniss /joe/temp/ und die Verbindungsherstellung über ein Socket zu allen Adressen der Domäne rman.com. Der zweite Eintrag ermöglicht unbahängig von Herkunft und Signatur den Empfang von Daten an allen Ports von 1024 aufwärts des lokalen Rechners. grant codebase " signedby "Duke"{ permission java.io.filepermission "read, write","/bob/temp/*"; permission java.io.filepermission "read","/joe/temp/"; permission java.net.socketpermision "connect","*.rman.com"; }; grant {permission java.net.socketpermission "localhost:1024-","listen";}; Erweitert wird die Sicherheitsstrategie um Schutzdomänen, welchen einzelne Klassen und Rechte zugewiesen werden können. Die Rechte einer Schutzdomäne übertragen sich damit auf die darin enthaltenen Klassen und deren Instanzen. Die einzige Domäne mit dem Recht des freien Zugriffs auf Systemressourcen ist die Systemdomäne. Diese enthält die Klassenbibliotheken, welche die JVM umfasst und zur 13

16 Ausführung von Code benötigt. Diese Domäne ist zudem der einzige Weg, über den unterschiedliche Domänen miteinander interagieren können. Auf direktem Wege ist dies untersagt. Die Zugriffskontrolle wird durch den Sicherheitsmanager durchgeführt, welcher hierzu um den Access Controller erweitert wird [Ec08, ]. An diesen werden die Zugriffsanfragen weitergeleitet und dieser überprüft anhand der entsprechenden Policy-Datei, ob die anfragende Komponente die Rechte hierzu besitzt. Es besteht allerdings auch die Möglichkeit, den Access Controller direkt anzusprechen, indem diesem Policy-Datei und gewünschte Berechtigungen übergeben werden. Die Kontrolle des Access Controllers umfasst eine Analyse aller Zugriffe des Threads, in dem die anfragende Komponente ausgeführt wird. Die erforderlichen Berechtigungen für diese Anfrage müssen dabei allen Schutzdomänen, welche ein Thread bisher durchlaufen hat, zugeteilt sein. Dies soll verhindern, dass ein Thread bereits durch einen einmaligen Zugriff auf die Systemdomäne freien Zugriff auf alle Systemressourcen erlangt. Eine weitere Möglichkeit zur Zugriffskontrolle bietet das Guarded Object. Dies ermöglicht es dem Anbieter eines Objektes, dieses um ein Wächterobjekt zu erweitern. Dieses überwacht wiederum alle Zugriffe von Nutzern auf das zu bewachende Objekt Risiken und Herausforderungen Die Sicherheitskontrollen von Java sind mittlerweile schon umfangreich, nichtsdestotrotz bestehen nach wie vor noch Probleme und Herausforderungen für die weitere Entwicklung. So ist die Verifizierung durch den Bytecode-Verifier lediglich eine Art Unbedenklichkeitstest [Ec08, S. 604]. Ein Test auf die Funktionalität von Java-Code ist nicht möglich. Eine Angriffsmöglichkeit von außen ergibt sich durch das klar strukturierte class- Dateiformat. In eine bereits erstellte class-datei lässt sich dadurch gezielt nachträglich Code in Form von JVM-Instruktionen schreiben, welche dann nur noch über den Einbau des Befehls goto referenziert werden müssen. Zudem kann das Feld access flags verändert werden, indem die Berechtigung darin verändert wird (z. B. private löschen oder durch public ersetzen). Der Befehl goto ist zudem ein gutes Beispiel für die nicht übereinstimmende Semantik von der Sprache Java und dem Bytecode, welcher daraus generiert wird. Dies ermöglicht die Erstellung einer class-datei, welche so nicht von einem Java- 14

17 Compiler erstellt worden wäre, aber dennoch die Verifizierung vollständig durchläuft. Über goto kann bspw. in Schleifen an beliebigen Punkten ein- und ausgestiegen werden, was bei der Erstellung eines Programms in Java so nicht möglich ist. Dort existieren feste Ein- und Austrittspunkte. Die Rechtevergabe über die Policy-Datei stellt eine sinnvolle Weiterentwicklung der Sicherheitsstrategie unter Java dar, nichtsdestotrotz kann auch sie keine vollständige Sicherheit garantieren [Ec08, S. 609 f.]. Die Identifizierung von Java-Klassen und die Vergabe von Rechten an diesen über deren Herkunftsadresse oder Signatur, welche in der Policy-Datei angegeben sind, ermöglicht es Angreifern, eine Herkunftsadresse vorzutäuschen und so potenziell gefährdenden Code mit zu viel Rechten auszuführen. Eine Prüfung der Authentizität der Adresse einer zu ladenden Klasse wird vom Rechner nicht durchgeführt, sondern der für diese Klasse angegebenen wird vertraut und einfach mit dem Eintrag in der Policy-Datei abgegelichen. Eine Verbesserung dieser Authentifizierung oder der Einsatz sicherer Transportprotokolle können dabei zu einer Problemlösung beitragen. Die Nutzung von Signaturen kann ebenfalls ein Sicherheitsproblem darstellen. Die Namen, deren Signaturen vertrauenswürdig sind, werden in einer lokalen Datenbank auf dem Rechner geführt. Die Pflege dieser Datenbank obliegt dabei alleine dem Nutzer. Geschieht dies nicht, ist sowohl Konsistenz als auch Integrität der Datenbank unter Umständen nicht mehr sichergestellt. Die Policy-Datei selbst kann auch das Ziel von Angriffen werden. Diese Datei befindet sich auf dem Rechner des Nutzers, wodurch deren Integrität von den Sicherheitsmechanismen des Betriebssystem ist. Ein Angreifer kann ansonsten eine eigene Policy-Datei auf dem ausführenden Rechner platzieren, um eigenen Code mit allen von ihm gewünschten Rechten ausführen zu lassen. Durch diese Manipulation könnte man das komplette Sicherheitskonzept umgehen. Ein Schwäche stellt auch die Umsetzung der Zugriffskontrolle an sich dar. Diese findet nur beim allerersten Objektzugriff durch Sicherheitsmanager und Access Controller statt. Bei allen folgenden Objektzugriffen werden diese nicht eingeschalten, da für die bereits aufgerufenen Objekte Stellvertreter erzeugt werden, welche dem Aufrufer übergeben werden. Dieser kann damit in der Folge ohne weitere Kontrolle darauf zugreifen. 15

18 3.7 Die Squawk Java Virtual Machine Die geteilte Architektur Die Squawk Virtual Machine ist eine kleine JVM, die größtenteils in Java selbst geschrieben und für den Einsatz auf drahtlosen Sensorgeräten, bei gleichzeitigem Verzicht auf ein zusätzliches Betriebssystem, gedacht ist [SCCDW06, S. 78 f.]. Die Idee der Entwickler dahinter ist die Schaffung von drahtlosen Sensornetzwerken im alltäglichen Leben über den Einbau von Sensoren in bspw. Haushaltsgeräte, wie etwa Waschmaschine und Herd. Sensorgeräte für diesen Einsatzzweck müssen von geringer physischer Größe sein und können nur begrenzte Hardwareressourcen zur Verfügung stellen. Aus diesem Grund werden zur Entwicklung von Anwendungen hierfür in der Regel C und Assemblersprachen verwendet und nicht Java, da der Speicherbedarf von JVM und den daraus auszuführenden Anwendungen im Normalfall deutlich größer ist. Der Einsatz von Sprachen, welche eine VM zur Ausführung von Programmen nutzen und nicht direkt ausführbaren Maschinencode erstellen, kann hingegen aufgrund einer kürzeren Entwicklungsdauer die Entwicklung von Anwendungen und Prototypen für Sensorgeräte vereinfachen. Für Java sprechen in diesem Umfeld neben Garbage Collection, Sicherheit bei Zeigern, Fehlerbehandlung und einer ausgereiften Verwaltung von Threads zudem vorhandene Entwicklungsumgebungen und Werkzeuge zum Debuggen und Deployen von Anwendungen. Die Squawk VM ist so konzipiert, dass sie auf dem drahtlosen Sun Small Programmable Object Technology (SPOT) Gerät ohne zusätzliches Betriebssystem laufen kann, wodurch Speicherplatz für dieses gespart werden kann [SCCDW06, S. 79]. Hierzu umfasst Squawk die Behandlung von Unterbrechungen (Interrupts), einen Netzwerk-Stack und eine Ressourcenverwaltung. Diese Funktionen von Betriebssystemen, ein geringer Speicherbedarf, die Darstellung von Anwendungen als einzelne Objekte, die Ausführung mehrerer Applikationen in einer VM, die Möglichkeit, Anwendungen direkt von einem Gerät zu einem anderen senden zu können, und die Authentifizierung von Anwendungen auf dem Gerät nach dem Deployen machen Squawk zu einer gut geeigneten VM für drahtlose Sensorgeräte. Ein mögliches Einsatzgebiet für Geräte, die wie SPOT mit Sensoren ausgestattet sind, ist bspw. die Ausstattung von Herd und Auto mit einem SPOT, um den Nutzer warnen zu können, wenn er mit dem Auto wegfährt und der Herd noch an ist [SM09b]. Im industriellen Umfeld ist eine Sicherung von wertvollen Gütern hierüber denkbar. So könnten sich z. B. Container gegenseitig überwachen, damit Alarm ge- 16

19 geben werden kann, wenn einer der Container geöffnet wird, obwohl sie sich noch auf dem Transportweg befinden. Der geringe Speicher kleiner, speicherarmer Geräte macht eine Veränderung der gewöhnlichen VM-Architektur notwendig, da das Laden von Klassen nicht auf einem solchen Gerät durchgeführt werden kann [SCCDW06, S. 80]. Deshalb besitzt Squawk eine verteilte Architektur (Vgl. Abb. 6), die sich zum einen aus der VM auf dem Gerät selbst und zum anderen aus dem Suite Creator, welcher im Gegensatz zur VM auf einem Desktop-Rechner läuft, zusammensetzt. Die Teile dieser Architektur, welche auf dem Gerät laufen, sind nicht alle in Java geschrieben. Der einzige Teil der VM, für den dies gilt, ist der Interpreter. Die Entwickler planen jedoch, diesen in Zukunft in Java zu schreiben und dann in C konvertieren zu lassen. Auf dem Gerät läuft zudem ein Bootloader, welcher in C implementiert ist. Dieser hat die Aufgabe, alle Komponenten, die entweder in C geschrieben sind oder von Java in C konvertiert werden, (z. B. Interpreter und Garbage Collector) und die Bootstrap- Suite auf das Gerät zu laden. Die Bootstrap-Suite ist eine suite-datei, welche alle Java-Bibliotheken (Java Libraries) umfasst, die für den Betrieb der Squawk VM notwendig sind. Host.class/.jar Device.suite Suite Creator Loader Verifier Transformer Serializer Digital Signer On-device VM Interpreted VM Java libraries Bootloader Native Code.suite Abbildung 6: Die geteilte Architektur der Squawk VM (weiß = Java-Code, schwarz=c-code), in Anlehnung an [SCCDW06, S. 80] 17

20 3.7.2 Das suite-dateiformat Der Suite-Creator hat die Aufgabe, class-dateien in suite-dateien zu konvertieren [SCCDW06, S. 80]. Diese Suite, die ebenfalls aus Bytecode, dem Squawk- Bytecode besteht, ist jedoch weniger speicheraufwändig und kann zudem weitere Optimierungen umfassen. Hierzu gehören bspw. eine Kürzung von Instruktionen, die normalerweise drei Bytes umfassen, auf 2 Bytes, wenn möglich, eine Auflösung aller symbolischen Verweise auf andere Klassen, Methoden und Felder, wodurch der Konstantenpool wegfalle und die spätere Interpretierung verschnellert werden kann und eine Vereinfachung der Garbage Collection. Suite-Dateien haben dadurch im Schnitt lediglich 38% der Größen von class-dateien, ohne dabei jedoch komprimiert zu sein. Darauf wird bewusst verzichtet, um das Entpacken in der VM auf dem Gerät zu vermeiden. Eine zusätzliche Verringerung des geräteseitigen Speicheraufwands wird durch die Einbettung des Squawk Bytecode Verifiers in den Suite Creator erreicht [SCCDW06, S. 81]. Dieser muss sicherstellen, dass die Umwandlung von dem class- in das suite-dateiformat korrekt erfolgt ist. Im Wesentlichen entspricht dieser Verifier dem gewöhnlichen Java Bytecode Verifier (Vgl. Kap. 3.4), wobei Anpassungen auf den Squawk Bytecode jedoch zwangsläufig notwendig sind. Eine Suite kann nicht nur einzelne Klassen, sondern ganze Klassenstrukturen enthalten [SCCDW06, S. 80]. Dabei kann eine Klasse immer nur auf Klassen der selben Suite oder einer Elternsuite verweisen. Suites können, wie Klassen auch, hierarchisch angeordnet werden. Der Squawk-Bytecode wird vor dem endgültigen Abspeichern noch serialisiert und alle Zeiger auf andere Objekte werden in entsprechende Adressen übersetzt. Bei der Deserialisierung werden diese mittels einer Pointer-Tabelle, welche ebenfalls in der suite-datei enthalten ist, wieder aufgelöst. Die hierarchische Anordnung von Suites und dieses Vorgehen beschleunigen den Start der VM und das Laden von Klassen. Die Möglichkeit zur Authentifizierung von Anwendungen, die auf ein Gerät übertragen worden sind und ausgeführt werden sollen, ist bei der Architektur der geteilten VM von großer Bedeutung [SCCDW06, S. 84]. Hierzu wird die Suite bei deren Erstellung mit eine privaten Schlüssel signiert, welcher sich auf dem Desktop-Rechner befindet. Authentifiziert wird die Suite auf dem Gerät dann über den entsprechenden öffentlichen Schlüssel. Ist dies erfolgreich, wird die Suite auf dem Gerät installiert. 18

21 3.7.3 Die geräteseitige VM Die Absicht, die Squawk VM ohne Betriebssystem ausführen zu können, setzt voraus, dass Squawk einen eigenen Thread Scheduler umfasst, welcher die Ausführung mehrerer Threads zur gleichen Zeit kontrolliert und für das Umschalten zwischen diesen verantwortlich ist [SCCDW06, S. 81 f.]. Hierzu setzt Squawk auf Green Threads, welche eine Umgebung zur Ausführung mehrerer Threads emulieren, ohne dabei auf ein Betriebssystem angewiesen zu sein. Von Bedeutung ist beim Scheduling zudem die Behandlung von Unterbrechungen (Interrupts), welche sonst ebenfalls von einem Betriebssystem vorgenommen wird. Hierbei muss beachtet werden, dass sowohl Garbage Collection als auch die Ausführung von Systemcode nicht-präemptiv sind, also nicht durch Interrupts unterbrochen werden können. Dies beruht auf der Annahme, dass in Squawk die meiste Zeit Anwendungen ausgeführt werden. Die Durchführung einer Unterbrechung erfolgt durch den Gerätetreiber, welcher in Java selbst geschrieben ist. Erfolgt eine Unterbrechung, wird der aktuelle Thread gestoppt, weitere Unterbrechungen für diesen werden gesperrt und der Punkt, an dem die Unterbrechung erfolgt ist, wird gespeichert, um später wieder zu diesem zurückkehren zu können. Die geteilte Architektur der Squawk ermöglicht das Debugging von Anwendungen über Werkzeuge, die das Java Debug Wire Protocol (JDWP) unterstützen (so z. B. die Entwicklungsumgebung NetBeans von Sun Microsystems) [SCCDW06, S. 84]. Auf Seite des Desktop-Rechners läuft ein Debug Proxy und auf dem tragbaren Gerät ein Debug Isolate. Dieses umfasst zum einen den Squawk Debug Agent (SDA), welcher für die Kommunikation mit dem Debug Proxy und die Steuerung der Anwendung, welche debugged wird, zuständig ist und zum anderen die SDA VM Unterstützung, welche Teil der VM ist und den SDA an diese anbindet. Die Kommunikation erfolgt nicht über das JDWP, sondern über das daran angelehnte Squawk Debug Wire Protocol (SDWP). Die Ausführung und Kontrolle von Anwendungen in Squawk erfolgt durch die Repräsentierung dieser in Objekten, welche eine Instanz der Klasse Isolate darstellen [SCCDW06, S. 82]. Über Methoden dieser Klasse kann eine Anwendung dann bspw. gestartet und gestoppt werden Dies verdeutlicht folgendes Bsp., in welchem ein Isolate zur Anwendung com.sun.spots.selfhibernator instanziiert, das Isolate gestartet und an dieses eine Ausgabedatenstrom gesendet wird: 19

22 Isolate isolate = new Isolate ("com.sun.spots.selfhibernator", url()); isolate.start(); send (isolate, outstream);... Diese Isolates, welche eine Anwendung im Kontext der Squawk darstellen, verhalten sich analog zu Prozessen in Betriebssystemen, indem ein Isolate mehrere Threads enthalten kann und diesen gemeinsame Ressourcen zur Verfügung stellt [SCCDW06, S. 82]. Einzelne Anwendungen laufen immer isoliert von den anderen ab. Anwendungsspezifische Daten, wie etwa Klassenvariablen, werden dabei im entsprechenden Isolate-Objekt gespeichert. Die laufenden Anwendungen teilen sich im Gegensatz zu sonstigen Implementierungen einer JVM allerdings allgemeine Ressourchen, wie etwa die Java-Bibliotheken der VM. Es ist somit nicht eine VM für jede laufende Anwendung notwendig, wodurch der Speicheraufwand verringert wird. Isolates können in jedem Zustand zu einem Datenstrom serialisiert werden, um diese z. B auf einer Festplatte speichern zu können [SCCDW06, S. 82]. Dabei werden auch alle Threads inkl. aktuellem Zustand und temporären Variablen serialisiert. Vor der Serialisierung muss ein Isolate jedoch zunächst alle offenen Verbindungen nach außen hin, wie etwa Desktop-Rechner, schließen. Der entstehende Datenstrom kann direkt in eine andere Squawk VM eingelesen werden. Zur Vereinfachung hiervon, können Isolates auch direkt von einem Gerät auf ein anderes migriert werden. Anwendungen können somit in einem Zustand angehalten werden und auf dem selben Gerät oder jedem beliebigen anderen fortgesetzt werden. Über den Befehl moveto(ipaddress ip) können sich Anwendungen auch selbstständig auf ein anderes Gerät verschieben. 20

23 Kapitel 4: Fazit und Ausblick 4 Fazit und Ausblick Mit der JVM als Kernstück der Java-Architektur können die Entwicklungsziele von Java weitestgehend umgesetzt werden. Die Übersetzung von Java-Code in Bytecode und dessen Speicherung in class-dateien ermöglicht in Verbindung mit der JVM die Portabilität einer einmal übersetzten Java-Applikation und deren Ausführung auf jedem beliebigen Zielrechner. Für die Sicherheit sorgen dabei die umfassenden Mechanismen zur Verifizierung von class-dateien und Zugriffskontrolle. Diese haben sich seit den Anfängen von Java zwar deutlich verbessert, gewährleisten aber nach wie vor keinen hundertprozentigen Schutz vor bösartigen Angriffen von außen. Die Implementierung der Squawk VM gibt ein gutes Bsp. für die Möglichkeiten, die einem Java mittlerweile gibt. So etwa die Implementierung einer JVM in Java selbst, die auf bestimmten Geräten (z. B. dem SPOT) sogar ohne seperates Betriebssystem lauffähig ist. Squawk und SPOT geben zudem einen guten Ausblick darauf, was im Bereich der Java-Entwicklung in Zukunft kommen kann. Java und damit auch die JVM sind generell einem ständigen Veränderungsprozess unterworfen, welcher u. a. die Steigerung der Performance zum Ziel hat [SM07]. Von großer Bedeutung ist dabei eine stetige Verbeserung der Garbage Collection. So umfasst die Java HotSpot VM mittlerweile bspw. unterschiedliche Garbage Collector, welche je nach Größe der auszuführenden Applikation und zu erzielender Performance geeignet und dementsprechend ausgewählt werden können [SM09c]. Ein aktueller Änderungsvorschlag über ein Java Specification Request (JSR) existiert derzeit nur ein einziger in JSR 924 [SM04]. Dieser soll die Typüberprüfung (Typechecking) für alle class-dateien, deren Versionsnummer größer als 50 ist, einführen. Weitere Anpassungen der aktuellen Spezifikation von Java und der JVM sind aber für die Zukunft zu erwarten, um die Sicherheit und Performance von Java weiter steigern zu können. 21

24 Kapitel A: Übersetzung von Java-Code in Bytecode A Übersetzung von Java-Code in Bytecode Startprogramm in Java-Code Zwischenprogramm in Bytecode class vector { aload 0 Load this int arr[]; getfield #10 Load this.arr int sum() { astore 1 Store in la int sum() { iconst 0 int la[] = arr; istore 2 Store 0 in S int S = 0; aload 1 Load la for (int i=la.length; i>=0;) arraylength Get its length S += la[i]; istore 3 Store in i return S; A: iinc 3-1 Subtract 1 from i } iload 3 Load i } iflt B Exit loop if 0 iload 2 Load S aload 1 Load la iload 3 Load i iaload Load la[i] iadd add in S istore 2 store to S goto A do it again B: iload 2 Load S ireturn Return it Tabelle 1: Übersetzung eines Startprogramms in Java-Code in ein Zwischenprogramm in Bytecode (Vgl. [Go95, S. 112]) 22

25 Literaturverzeichnis Literatur [ALUS08] Alfred V. Aho, Monica S. Lam, Jeffrey D. Ullman, Ravi Sethi: Compiler: Prinzipien, Techniken und Werkzeuge, 2nd Edition, Pearson Education, [Ec08] Claudia Eckert: IT-Sicherheit Konzepte-Verfahren-Protokolle, 5. Auflage, Oldenbourg Wissenschaftsverlag, [DN07] Klaus-Georg Deck und Herbert Neuendorf: Java-Grundkurs für Wirtschaftsinformatiker, 1. Auflage, Vieweg+Teubner, [Go09] Li Gong: Java SE Platform Security Architecture, Version 1.2, URL: spec/security-spec.doc.html, Abrudatum: 17. Mai [Go95] James Gosling: Java Intermediate Bytecodes, Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations, S , [GJSB05] James Gosling, Bill Joy, Guy Steele, Gilad Bracha: The Java Lanuage Specification, 3rd Edition, Addison-Wesley Longman, 2005, abgerufen über: URL: java language-3 0-mr-spec.zip, Abrufdatum: 11. Mai [Ke01] Christian Kenngott: Virtuelle Maschinen mit erweiterbarem Befehlssatz, Dissertation am Institut für Praktische Informatik (Gruppe Software) der Technisch-Naturwissenschaftlichen Fakultät der Johannes Kepler Universität Linz, [LY99] Tim Lindholm, Frank Yellin: The Java Virtual Machine Specification, 2nd Edition, Addison-Wesley Longman, 1999, abgerufen über: URL: edition/ html/vmspectoc.doc.html, Abrufdatum: 04. März unter Einbeziehung von: URL: Abrufdatum: 21. April

Laufzeitumgebungen Das Beispiel der Java Virtual Machine

Laufzeitumgebungen Das Beispiel der Java Virtual Machine Westfälische Wilhelms-Universität Münster Laufzeitumgebungen Das Beispiel der Java Virtual Machine Benjamin Leenen Im Rahmen des Seminars zur Übersetzung von künstlichen Sprachen 2 Agenda Virtuelle Maschinen

Mehr

J.5 Die Java Virtual Machine

J.5 Die Java Virtual Machine Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class

Mehr

Java Virtual Machine (JVM) Bytecode

Java Virtual Machine (JVM) Bytecode Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

Mehr

Vorkurs Informatik WiSe 15/16

Vorkurs Informatik WiSe 15/16 Java 1 Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 12.10.2015 Technische Universität Braunschweig, IPS Überblick Organisatorisches Arbeitsablauf Hello! 12.10.2015 Dr. Werner Struckmann / Stephan

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

2. Word-Dokumente verwalten

2. Word-Dokumente verwalten 2. Word-Dokumente verwalten In dieser Lektion lernen Sie... Word-Dokumente speichern und öffnen Neue Dokumente erstellen Dateiformate Was Sie für diese Lektion wissen sollten: Die Arbeitsumgebung von Word

Mehr

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente Autorisierung Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente Dokumentation zum Referat von Matthias Warnicke und Joachim Schröder Modul: Komponenten basierte Softwareentwickelung

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Durchführung der Datenübernahme nach Reisekosten 2011

Durchführung der Datenübernahme nach Reisekosten 2011 Durchführung der Datenübernahme nach Reisekosten 2011 1. Starten Sie QuickSteuer Deluxe 2010. Rufen Sie anschließend über den Menüpunkt /Extras/Reisekosten Rechner den QuickSteuer Deluxe 2010 Reisekosten-Rechner,

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Zahlensysteme: Oktal- und Hexadezimalsystem

Zahlensysteme: Oktal- und Hexadezimalsystem 20 Brückenkurs Die gebräuchlichste Bitfolge umfasst 8 Bits, sie deckt also 2 8 =256 Möglichkeiten ab, und wird ein Byte genannt. Zwei Bytes, also 16 Bits, bilden ein Wort, und 4 Bytes, also 32 Bits, formen

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Task: Nmap Skripte ausführen

Task: Nmap Skripte ausführen Task: Nmap Skripte ausführen Inhalt Einfache Netzwerkscans mit NSE Ausführen des Scans Anpassung der Parameter Einleitung Copyright 2009-2015 Greenbone Networks GmbH Herkunft und aktuellste Version dieses

Mehr

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper)

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper) Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10 Technische Informationen (White Paper) Inhaltsverzeichnis 1. Über dieses Dokument... 3 2. Überblick... 3 3. Upgrade Verfahren... 4

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen Um die maximale Sicherheit für das Betriebssystem und Ihre persönlichen Daten zu gewährleisten, können Sie Programme von Drittherstellern

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick Vorlesung Objektorientierte Softwareentwicklung Sommersemester este 2008 Kapitel 0. Java-Überblick Was sind die Ziele? Warum Java? Komplexe Anwendungen e-business verteilt zuverlässig sicher mobil persistent

Mehr

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC PARAGON Technologie GmbH, Systemprogrammierung Heinrich-von-Stephan-Str. 5c 79100 Freiburg, Germany Tel. +49 (0) 761 59018201 Fax +49 (0) 761 59018130 Internet www.paragon-software.com Email sales@paragon-software.com

Mehr

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken

Anleitung zur Einrichtung einer ODBC Verbindung zu den Übungsdatenbanken Betriebliche Datenverarbeitung Wirtschaftswissenschaften AnleitungzurEinrichtungeinerODBC VerbindungzudenÜbungsdatenbanken 0.Voraussetzung Diese Anleitung beschreibt das Vorgehen für alle gängigen Windows

Mehr

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt Inhaltsverzeichnis Aufgabe... 1 Allgemein... 1 Active Directory... 1 Konfiguration... 2 Benutzer erstellen... 3 Eigenes Verzeichnis erstellen... 3 Benutzerkonto erstellen... 3 Profil einrichten... 5 Berechtigungen

Mehr

ObjectBridge Java Edition

ObjectBridge Java Edition ObjectBridge Java Edition Als Bestandteil von SCORE Integration Suite stellt ObjectBridge Java Edition eine Verbindung von einem objektorientierten Java-Client zu einer fast beliebigen Server-Komponente

Mehr

Leitfaden zur Installation von Bitbyters.WinShutdown

Leitfaden zur Installation von Bitbyters.WinShutdown Leitfaden zur Installation von Bitbyters.WinShutdown für Windows 32 Bit 98/NT/2000/XP/2003/2008 Der BitByters.WinShutDown ist ein Tool mit dem Sie Programme beim Herunterfahren Ihres Systems ausführen

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

Kompilieren und Linken

Kompilieren und Linken Kapitel 2 Kompilieren und Linken Bevor wir uns auf C++ selbst stürzen, brauchen wir einiges Vorgeplänkel, wie man komfortabel ein größeres C++- kompilieren kann. Mit Java stellt sich der Kompiliervorgang

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Umstieg auf EpiCan. von EpiDEM/EpiPort

Umstieg auf EpiCan. von EpiDEM/EpiPort Umstieg auf EpiCan von EpiDEM/EpiPort 2 Umstieg auf EpiCan von EpiDEM/EpiPort 1. Auflage Januar 2008 Herausgeber: Epidemiologisches Krebsregister NRW ggmbh Robert-Koch-Str. 40 48149 Münster Tel.: 0251

Mehr

Überprüfung der digital signierten E-Rechnung

Überprüfung der digital signierten E-Rechnung Überprüfung der digital signierten E-Rechnung Aufgrund des BMF-Erlasses vom Juli 2005 (BMF-010219/0183-IV/9/2005) gelten ab 01.01.2006 nur noch jene elektronischen Rechnungen als vorsteuerabzugspflichtig,

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Man liest sich: POP3/IMAP

Man liest sich: POP3/IMAP Man liest sich: POP3/IMAP Gliederung 1. Einführung 1.1 Allgemeiner Nachrichtenfluss beim Versenden von E-Mails 1.2 Client und Server 1.2.1 Client 1.2.2 Server 2. POP3 2.1 Definition 2.2 Geschichte und

Mehr

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC PARAGON Technologie GmbH, Systemprogrammierung Heinrich-von-Stephan-Str. 5c 79100 Freiburg, Germany Tel. +49 (0) 761 59018201 Fax +49 (0) 761 59018130 Internet www.paragon-software.com Email sales@paragon-software.com

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13) software evolution & architecture lab Programmierung für Mathematik (HS13) Übung 5 1 Aufgabe: Eclipse IDE 1.1 Lernziele 1. Die Entwicklungsumgebung Eclipse einrichten. 2. Eclipse kennen lernen und mit

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb CashPro basiert auf Accesstechnologie 2003 und ist auch unter den aktuellen Accessversionen 2007 bis 2013 einsetzbar und Mehrbenutzerfähig.

Mehr

Dokumentenverwaltung. Copyright 2012 cobra computer s brainware GmbH

Dokumentenverwaltung. Copyright 2012 cobra computer s brainware GmbH Dokumentenverwaltung Copyright 2012 cobra computer s brainware GmbH cobra Adress PLUS ist eingetragenes Warenzeichen der cobra computer s brainware GmbH. Andere Begriffe können Warenzeichen oder anderweitig

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Handbuch. timecard Connector 1.0.0. Version: 1.0.0. REINER SCT Kartengeräte GmbH & Co. KG Goethestr. 14 78120 Furtwangen

Handbuch. timecard Connector 1.0.0. Version: 1.0.0. REINER SCT Kartengeräte GmbH & Co. KG Goethestr. 14 78120 Furtwangen Handbuch timecard Connector 1.0.0 Version: 1.0.0 REINER SCT Kartengeräte GmbH & Co. KG Goethestr. 14 78120 Furtwangen Furtwangen, den 18.11.2011 Inhaltsverzeichnis Seite 1 Einführung... 3 2 Systemvoraussetzungen...

Mehr

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,

Mehr

Mediator 9 - Lernprogramm

Mediator 9 - Lernprogramm Mediator 9 - Lernprogramm Ein Lernprogramm mit Mediator erstellen Mediator 9 bietet viele Möglichkeiten, CBT-Module (Computer Based Training = Computerunterstütztes Lernen) zu erstellen, z. B. Drag & Drop

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

3 ORDNER UND DATEIEN. 3.1 Ordner

3 ORDNER UND DATEIEN. 3.1 Ordner Ordner und Dateien PC-EINSTEIGER 3 ORDNER UND DATEIEN Themen in diesem Kapitel: Erstellung von Ordnern bzw Dateien Umbenennen von Datei- und Ordnernamen Speicherung von Daten 3.1 Ordner Ordner sind wie

Mehr

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung

Mehr

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player PARAGON Technologie GmbH, Systemprogrammierung Heinrich-von-Stephan-Str. 5c 79100 Freiburg, Germany Tel. +49 (0) 761 59018201 Fax +49 (0) 761 59018130 Internet www.paragon-software.com Email sales@paragon-software.com

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

Step by Step Webserver unter Windows Server 2003. von Christian Bartl

Step by Step Webserver unter Windows Server 2003. von Christian Bartl Step by Step Webserver unter Windows Server 2003 von Webserver unter Windows Server 2003 Um den WWW-Server-Dienst IIS (Internet Information Service) zu nutzen muss dieser zunächst installiert werden (wird

Mehr

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version: 1.0 09.06.2009

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version: 1.0 09.06.2009 Testen von Software Systemen Übung 02 SS 2009 Version: 1.0 09.06.2009 Komponententest Kunde: Dr. Reinhold Plösch Dr. Johannes Sametinger Kundenreferenz: 259.019 Team 19 Mitarbeiter: Christian Märzinger

Mehr

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge Ab der Version forma 5.5 handelt es sich bei den Orientierungshilfen der Architekten-/Objektplanerverträge nicht

Mehr

Anleitung öffentlicher Zugang einrichten

Anleitung öffentlicher Zugang einrichten TRK-DashBoard Anleitung öffentlicher Zugang einrichten Manual für Kunden VERSION DATUM AUTOR DATEINAME 1.0 8. SEPTEMBER 2011 HRR ANLEITUNG_OEFFENTLICHER_ZUGANG_DASHBOARD_V10 INHALT 1 ALLGEMEINE INFORMATIONEN...

Mehr

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen) 1. Einführung: Über den ODBC-Zugriff können Sie bestimmte Daten aus Ihren orgamax-mandanten in anderen Anwendungen (beispielsweise Microsoft Excel oder Microsoft Access) einlesen. Dies bietet sich beispielsweise

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee 2 10245 Berlin Tel.:+49(0) 30 2900 8639 Fax.:+49(0) 30 2900 8695

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee 2 10245 Berlin Tel.:+49(0) 30 2900 8639 Fax.:+49(0) 30 2900 8695 Database Exchange Manager Replication Service- schematische Darstellung Replication Service- allgemeines Replikation von Daten von bzw. in ein SAP-System und einer relationalen DMS-Datenbank Kombination

Mehr

Workshop: Eigenes Image ohne VMware-Programme erstellen

Workshop: Eigenes Image ohne VMware-Programme erstellen Workshop: Eigenes Image ohne VMware-Programme erstellen Normalerweise sind zum Erstellen neuer, kompatibler Images VMware-Programme wie die Workstation, der ESX-Server oder VMware ACE notwendig. Die Community

Mehr

Powermanager Server- Client- Installation

Powermanager Server- Client- Installation Client A Server Client B Die Server- Client- Funktion ermöglicht es ein zentrales Powermanager Projekt von verschiedenen Client Rechnern aus zu bedienen. 1.0 Benötigte Voraussetzungen 1.1 Sowohl am Server

Mehr

Anleitung zur Erstellung einer Batchdatei. - für das automatisierte Verbinden mit Netzlaufwerken beim Systemstart -

Anleitung zur Erstellung einer Batchdatei. - für das automatisierte Verbinden mit Netzlaufwerken beim Systemstart - Anleitung zur Erstellung einer Batchdatei - für das automatisierte Verbinden mit Netzlaufwerken beim Systemstart - Mögliche Anwendungen für Batchdateien: - Mit jedem Systemstart vordefinierte Netzlaufwerke

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

EasyWk DAS Schwimmwettkampfprogramm

EasyWk DAS Schwimmwettkampfprogramm EasyWk DAS Schwimmwettkampfprogramm Arbeiten mit OMEGA ARES 21 EasyWk - DAS Schwimmwettkampfprogramm 1 Einleitung Diese Präsentation dient zur Darstellung der Zusammenarbeit zwischen EasyWk und der Zeitmessanlage

Mehr

Lizenzierung von System Center 2012

Lizenzierung von System Center 2012 Lizenzierung von System Center 2012 Mit den Microsoft System Center-Produkten lassen sich Endgeräte wie Server, Clients und mobile Geräte mit unterschiedlichen Betriebssystemen verwalten. Verwalten im

Mehr

Collax E-Mail Archive Howto

Collax E-Mail Archive Howto Collax E-Mail Archive Howto Howto Dieses Howto beschreibt wie ein Collax Server innerhalb weniger Schritte als E-Mail Archive eingerichtet werden kann, um Mitarbeitern Zugriff auf das eigene E-Mail Archiv

Mehr

ERSTELLEN VON INCENTIVES IM ZANOX NETZWERK

ERSTELLEN VON INCENTIVES IM ZANOX NETZWERK ERSTELLEN VON INCENTIVES IM ZANOX NETZWERK USER GUIDE FÜR ADVERTISER INHALTSVERZEICHNIS 1. Einführung...3 2. Incentives veröffentlichen...4 3. Weitere Funktionen...9 ZANOX.de AG Erstellen von Incentives

Mehr

Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz.

Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz. IInsttallllattiionslleiittffaden Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz. Voraussetzungen Für die Installation

Mehr

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift. Briefe Schreiben - Arbeiten mit Word-Steuerformaten Ab der Version 5.1 stellt die BüroWARE über die Word-Steuerformate eine einfache Methode dar, Briefe sowie Serienbriefe mit Hilfe der Korrespondenzverwaltung

Mehr

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7 FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7 Die Installation der FuxMedia Software erfolgt erst NACH Einrichtung des Netzlaufwerks! Menüleiste einblenden, falls nicht vorhanden Die

Mehr

Umstellung VPSMail von Java-Web-Start auf Installer

Umstellung VPSMail von Java-Web-Start auf Installer Für die Umstellung der Installations- und Starttechnologie von Java-Web-Start auf den Installer müssen folgende Schritte ausgeführt werden: 1. Herunterladen des Installers (-MSI-Paket): Das Installationspaket

Mehr

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY Vorteile der Verwendung eines ACTIVE-DIRECTORY Automatische GEORG Anmeldung über bereits erfolgte Anmeldung am Betriebssystem o Sie können sich jederzeit als

Mehr

Guide DynDNS und Portforwarding

Guide DynDNS und Portforwarding Guide DynDNS und Portforwarding Allgemein Um Geräte im lokalen Netzwerk von überall aus über das Internet erreichen zu können, kommt man um die Themen Dynamik DNS (kurz DynDNS) und Portweiterleitung(auch

Mehr

Benutzerkonto unter Windows 2000

Benutzerkonto unter Windows 2000 Jeder Benutzer, der an einem Windows 2000 PC arbeiten möchte, braucht dazu ein Benutzerkonto. Je nach Organisation des Netzwerkes, existiert dieses Benutzerkonto auf der lokalen Workstation oder im Active

Mehr

Anwenderdokumentation PersoSim

Anwenderdokumentation PersoSim Anwenderdokumentation PersoSim Die nachfolgende Anwenderdokumentation soll dem Anwender bei der Installation und den ersten Schritten im Umgang mit PersoSim helfen. Installation Grundvoraussetzung für

Mehr

DriveLock 6. DriveLock und das Windows Sicherheitsproblem mit LNK Dateien. CenterTools Software GmbH

DriveLock 6. DriveLock und das Windows Sicherheitsproblem mit LNK Dateien. CenterTools Software GmbH 6 DriveLock und das Windows Sicherheitsproblem mit LNK Dateien CenterTools Software GmbH 2010 Copyright Die in diesen Unterlagen enthaltenen Angaben und Daten, einschließlich URLs und anderen Verweisen

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Installationsanleitung

Installationsanleitung Installationsanleitung zu @Schule.rlp (2015) Inhaltsverzeichnis Inhaltsverzeichnis... 1 Voraussetzungen... 2 vorbereitende Aufgaben... 3 Installation @Schule.rlp (2015):... 3 Installation Java SE Runtime

Mehr

Diplomarbeit Antrittsvortrag

Diplomarbeit Antrittsvortrag Diplomarbeit Antrittsvortrag Christian Müller Run-time byte code compilation, interpretation and optimization for Alice Betreuer: Guido Tack Verantwortlicher Prof.: Gert Smolka Die nächsten 15 Minuten...

Mehr

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 1. Vorwort 1 2. Systemvoraussetzungen 2 3. Programmarten 2 4. Sicherheit der Endnutzer 2 5. Handhabung 3 5.1 allgemeine Programmübersicht 3 5.2

Mehr

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche etutor Benutzerhandbuch Benutzerhandbuch XQuery Georg Nitsche Version 1.0 Stand März 2006 Versionsverlauf: Version Autor Datum Änderungen 1.0 gn 06.03.2006 Fertigstellung der ersten Version Inhaltsverzeichnis:

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) 1 Einleitung... 2 2 Download und Installation... 3 2.1 Installation von WindowsXPMode_de-de.exe... 4 2.2 Installation von Windows6.1-KB958559-x64.msu...

Mehr

Backup der Progress Datenbank

Backup der Progress Datenbank Backup der Progress Datenbank Zeitplandienst (AT): Beachten Sie bitte: Die folgenden Aktionen können nur direkt am Server, vollzogen werden. Mit Progress 9.1 gibt es keine Möglichkeit über die Clients,

Mehr

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000 Folgende Anleitung beschreibt, wie Sie ein bestehendes Postfach in Outlook Express, bzw. Microsoft Outlook bis Version 2000 einrichten können. 1. Öffnen Sie im Menü die Punkte Extras und anschließend Konten

Mehr

Zentrale Installation

Zentrale Installation Einführung STEP 7 wird durch ein Setup-Programm installiert. Eingabeaufforderungen auf dem Bildschirm führen Sie Schritt für Schritt durch den gesamten Installationsvorgang. Mit der Record-Funktion steht

Mehr

Technische Dokumentation SilentStatistikTool

Technische Dokumentation SilentStatistikTool Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...

Mehr

Lokale Installation von DotNetNuke 4 ohne IIS

Lokale Installation von DotNetNuke 4 ohne IIS Lokale Installation von DotNetNuke 4 ohne IIS ITM GmbH Wankelstr. 14 70563 Stuttgart http://www.itm-consulting.de Benjamin Hermann hermann@itm-consulting.de 12.12.2006 Agenda Benötigte Komponenten Installation

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E S TAND N OVEMBE R 2012 HANDBUCH T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E Herausgeber Referat Informationstechnologie in der Landeskirche und im Oberkirchenrat Evangelischer Oberkirchenrat

Mehr

CADEMIA: Einrichtung Ihres Computers unter Windows

CADEMIA: Einrichtung Ihres Computers unter Windows CADEMIA: Einrichtung Ihres Computers unter Windows Stand: 21.02.2015 Java-Plattform: Auf Ihrem Computer muss die Java-Plattform, Standard-Edition der Version 7 (Java SE 7) oder höher installiert sein.

Mehr

PowerWeiss Synchronisation

PowerWeiss Synchronisation PowerWeiss Synchronisation 1 Einrichtung der Synchronisation I. Starten des Synchronisations Wizard Seite 3 II. Schritt 1 - Benutzer auswählen Seite 3 III. Schritt 2 - Grundlegende Einstellungen Seite

Mehr

How-to: Webserver NAT. Securepoint Security System Version 2007nx

How-to: Webserver NAT. Securepoint Security System Version 2007nx Securepoint Security System Inhaltsverzeichnis Webserver NAT... 3 1 Konfiguration einer Webserver NAT... 4 1.1 Einrichten von Netzwerkobjekten... 4 1.2 Erstellen von Firewall-Regeln... 6 Seite 2 Webserver

Mehr

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE 2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE 2.1 Die Einrichtung der Benutzeroberfläche Das Einrichten einer Android-Eclipse-Entwicklungsumgebung zur Android-Entwicklung ist grundsätzlich nicht

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr