SuS-06.2: Produktlinien mit C++-Templates

Werbung
Software ubiquitärer Systeme
Anwendungsentwicklung mit Java
Olaf Spinczyk
Arbeitsgruppe Eingebettete Systemsoftware
Lehrstuhl für Informatik 12
TU Dortmund
[email protected]
http://ess.cs.uni-dortmund.de/~os/
http://ess.cs.tu-dortmund.de/DE/Teaching/SS2014/SuS/
1
Motivation
●
Probleme mit C und C++
effizienter Code aber unsicher
● eingeschränkte Portabilität
●
- verschiedene Betriebssysteme und GUI-Bibliotheken: z.B. in
Mobiltelefonen Symbian OS, Windows CE, Linux Varianten
●
Sichere C++ Dialekte
weniger effizienter Code
● mangelnde Verbreitung/Standardisierung
●
●
Was ist die Alternative?
Ein
Ein Java
Java für
für eingebettete
eingebettete Systeme!
Systeme!
06.3 – Anwendungsentwicklung mit Java
2
Die Java-Familie
●
Je nach Anforderungen der Anwendungen bzw. Leistungsfähigkeit
der Geräte bedient Oracle verschiedene Anwendungsdomänen mit
unterschiedlichen Java Plattformen.
Nicht
Nicht nur
nur die
die Bibliotheken
Bibliotheken
sondern
sondern auch
auch die
die virtuellen
virtuellen
Maschinen
Maschinen unterscheiden
unterscheiden
sich.
sich.
Quelle: [1]
06.3 – Anwendungsentwicklung mit Java
3
Inhalt
●
Motivation
●
Java Micro Edition
Java Card
Alternativen
●
●
Android
● .NET Compact
●
●
Zusammenfassung
06.3 – Anwendungsentwicklung mit Java
4
Die Java Micro Edition
●
Kurz: Java ME
●
●
Sun Microsystems, Juni 1999
Zielmarkt
●
Pager, PDAs
●
Mobiltelefone, Smartphones
●
Fernseher, Videorekorder, CD Player
Java 2
Standard Edition
API
Java
Micro Edition
API
●
Die meisten (klassischen) Mobiltelefone unterstützen
heute Java ME
●
Abgespeckte Version der Standard Edition (Java SE)
●
Weniger Speicherverbrauch
●
Keine schwergewichtigen Klassen (swing, awt, …)
●
Optimierte virtuelle Maschine (KVM)
06.3 – Anwendungsentwicklung mit Java
5
Java ME Architektur
●
Die von Java ME abgedeckte Domäne ist riesig
●
unterschiedlichste Geräte und Geräteklassen (Ressourcen)
●
unterschiedlichste Anwendungen (Anforderungen)
Um die Java ME zu strukturieren, wurden zwei
grundlegende Konzepte definiert:
Konfigurationen und Profile
Leistungsstärkere
Geräte
Konfigurationen:
Horizontale Aufteilung
des Marktes
...
●
Leistungsschwache
Geräte
Profile: Vertikale Marktaufteilung
06.3 – Anwendungsentwicklung mit Java
6
Java ME Konfigurationen
●
Definiert Geräteklassen anhand verfügbarer Ressourcen
●
●
●
CPU-Klasse, Speicher, Netzwerkanbindung
Entscheidet über …
●
die verwendete virtuelle Maschine sowie
●
APIs für elementare Funktionen.
➔
… die Java Ausführungsumgebung
Bisher wurden zwei Konfigurationen festgelegt
●
CLDC: Connected Limited Device Configuration
- z.B. Mobilfunkgeräte, um die 500 KB Speicher, einfache Applikationen
- spezielle VM
●
CDC: Connected Device Configuration
- z.B. Smart Phones ab 2 MB Speicher, Set-Top-Boxes, High-End PDAs
06.3 – Anwendungsentwicklung mit Java
7
Java ME Profile
●
Hängen von der jeweiligen
Anwendungsdomäne ab
●
Definieren verfügbare APIs
●
Sorgen für Portabilität
●
Haben Abhängigkeiten
●
Beispiele:
●
MIDP (Mobile Information Device P.)
- Netzwerk-Kommunikation
- Einfache Benutzerschnittstelle
- Datenspeicherung
●
Personal Profile
- Komplettes AWT
- Ausführungsumgebung für Applets
Quelle [1]
06.3 – Anwendungsentwicklung mit Java
8
Java ME für Mobilgeräte
MIDP
Herstellerspezifische
APIs
CLDC
Java VM (KVM)
Betriebssystem
●
KVM - Kilobyte Virtual Machine
40 – 80 KB groß (je nach Compiler)
● Implementiert in C (ca. 36.000 Zeilen)
● Für Geräte mit mindestens …
●
- 160 KB Speicher und
- 16 oder 32 Bit CPU
06.3 – Anwendungsentwicklung mit Java
9
KVM: Was fehlt?
●
Unterstützung für Object.finalize()
●
●
Wird auch praktisch nicht verwendet
Fehlerbehandlungsfähigkeiten (eingeschränkt)
●
Es gibt lediglich 3 Fehler-Klassen
- java.lang.Error, java.lang.OutOfMemory und java.lang.VirtualMachineError
●
Java Native Interface (JNI)
●
●
●
●
Benutzerdefinierte Class Loader
Reflection-Mechanismus
Threading-Fähigkeiten (eingeschränkt)
●
●
Zur Vermeidung von Sicherheitsproblemen und
wegen des Overheads
Keine Thread Groups und Daemon Threads)
Verifikation von Class Files
●
Einsatz eines Pre-Verifiers
06.3 – Anwendungsentwicklung mit Java
10
Entwicklungsprozess
Java-Quelltext
Compile
javac ...
Preverification
preverify ...
Packaging
jar ...
Deployment
emulator ...
Java Class-Dateien
Pre-verifizierte
Class-Dateien
JAR-Paket
Anwendung auf
dem Gerät
06.3 – Anwendungsentwicklung mit Java
11
Java ME für Mobilgeräte
MIDP
Herstellerspezifische
APIs
CLDC
Java VM (KVM)
Betriebssystem
●
CLDC - Connected Limited Device Configuration
●
Low-Level Funktionalität
- Umgang mit der Laufzeitumgebung, Ein-/Ausgabe
●
Besteht aus of java.io, java.lang, java.util, java.microedition.io
- Allerdings nur Teilmengen der aus Java SE bekannten Klassen!
- Die Semantik bleibt aber erhalten
06.3 – Anwendungsentwicklung mit Java
12
Java ME für Mobilgeräte
MIDP
Herstellerspezifische
APIs
CLDC
Java VM (KVM)
Betriebssystem
●
MIDP – Mobile Information Device Profile
●
MIDP stellt Kernfunktionen für Mobilgeräte zur Verfügung
- Netzwerkkommunikation
- Datenhaltung
- Benutzerschnittstelle
06.3 – Anwendungsentwicklung mit Java
13
Mobile Information Device Profile
●
Minimalanforderungen
Bildschirmauflösung von mind. 96x54 Pixeln
● Keypad, Tastatur oder Touch Screen
● 256 KB nicht-flüchtiger Speicher
● 128 KB RAM
● 8 KB nicht-flüchtiger Speicher für persistente Daten
● Bi-direktionale Netzwerkverbindung
●
●
MIDP 2.0 Packages
●
●
javax.microedition.lcdui, javax.microedition.lcdui.game,
javax.microedition.media, javax.microedition.media.control,
javax.microedition.midlet, javax.microedition.pki,
javax.microedition.rms
Ausführung von Midlets
●
Java ME-Applikationen bestehen aus 1 bis N MIDlets
06.3 – Anwendungsentwicklung mit Java
14
Java ME: Midlet-Lebenszyklus
●
MIDlets werden wie Applets von der Umgebung gesteuert
Konstruktor
Paused
destroyApp()
notifyDestroyed()
startApp()
pauseApp()
notifyPaused()
Destroyed
06.3 – Anwendungsentwicklung mit Java
Active
destroyApp()
notifyDestroyed()
15
Java ME: Midlet-Beispiel
Man
Man erbt
erbt von
von MIDlet.
MIDlet.
// Zur Vereinfachung ohne Exceptions ...
public class HelloMIDlet extends MIDlet
implements CommandListener {
private Form mMainForm;
public HelloMIDlet() {
mMainForm = new Form("HelloMIDlet");
mMainForm.append(new StringItem(null, "Hello, MIDP!"));
mMainForm.addCommand(new Command("Exit", Command.EXIT, 0));
mMainForm.setCommandListener(this);
}
protected void destroyApp(boolean arg0) {
Diese
Diese Methoden
Methoden werden
werden vom
vom
}
Application
Application Management
Management System
System
protected void pauseApp() {
(AMS)
}
(AMS) des
des Mobilgeräts
Mobilgeräts aufgerufen.
aufgerufen.
protected void startApp() {
Display.getDisplay(this).setCurrent(mMainForm);
}
public void commandAction(Command arg0, Displayable arg1) {
notifyDestroyed();
So
So wird
wird das
das AMS
AMS angewiesen
angewiesen
}
das
}
das MIDlet
MIDlet zu
zu beenden.
beenden.
06.3 – Anwendungsentwicklung mit Java
16
Java ME: Demo
●
Zum Bauen von Midlets benutzt man das …
Java ME SDK (aktuell 8)
Demo-Applikationen
● Emulator
● Alle sonstigen Werkzeuge
●
06.3 – Anwendungsentwicklung mit Java
17
Java ME: Fazit
●
Pro
●
Durch Konfigurationen und Profile wird eine Familie von
Java-Lösungen bereitgestellt
- Damit skaliert der Ressourcenverbrauch
●
●
Standardisierte domänenspezifische Bibliotheken
●
Die kvm benötigt erstaunlich wenig Speicher
Contra
●
Die kvm ist leider langsam
●
Leichte Einschränkungen bzgl. der Sprache müssen hingenommen
werden
- z.B. kein Reflection
●
Entwickler müssen sich mit anderen Bibliotheken anfreunden
06.3 – Anwendungsentwicklung mit Java
18
Inhalt
●
Motivation
●
Java Micro Edition
Java Card
Alternativen
●
●
Android
● .NET Micro/Compact Framework
●
●
Zusammenfassung
06.3 – Anwendungsentwicklung mit Java
19
Java Card: Hardware
●
Eine Java-Lösung für Smart Cards
(Chipkarten mit Prozessor)
●
Hardware-Eigenschaften
Stromversorgung durch Lesegerät
● Interaktion lediglich mit dem Lesegerät
●
- Serielle Schnittstelle, Standardprotokoll
●
Enthalten Universalprozessor
- 8-32 Bit, 3,5-5 MHz
●
Extrem wenig Speicher
- 16-32 KB ROM
- 0,5-1 KB RAM
- 8-16 KB EEPROM
➔
Vcc
Reset
Clock
RFU
C1
C2
C3
C4
C5
C6
C7
C8
Ground
Vpp
I/O
RFU
Definitiv zu klein für Java ME!
06.3 – Anwendungsentwicklung mit Java
20
Java Card: Anwendungen
●
Einsatzgebiete
Krankenkassenkarten
● Bankkarten (EC)
● Handy-SIM-Karten
● Ausweise
➔ Ziel: nur eine Karte für viele Applikationen
●
●
Anforderungen an die Java Card Plattform
●
Sicherheit und Zuverlässigkeit
- Verwaltung und Isolierung der Applikationen auf der Karte
Extrem geringer Ressourcenverbrauch
● Für die Domäne passende standardisierte Packages
● Portabilität
● Kompatibilität mit existierenden Standards
●
06.3 – Anwendungsentwicklung mit Java
21
Java Card: Was fehlt?
●
Dynamisches Klassenladen
●
Security Manager
●
Garbage Collection
●
Threads
●
Klonen von Objekten
●
Mehrdimensionale Felder
●
Datentypen char, double, float und long
●
Die Java Card API beschränkt sich auf folgende Pakete
●
java.lang, javacard.framework, javacard.security, javacardx.crypto
06.3 – Anwendungsentwicklung mit Java
22
Java Card: Applets ...
●
sind persistente Zustandsautomaten, die auf Nachrichten
des Lesegeräts reagieren.
●
haben (mindestens) folgende Methoden
●
install
- Erzeugung und Registrierung der Applet-Instanz
●
select
- Das Lesegerät spricht das Applet an
●
process
- Interpretation der Nachrichten (APDUs) vom Lesegerät
●
deselect
- Das Lesegerät beendet die Kommunikation mit dem Applet
06.3 – Anwendungsentwicklung mit Java
23
Java Card: Fazit
●
●
Pro
●
Plattformunabhängige Entwicklung für Smart Cards
●
Unterstützung mehrerer Applikationen auf einer Karte
●
Dynamische Installation/Deinstallation von Applets
●
Standardisierte Bibliotheken
●
Nutzbarkeit von Java Know-How
Contra
●
Die Sprache ist zwar Java, das Programmiermodell aber nicht.
●
Essentielle Sprachelemente fehlen
●
Deutliche Nachteile hinsichtlich der Performance
●
Vergleichsweise hohe Ressourcenanforderungen
06.3 – Anwendungsentwicklung mit Java
24
Inhalt
●
Motivation
●
Java 2 Micro Edition
Java Card
Alternativen
●
●
Android
● .NET Micro/Compact Framework
●
●
Zusammenfassung
06.3 – Anwendungsentwicklung mit Java
25
Android
●
Open Handset Alliance (primär Google), 2007
●
T-Mobile, Motorola, Samsung, ...
●
Vision:
“... accelerate innovation in mobile and
offer consumers a richer, less expensive,
and better mobile experience.”
●
Infrastruktursoftware-Plattform für Smartphones
●
●
Open Source
Diverse Produkte inzwischen verfügbar
06.3 – Anwendungsentwicklung mit Java
26
Android: Architektur
●
Linux und Java – aber anders ...
06.3 – Anwendungsentwicklung mit Java
27
Android: Architektur
●
Linux und Java – aber anders ...
Die
Die Dalvik-VM
Dalvik-VM führt
führt Java-Programme
Java-Programme
aus,
aus, deren
deren Bytecode
Bytecode in
in Dalvik-Bytecode
Dalvik-Bytecode
übersetzt
übersetzt wurde.
wurde.
06.3 – Anwendungsentwicklung mit Java
28
Android: Die Dalvik-VM
●
●
Benannt nach einer isländischen Stadt
Hauptunterschiede
●
Java-Bytecode ist stapelbasiert, Dalvik-Bytecode ist registerbasiert
- Java-Bytecode lässt sich nicht (direkt) ausführen
- Ein Übersetzungschritt ist erforderlich
●
Dalvik Code wurde bis Android 2.2 nur interpretiert
- Heute Trace-basierter JIT-Compiler
●
Gründe
Kompaktheit des Codes
● JIT-Compiler wurde als unnötig erachtet, da die
Performance-kritischen Teile nativ ausgeführt werden
(Kernel/Libraries)
●
- inzwischen können Anwendungen auch „native code“ verwenden
- JIT darf nicht zu viel Speicher benötigen
●
Lizenzrechte?
06.3 – Anwendungsentwicklung mit Java
29
Android: Größen (statisch)
●
●
●
common system libraries
●
(U) 21445320 — 100%
●
(J) 10662048 — 50%
●
(D) 10311972 — 48%
(U)
(U) unkomprimierte
unkomprimierte jar-Datei
jar-Datei
(J)
(J) komprimierte
komprimierte jar-Datei
jar-Datei
(D)
(D) unkomprimierte
unkomprimierte dex-Datei
dex-Datei
web browser app
●
(U) 470312 — 100%
●
(J) 232065 — 49%
●
(D) 209248 — 44%
alarm clock app
●
(U) 119200 — 100%
●
(J) 61658 — 52%
●
(D) 53020 — 44%
Der
Der Grund
Grund ist
ist allerdings
allerdings nicht
nicht
nur
nur der
der kompaktere
kompaktere Bytecode,
Bytecode,
sondern
sondern auch
auch eine
eine schlaueres
schlaueres
Dateiformat.
Dateiformat.
Quelle: Dan Bornstein, Dalvik VM Entwickler
06.3 – Anwendungsentwicklung mit Java
30
Android: Größen (dynamisch)
Quelle: A JIT Compiler for Android’s Dalvik VM
Ben Cheng, Bill Buzbee, May 2010
●
JIT arbeitet Trace-basiert
Übersetzung auf Ebene von
Basisblöcken
(statt ganzen Prozeduren)
● Ein Translation Cache
pro Prozess (VM-Instanz)
●
●
Trade-off zwischen
Performance und
Speicherbedarf
akzeptabel
06.3 – Anwendungsentwicklung mit Java
31
Android: Fazit
●
Android ist für Smartphones ausgelegt
●
Skalierbarkeit ist kein Thema
●
Annahme: typische 64-512 MB Speicher, 250-1000 MHz CPU
- heute viel mehr vorhanden!
●
Android zeigt, dass die Java-VM nicht unbedingt perfekt
geeignet ist, um kleine Systeme zu bauen
●
Dalvik-Bytecode ist signifikant kleiner
06.3 – Anwendungsentwicklung mit Java
32
.NET Framework für eingeb. Systeme?
●
●
Microsoft
Ermöglicht .NET auf
Windows CE/Mobile-Geräten
●
Quelle: msdn.microsoft.com
Moderne Zwischensprache (MSIL)
für mehrere Quellsprachen
- C#, VB, J#, C++, …
- Ausgelegt auf JIT-Compiler
Anwendungsentwicklung
in MS Visual Studio
● Diverse Bibliotheken
●
- Benutzerschnittstelle, Kommunikation, …
- Allerdings an diversen Stellen beschnitten
➔
Größenreduktion des .NET Frameworks …
Compact: erfordert 12 MB
● Micro: erfordert 256 KB Flash, 64KB RAM (läuft ohne OS, kein JIT)
●
06.3 – Anwendungsentwicklung mit Java
33
Inhalt
●
Motivation
●
Java Micro Edition
Java Card
Alternativen
●
●
Android
● .NET Micro/Compact Framework
●
●
Zusammenfassung
06.3 – Anwendungsentwicklung mit Java
34
Zusammenfassung
●
Java-Umgebungen bilden eine Produktlinie
●
●
Bei den kleineren Varianten gibt es Einschränkungen
●
●
Skalierbarkeit von 8 Bit Chipkarten bis 64 Bit Serversystemen
z.B. keine Garbage Collection bei Java Card
Es gibt auch Alternativen
●
Dalvik- und MSIL-Programme haben kompakteren Code
●
Java ME wird im Mobiltelefonbereich langsam verdrängt
06.3 – Anwendungsentwicklung mit Java
35
Literatur
[1]
[2]
M. de Jode, Programming Java 2 Micro Edition on Symbian
OS, ISBN 0-470-09223-8, Wiley, 2004.
Java Card Platform Specification 2.2.2, Sun Microsystems.
06.3 – Anwendungsentwicklung mit Java
36
Herunterladen