close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Betriebssysteme - Grundlagen

EinbettenHerunterladen
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Betriebssysteme - Grundlagen
→ alois.schuette@h-da.de
Version: WS2014(967c57d)
Alois Sch¨
utte
21. Oktober 2014
1 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Inhaltsverzeichnis
In diesem Teil werden erforderliche Grundlagen eingef¨
uhrt.
1 HAL1957
2 Petrinetze
3 Java
2 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL1957
1 HAL1957
ISA Architektur
Architektur
HAL-Netze
Instruktionssatz
HAL-Programm
2 Petrinetze
3 Java
3 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL1957
HAL1957 ist die erste Version des legend¨aren HAL9000 Computers.
• Er wird verwendet, um elementare Prinzipien zu demonstrieren.
• Diese Version wird im Rahmen der Vorlesung dann schrittweise
erg¨anzt, es entstehen neue Versionen von HAL.
• Im Praktikum werden Sie u.a. auch einen HAL-Interpreter und
Erweiterungen realisieren.
4 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
ISA Architektur
ISA Architektur
1 HAL1957
ISA Architektur
Architektur
HAL-Netze
Instruktionssatz
HAL-Programm
2 Petrinetze
3 Java
5 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
ISA Architektur
ISA Architektur
Die Instruction Set Architektur ist Teil einer Systemumgebung, bei der
eine Ebene zwischen Hochsprachenprogrammen (Anwendungen) und der
ausf¨
uhrenden Hardware liegt, die ISA Ebene.
Die ISA-Ebene ist Schnittstelle zwischen Software und Hardware:
Wir betrachten keine real existierende ISA-Architektur, sondern einen
hypothetische Architektur.
6 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
Architektur
Architektur
HAL1957 (im Folgenden kurz HAL genannt) besteht aus
• einem Rechenwerk,
• einem Akkumulator,
• einem Speicher f¨
ur Programme der Gr¨
oße m,
• ein E/A Werk mit t Schnittstellen und
• Registern, wobei die Register 0-9 interne Verwendung finden
(z.B. ist Register 0 der Programmz¨ahler).
Register sind die Datenspeicher (RAM).
Register
0
...
n
Programmspeicher
0
1
1
...
m
Akkumulator
E/A
...
7 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL-Netze
HAL-Netze
Mehrere solcher HAL-Bausteine kann man u
¨ber die Beine“ wie Legos
”
zusammenbauen zu komplexen Systemen.
Register
0
...
n
Register
Programmspeicher
0
1
0
...
m
...
n
Akkumulator
1
Programmspeicher
0
0
1
...
m
1
...
1
...
m
n
Akkumulator
E/A
...
Register
Programmspeicher
0
1
Akkumulator
E/A
...
E/A
...
• Auf jedem HAL-Baustein l¨
auft dann ein sequentielles
HAL-Programm.
• Die Kommunikation erfolgt u
¨ber die E/A Bausteine.
• Somit k¨
onnen im o.a. Beispiel drei Prozessoren parallel arbeiten.
8 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
Instruktionssatz
Instruktionssatz
Eine Instruktion besteht aus 2 Teilen:
• Name und
• 0 oder 1 Operand
Ein HAL-Programm ist eine Folge von Instruktionen,
• die sequentiell im Speicher abgelegt sind,
• wobei jede Instruktion eine Programm-Speicherzelle einnimmt.
Beispiel:
LOAD 18 // Lade Inhalt von Register 18 in den Akkumulator
9 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
Instruktionssatz
Instruktionssatz
Folgende Tabelle beschreibt den Instruktionssatz, den HAL versteht“.
”
Name
START
STOP
OUT
Operand
s
IN
s
LOAD
LOADNUM
STORE
JUMPNEG
r
k
r
a
JUMPPOS
a
Bedeutung
Startet das Programm
Beendet das Programm
Druck Inhalt vom Akkumulator u
¨ber E/A
Schnittstelle s aus
Liest u
¨ber E/A Schnittstelle s und schreibt den
Wert in Akkumulator
L¨adt Inhalt von Register r in Akkumulator
L¨adt Konstante k in Akkumulator
Speichert Inhalt von Akkumulator in Register r
springt zu Programmspeicheradresse a, wenn
Akkumulator negativen Wert hat
springt zu Programmspeicheradresse a, wenn
Akkumulator positiven Wert hat
10 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
Instruktionssatz
Instruktionssatz
Name
JUMPNULL
Operand
a
JUMP
ADD
a
r
ADDNUM
k
SUB
r
MUL, DIV
SUBNUM
MULNUM
DIVNUM
a
a
a
a
Bedeutung
springt zu Programmspeicheradresse a, wenn
Akkumulator den Wert 0 hat
springt zu Programmadresse a
addiert den Inhalt des Registers r zum Inhalt des
Akkumulator und speichert Ergebnis im Akkumulator (a = a + r)
addiert Konstante k zum Inhalt des Akkumulator
und speichert Ergebnis im Akkumulator (a = a
+ k)
subtrahiert den Inhalt des Registers r vom Inhalt
des Akkumula- tors (a = a - r)
analog ADD bzw. SUB
analog ADDNUM
analog ADDNUM
analog ADDNUM
11 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL-Programm
Beispiel - Addiere 2 Eingaben
Idee:
• Lesen von Schnittstelle 1
• Ergebnis auf Schnittstelle 2
• Register 10 zum Speichern des 1 Wertes
1
2
3
4
5
6
7
START
IN 1
STORE 10
IN 1
ADD 10
OUT 2
STOP
12 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL-Programm
Beispiel - Maximum von 2 Eingaben
Idee:
• Lesen von Schnittstelle 1
• Ergebnis auf Schnittstelle 2
• Register 10 und 11 zum Speichern der Werte
• JUMPNEG zum Vergleichen
00
01
02
03
04
05
06
07
08
09
10
11
12
START
IN 1
STORE 10
IN 1
STORE 11
SUB 10
JUMPPOS 10
LOAD 10
OUT 2
STOP
LOAD 11
OUT 2
STOP
Arbeitsweise: → Tafel
13 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL-Programm
Beispiel - Maximum von Eingabefolge
Idee:
• Lesen von Schnittstelle 1 bis negativer Wert eingegeben wird
• Ergebnis auf Schnittstelle 2
• Register 10 zum Speichern der Maximums
• JUMPOS zum Vergleichen
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
START
LOADNUM 0
STORE 10
IN 1
JUMPNEG 12
STORE 11
SUB 10
JUMPPOS 9
JUMP 3
LOAD 11
STORE 10
JUMP 3
LOAD 10
OUT 2
STOP
Arbeitsweise: → Tafel
14 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
HAL1957
HAL-Programm
H¨orsaal¨ubung
Realisieren Sie ein HAL-Programm, das
• Minimum,
• Maximum und
• Durchschnitt
einer u
¨ber die Schnittstelle 2 eingegebenen Int-Folge ermittelt und u
¨ber
die Schnittstelle 3 ausgibt.
15 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Petrinetze
Petrinetze
1 HAL1957
2 Petrinetze
Darstellung
Werkzeuge
3 Java
16 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Petrinetze
Motivation
Petri-Netze sind ein Mittel zur Modellierung und Darstellung von
parallelen Abl¨aufen.
• Seit der ersten Ver¨
offentlichung 1962 durch Carl Adam Petri wurden
viele Arten dieser Netze entwickelt.
• Hier werden Petri-Netze zur Verdeutlichung von
Synchronisationskonzepten verwendet.
17 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Petrinetze
Definition
• Ein Petri-Netz ist ein gerichteter bipartiter Graph mit spezieller
Durchlaufsemantik.
• Die Knoten sind unterteilt in Stellen und Transitionen.
• Die gerichteten Kanten laufen ausschließlich von Stellen zu
Transitionen und von Transitionen zu Stellen.
• Durch das Petri-Netz bewegt sich eine oder auch mehrere Marken.
• Eine Stelle ist dann aktiv, wenn sie mindestens eine Marke besitzt.
• Die Transitionen bestimmen, ob und wann eine Stelle die Marke an
seinen Nachfolger abgeben muss. Daf¨
ur besitzt jede Transition eine
Weiterschaltbedingung. Ist diese Bedingung erf¨
ullt, dann bewirkt die
Transition die Weitergabe der Marke zwischen den zwei Pl¨atzen,
zwischen denen sie sich befindet.
• Die Weitergabe erfolgt immer gerichtet, entsprechend den Kanten,
mit denen Pl¨atze und Transitionen miteinander verkettet sind.
• Eine Marke kann sich w¨
ahrend ihres Flusses durch das Petri-Netz in
mehrere Marken aufteilen, die sich sp¨ater wieder zu einer Marke
vereinigen k¨
onnen.
18 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Petrinetze
Darstellung
Darstellung
Petri-Netze werden graphisch wie folgt dargestellt:
• Stellen sind Kreise
• Transitionen sind Rechtecke
• Marken sind Punkte auf den Kreisen
19 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Petrinetze
Darstellung
• Eine Zustands¨
anderung eines Petri-Netzes
erfolgt durch das Schalten einer
Transition, wobei zu einem Zeitpunkt
immer h¨
ochstens eine Transaktion schaltet
(analog zu einem Ein-Prozessor Rechner –
andere Arten von Petri-Netzen erlauben
Schalten von mehreren Transitionen).
• Transitionen sind erlaubt, bei in die keine
Stelle eingeht (Markengeneratoren); sie
k¨onnen immer schalten.
• Transitionen ohne Nachfolger sind
Markenvernichter.
→ ulab: petrinet.sh
• Eine Transition t schaltet, wenn sich auf
allen ihren eingehenden Stellen mindesten
eine Marke befindet. Durch das Schalten
werden diese Marken entfernt und an alle
ausgehenden Stellen der Transition wird
eine Marke platziert.
20 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Petrinetze
Werkzeuge
Werkzeuge
Werkzeuge zum Editieren und Simulieren von Petri-Netzen sind
verf¨
ugbar.
Wir verwenden ein Java-Tool, das Bestandteil des Buches:
Parallele Programmierung mit Java Threads“, R. Oechsle“
”
ist.
21 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Java-Technologie
Java1
1 HAL1957
2 Petrinetze
3 Java
Java-Technologie
Programmentwicklung
Unterschied Java - C++
Beispiele
1 Die
Ausarbeitung basiert auf Online Ver¨
offentlichungen von Sun.
22 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Java-Technologie
Java-Technologie
Java-Technologie ist der Sammelbegriff f¨
ur
• die Programmiersprache Java,
• die Java APIs und
• die Java Plattform.
Java ist eine Hochsprache, die durch folgende Begriffe charakterisiert
werden kann:
• objektorientiert
• robust
• sicher
• architekturneutral
• portabel
• performant
Was bedeuten diese Begriffe?
23 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Java-Technologie
Vom Programm zum ausf¨uhrbaren Kode
Hello.java
• Java Quellprogramme m¨
ussen zun¨achst
u
¨bersetzt werden.
• Dadurch entsteht ein Zwischencode
(Java Bytecode).
Java-Compiler
Hello.class
• Dieser plattformunabh¨
angige Code
wird dann in einer Ablaufumgebung
vom Bytecode Interpreter der
Zielumgebung ausgef¨
uhrt.
Java-Interpreter
• Der Bytecode ist Maschinencode der
”
Java Virtual Machine“ (Java VM).
Hello
Programm
24 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Java-Technologie
Plattformunabh¨angigkeit
Durch diesen plattformunabh¨
angigen Bytecode und der Verf¨
ugbarkeit
der Java VM auf nahezu allen Plattformen (Handy, PC bis zu
Mainframe) sind portable Anwendungen realisierbar.
25 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Java-Technologie
Java-Plattform
Die Java Plattform ist eine reine Software Umgebung, die auf einer
Hardwareplattform aufsetzt.
Sie besteht aus:
• der Java Virtual Machine (Java VM) und
• dem Java Applikation Programming Interface (Java API).
26 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Programmentwicklung
Programmentwicklung
Zun¨achst betrachten wir die Entwicklung einer Applikation, dann wird
gezeigt, wie Applets programmiert werden k¨
onnen.
• klassische“ Hello World Applikation
”
• Hello World Applet
www.fbi.h-da.de/ a.schuette/Vorlesungen/Betriebssysteme/Skript/2 Grundlagen/src/Java/helloWorld.html
27 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Programmentwicklung
Applikationen
Eine Applikation bestehet aus einer Klasse, bei die Methode main
vorhanden sein muss.
helloWorld.java
1
2
3
4
5
6
7
8
9
/* *
* The HelloWorldApp class implements an application that
* simply displays " Hello World !" to the standard output .
*/
class helloWorld {
←
public static void main ( String [] args ) {
←
System . out . println ( " Hello World ! " ); // Display the string .
}
}
28 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Programmentwicklung
¨
Ubersetzen
- Interpretieren - Laufen
Um die Anwendung laufen lassen zu k¨
onnen, muss sie u
¨bersetzt werden.
$ ls -l
total 4
-rw -r - -r - -. 1 as as 261 May 25 09:59 helloWorld . java
$ javac helloWorld . java
$ ls -l
total 8
-rw - rw -r - -. 1 as as 426 May 25 10:00 helloWorld . class
-rw -r - -r - -. 1 as as 261 May 25 09:59 helloWorld . java
$
Jetzt kann man die Applikation starten. Dazu braucht man einen
Bytekode-Interpreter, eine Java Virtual Machine (JVM).
$ java helloWorld
Hello World !
$
29 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Programmentwicklung
Applets
Eine Applet bestehet aus einer Klasse, bei der die Methode paint
u
¨berschrieben wird.
helloWorldApplet.java
1
2
3
4
5
6
7
8
9
10
11
import java . applet . Applet ;
←
import java . awt . Graphics ;
←
/* *
* The helloWorldApple t class implements an applet that
* simply displays " Hello World !".
*/
public class helloWorl d A p p l e t extends Applet {
← extents
public void paint ( Graphics g ) {
←
g . drawString ( " Hello world ! " , 50 , 25);
}
}
Das Package java.applet beinhaltet die speziell f¨
ur Applets erforderlichen
Klassen;
java.awt (abstract window toolkit) ist eine Sammlung von Klassen zu
Realisierung von graphischen Benutzerschnittstellen.
30 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Programmentwicklung
HTML Seite mit Applet
Ein Applet wird durch das Tag < APPLET > in ein HTML-Dokument
eingebettet.
1
2
3
4
5
6
7
8
9
10
< HTML >
< HEAD >
< TITLE > The Hello World Applet </ TITLE >
</ HEAD >
< BODY >
Hello World Applet : <br >
< APPLET CODE = " hello W o r l d A p p l e t . class " WIDTH =150 HEIGHT =25 >
</ APPLET >
</ BODY >
</ HTML >
←
• Wenn ein Browser ein Applet l¨
adt, wird die Klasse initialisiert, die
von Applet abgeleitet wurde.
• Durch die Attribute WIDTH und HEIGHT wird der Applet Kontext
f¨
ur die Methode paint() bestimmt, d.h. hier die H¨ohe und Breite des
Applet-Fensters festgelegt.
31 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Unterschied Java - C++
1 HAL1957
2 Petrinetze
3 Java
Java-Technologie
Programmentwicklung
Unterschied Java - C++
Beispiele
32 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Unterschied Java - C++
Im Folgenden wird auf einige elementare Unterschiede zwischen Java und
C++ eingegangen.
33 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Unterschied Wert - Referenz
Als einfache Datentypen werden die vordefinierten Datentypen (int, float,
...) bezeichnet.
Objekte und Arrays werden als nicht-einfache“ Datentypen bezeichnet
”
bzw. als Referenzdatentypen.
In Java gilt:
• einfache Typen werden immer durch den Wert u
¨bergeben
• Arrays und Objekte werden immer durch Referenz u
¨bergeben
¨
• Die Anderung
einer Referenz innerhalb einer Funktion hat keine
Wirkung nach außen
34 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Objekte kopieren, Zeiger
Um Daten von einem Objekt in ein anderes zu kopieren, benutzt man die
Methode clone().
Die clone()-Methode
• erzeugt ein neues Objekt desselben Typs wie das Ursprungsobjekt
und
• initialsiert die Datenfelder des neuen, geklonten“ Objektes mit den
”
aktuellen Werten der Datenfelder des Ursprungsobjektes.
1
2
Vector b = new Vector ;
c = b . clone ();
35 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Zeiger
In Java gibt es keine Zeiger im Sinne von C, also auch keine
Zeigerarithmetik.
Referenzieren und Dereferenzieren von Objekten wird automatisch
vorgenommen; es ist nicht erlaubt, Speicheradressen zu manipulieren.
Gr¨
unde f¨
ur diese Designentscheidung sind:
• Zeiger sind in C++ h¨
aufig eine Fehlerquelle
• die Sprache wird ohne Zeiger vereinfacht
• Zeiger und Zeigerarithmetik k¨
onnen dazu benutzt werden,
Laufzeit¨
uberpr¨
ufungen und Sicherheitsmechanismen zu umgehen.
36 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Arrays
• Arrays in Java werden durch Referenzen manipuliert.
• Sie werden dynamisch mit new erzeugt.
• Ein Garbage Collector gibt den nicht mehr ben¨
otigten Speicher
von Arrays frei, wenn sie nicht mehr ben¨
otigt werden.
• Bei allen Arrayreferenzen wird der Index u
uft. Liegt der Index
¨berpr¨
außerhalb der Grenzen, so wird eine ArrayIndexOutOfBounds“
”
Exception erzeugt.
• Die Gr¨
oße eines Arrays ist nicht Teil seines Typs, d.h. es kann eine
Variable deklariert werden, die z. B. vom Typ String[] ist, und ihr ein
Array aus String-Objekten zuweisen, egal wie lang dieses Array ist:
1
2
3
String [] strings ;
// Strings weist auf ein String - Array
strings = new String [10]; // das nur 10 Strings enth¨
a lt
strings = new String [20]; // oder 20
37 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Anlegen von Arrays
• mit new
1
Button buttons [] = new Button [10];
Dabei werden die Elemente des Arrays auf den Standardwert ihres
Typs initialisiert, z.B int-Array-Elemente auf 0 initialisiert; die Arrays
von Objekten werden auf null initialisiert.
• dynamisches Anlegen eines Arrays und Initialisierung mit den
angegebenen Werten
1
int look_up table [] = [1 ,2 ,4 ,8 ,16];
• Ein mehrdimensionales Array wird new angelegt, indem die
entsprechende Anzahl von Elementen in [] f¨
ur jede Dimension
angegeben wird.
1
byte TwoDimArray [][] = new byte [256][16];
38 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Array-Beispielprogramm
tArray.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class tArray {
public static void main ( String [] args ) {
int [][] iA = new int [4][3];
← 2 dim. stat. int Array
iA [1][1] = 6;
System . out . println ( " int array : " );
for ( int i =0; i <2; i ++) {
for ( int j =0; j <3; j ++)
System . out . print ( iA [ i ][ j ]+ " " );
System . out . println ();
}
float [][] fA = new float [4][];
← 2 dim. Array, var. Anz. Spalten
for ( int i =0; i < fA . length ; i ++) {
fA [ i ] = new float [ i +1];
}
fA [1][1] = 6;
System . out . println ( " \ nfloat array : " );
for ( int i =0; i < fA . length ; i ++) {
for ( int j =0; j < fA [ i ]. length ; j ++)
System . out . print ( fA [ i ][ j ]+ " " ); System . out . println ();
}
}
}
39 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Operatoren
Bis auf die nachfolgenden Ausnahmen, existieren die Operatoren von
C++. Folgende Operatoren werden in Java nicht unterst¨
utzt:
• Kommaoperator
• ∗ und &-Operatoren (Zeiger)
• sizeof-Operator
Zus¨atzlich gibt es folgende Operatoren:
+ Konkatenieren von Strings
>>> alle integralen Typen in Java sind vorzeichenbehaftet,
dieser Operator behandelt den Wert, der geshiftet werden
soll, als nicht vorzeichenbehafteten Wert und schiebt die
Bits mit einer Nullerweiterung nach rechts
& und | integrale Typen wie in C++, beide Operanden werden
ausgewertet, auch wenn das Ergebnis schon feststeht
In Java ist keine Operator¨
uberladung m¨
oglich.
40 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Garbage Collection
In Java gibt es kein Gegenst¨
uck zum new-Operator, der ein Objekt wieder
entfernt. Auch Destruktoren im Sinne von C++ gibt es nicht.
Stattdessen:
• Ein Garbage Collector pr¨
uft periodisch, ob es noch Verweise auf ein
Objekt gibt. Wird ein Objekt nicht mehr referenziert, wird es
automatisch freigegeben.
• Java gibt keine Garantien, wann die Garbage Collection stattfindet
oder in welcher Reihenfolge die Objekte freigegeben werden.
• Beim GC kann es passieren, dass ein Objekt noch Ressourcen h¨
alt,
wie Dateideskriptoren oder Sockets. Der Garbage Collector kann
solche Ressourcen nicht freigeben, deshalb muss man
finalizer-Methoden (wird aufgerufen, bevor GC Objekt frei gibt)
schreiben, die z.B. offene Dateien schließen bzw.
Netzwerkverbindungen beenden.
1
2
3
protected void finalize () throws IOException {
if ( fd != null ) close ();
}
41 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Garbage Collector Test
GC.java
1
2
3
4
5
6
7
8
9
10
12
13
14
15
16
17
18
19
20
21
22
class O {
int i ;
O ( int i ) { this . i = i ;}
int geti () { return i ;}
void seti ( int i ) { this . i = i ;}
protected void finalize () {
System . out . println ( " O : " + i + " finalizer " );
System . exit (1);
}
}
public class CG {
public static void main ( String [] args ) {
int i = 1;
O o1 = new O ( i ++); // 1
System . out . println ( " o1 . i = " + o1 . geti ());
while ( true ) {
O o = new O ( i ++);
← O:245671 finalizer
// System . out . println (" o . i = " + o . geti ());
}
}
}
42 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Packages
Die package-Anweisung dient dazu, eine Sammlung von Klassen zu
einer Einheit zusammenzufassen.
package tools ;
• Um die Zugeh¨
origkeit einer Quelldatei zu einem Package anzugeben,
wird vor der Deklaration von Klassen eine Package-Anweisung in der
Quelldatei eingef¨
ugt.
• Zum Importieren eines Packages oder einer Klasse aus einem
Package definiert Java die import- Anweisung. Diese Anweisung
stellt Javaklassen f¨
ur die aktuelle Klasse unter einem abgek¨
urzten
Namen zur Verf¨
ugung.
• import stellt weder die Klasse zur Verf¨
ugung , noch lliest¨es sie
tats¨achlich ein, sondern es spart nur Schreibarbeit und macht den
Code lesbarer.
import java . awt . image
43 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Vererbung
Durch Vererbung k¨
onnen Klassen definiert werden, die auf einer anderen
Klasse basieren.
public class A extends B { ...
}
A ist eine Subklasse von B, d.h. A erbt alle Variablen und Methoden der
Klasse B, außer die als private gekennzeichneten.
Modifier f¨
ur Klassen
abstract Abstrakte Klassen dienen nur dazu, eine
Klassenstruktur festzulegen, ohne Implementierungen
vorzunehmen. Eine abstrakte Klasse darf nicht instantiiert
werden. Von ihr muss erst eine Unterklasse abgeleitet
werden, die die Methoden der abstrakten Klasse
implementiert.
final Von Klassen, die mit final gekennzeichnet sind, k¨onnen
keine Unterklassen abgeleitet werden. Eine Klasse darf
nicht gleichzeitg als abstract und final deklariert werden.
44 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Modifier f¨
ur Klassen
final Eine mit final gekennzeichnete Methode kann nicht
u
¨berschrieben werden.
static Static-Methoden gelten implizit als final und k¨onnen
deshalb nicht u
¨berschrieben werden.
abstract Abstrakte Methoden sind dazu gedacht, die
Aufrufstruktur, aber nicht aber die Implementierung
festzulegen. Sie m¨
ussen in einer Subklasse implementiert
werden, die nicht abstrakt ist. Abstrakte Methoden d¨
urfen
nur in abstrakten Klassen deklariert werden.
45 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Modifikatoren
Situation
erreichbar f¨
ur nicht Subklasse aus dem gleichen
Paket?
Erreichbar f¨
ur Subklasse
aus dem gleichen Paket?
erreichbar f¨
ur nicht Subklasse aus einem anderen
Paket?
erreichbar f¨
ur Subklasse
aus einem anderen Paket?
geerbt von Subklasse in
gleichem Paket? ?
geerbt von Subklasse in einem anderen Paket?
public
default
protected
ja
ja
ja
private
protected
nein
private
ja
ja
ja
nein
nein
ja
nein
nein
nein
nein
ja
nein
nein
nein
nein
ja
ja
ja
ja
nein
ja
nein
ja
ja
nein
nein
46 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Superklassen, Objekte und Klassenhierarchie
Jede Klasse besitzt eine Superklasse.
• Wenn die Superklasse nicht in der extends-Klausel angegeben ist, so
ist die Superklasse implizit Object.
• Object ist die einzige Klasse, die keine Superklasse besitzt.
• Methoden, die von der Klasse Object definiert werden, k¨
onnen von
jedem Java-Objekt aufgerufen werden.
• Weil jede Klasse eine Superklasse besitzt, formen Klassen in Java
eine Klassenhierarchie, die als Baum mit Object als Wurzel
dargestellt werden kann.
47 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Subklassen-Konstruktoren
Aufrufen eines Konstruktors aus der Superklasse:
public GraphicCircle ( double x , double y , double r ,
Color outline , Color fill ) {
super (x ,y , r );
this . outline = outline ;
this . fill = fill ;
}
Das Schl¨
usselwort super dient dazu, die Konstruktor-Methode der
Superklasse aufzurufen.
• Der Konstruktoraufruf der Superklasse muss als 1. Anweisung
innerhalb der Konstruktor-Methode erscheinen.
• Wenn die 1. Anweisung in einem Konstruktor nicht ein explizter
Aufruf des Konstruktor der Superklasse mit super ist, dann f¨
ugt
Java implizit den super()-Aufruf ein
• Weil der Superklassen-Konstruktor immer zuerst aufgerufen wird,
wird immer als erstes der Object-Konstruktor aufgerufen, gefolgt
von der Subklasse und der Klassenhierarchie/Baumstruktur folgend
zu der Klasse, die instanziert wurde.
48 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Abstrakte Klasssen
Eine abstract-Methode in Java entspricht in etwa einer rein virtuellen
Funktion in C++, d.h. eine virtuelle Funktion, die als = 0 deklariert ist.
• Javaklassen, die abstract-Methoden enthalten, k¨
onnen nicht
instanziert werden.
• Ist eine Methode abstract definiert, muss sie nicht implementiert
werden.
• Regeln f¨
ur abstract-Methoden und abstract-Klassen:
• jede Klasse, die eine abstract-Methode enth¨
alt ist automatisch selbst
abstract
• eine abstract-Klasse muss mindestens eine abstract-Methode
enthalten
• eine abstract-Klasse kann nicht instanziert werden
• eine Subklasse der abstract-Klasse kann instanziert werden, wenn sie
alle abstract-Methoden ihrer Superklasse u
¨berschreibt und eine
Implementierung f¨
ur diese Methoden zur Verf¨
ugung stellt
• wenn eine Subklasse einer abstract-Klasse nicht alle
abstract-Methoden, die sie erbt, implementiert, dann ist sie selbst
abstract
49 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Schnittstellen
In Java d¨
urfen Klassen nur eine Superklasse besitzen, das bedeutet, dass
die von C++ bekannte Mehrfachvererbung nicht m¨
oglich ist.
Stattdessen kennt Java die so genannten Interfaces. Das sind reine
Schnittstellen, die keinerlei Implementierungen enthalten.
• Eine Schnittstelle sieht aus wie eine abstrakte Klasse, außer, dass sie
das Schl¨
usselwort interface statt den W¨
ortern abstract“ und class“
”
”
benutzt.
• Alle Methoden in einer Schnittstelle sind implizit abstract.
• Jede Variable, die in einer Schnittstelle deklariert ist, muss static und
final sein.
• Eine Klasse kann mit dem Schl¨
usselwort implements“ eine oder
”
mehrere Schnittstellen vererben. Diese Klasse erbt alle Konstanten
und die abstrakten Methoden. Die Methoden m¨
ussen dann
u
¨berschrieben werden.
1
2
3
4
interface W {}
interface X extends W {}
class Y implements W {}
class Z extends Y implements X {}
50 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Interface Beispiel I
Implementiert eine Klasse ein Interface, so muss sie alle Methoden des
Interface u
¨berschreiben.
Beispiel: 2 Interfaces; eine Klasse implementiert beide Interfaces und ist
von einer Basisklasse abgeleitet.
MyInterfaces.java
1
2
3
4
5
6
7
8
9
10
11
interface MyInterface1 {
String s1 = " MyInterface1 " ;
public void print1 ();
}
interface MyInterface2 {
String s2 = " MyInterface2 " ;
public void print2 ();
}
class MySuperClass { // Basisklasse
protected String str = " MySuperClass " ;
}
51 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Unterschied Java - C++
Interface Beispiel II
1
2
3
4
5
6
7
8
9
10
12
13
14
15
16
17
18
class MySubClass
extends MySuperClass
implements MyInterface1 , MyInterface2 {
public void print1 () {
System . out . println ( str + s1 );
}
public void print2 () {
System . out . println ( str + s2 );
}
}
←
←
←
←
public class MyInterfaces {
public static void main ( String [] args ) {
MySubClass object = new MySubClass ();
object . print1 ();
object . print2 ();
}
}
MySubClass ist von MySuperClass abgeleitet und implementiert die beiden
Schnittstellen, somit ist der Zugriff auf alle print-Methoden m¨
oglich.
52 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Beispiele
Datei kopieren (zeichenweise)
copy.java
1
2
3
4
5
6
7
import java . io .*;
public class copy {
public static void main ( String [] args ) throws IOException {
if ( args . length != 2) {
System . err . println ( " usage : copy sourceFile destFile " );
return ;
}
File inputFile = new File ( args [0]);
File outputFile = new File ( args [1]);
9
10
FileReader in = new FileReader ( inputFile );
FileWriter out = new FileWriter ( outputFile );
int c ;
12
13
14
← zeichenweise
while (( c = in . read ()) != -1)
out . write ( c );
16
17
in . close ();
out . close ();
19
20
}
21
22
← zeichenweise
}
53 / 54
Betriebssysteme - Grundlagen → alois.schuette@h-da.de Version: WS2014(967c57d)
Java
Beispiele
Datei kopieren (byteweise)
copyBytes.java
1
import java . io .*;
3
public class copyBytes {
public static void main ( String [] args ) throws IOException {
if ( args . length != 2) {
System . err . println ( " usage : copy sourceFile destFile " );
return ;
}
4
5
6
7
8
File inputFile = new File ( args [0]);
File outputFile = new File ( args [1]);
10
11
FileInputStream in = new Fi le I np ut St r ea m ( inputFile ); ← byteweise
FileOutputStre a m out = new F i l e O u t p u t S t r e a m ( outputFile );
13
14
int c ;
while (( c = in . read ()) != -1)
out . write ( c );
16
17
18
in . close ();
out . close ();
20
21
}
22
23
}
54 / 54
Document
Kategorie
Technik
Seitenansichten
19
Dateigröße
477 KB
Tags
1/--Seiten
melden