Corosol : une machine virtuelle Java dynamiquement adaptative PowerPoint PPT Presentation

presentation player overlay
About This Presentation
Transcript and Presenter's Notes

Title: Corosol : une machine virtuelle Java dynamiquement adaptative


1
Corosol une machine virtuelle Java
dynamiquement adaptative
  • Christophe Deleray
  • Thèse de doctorat, spécialité Informatique
  • Institut Gaspard Monge
  • Université de Marne-la-Vallée
  • 18 octobre 2006

2
Plan
  • Problématique
  • Faire évoluer une application
  • Adapter une plate-forme dexécution aux
    contraintes dune application
  • Java et lévolution des applications
  • Corosol
  • Architecture à composants
  • Adaptation statique
  • Adaptation dynamique
  • Conclusions et perspectives

3
Les systèmes informatiques
  • Système informatique

4
Les systèmes informatiques
  • Système informatique
  • Application ( Programme )

Application
5
Les systèmes informatiques
  • Système informatique
  • Application ( Programme )
  • ET
  • Plate-forme d'exécution ( Interprète )

Application
Plate-forme dexécution
6
Les systèmes informatiques
  • Système informatique
  • Application ( Programme )
  • ET
  • Plate-forme d'exécution ( Interprète )
  • Construit pour un ensemble de besoins /
    contraintes

Application
Plate-forme dexécution
7
Problématique 1 Faire évoluer une application
  • Une application distribuée nécessite la
    communication entre deux machines distantes.

8
Problématique 1 Faire évoluer une application
  • Une application distribuée nécessite la
    communication entre deux machines distantes.
  • Comment sécuriser la communication même si cela
    nétait pas prévu lors de la conception du
    système ?

9
Problématique 1 Faire évoluer une application
Prépare les données à envoyer
Application
Application
Plate-forme dexécution
Plate-forme dexécution
Canal de communication
Emet les données
10
Problématique 1 Faire évoluer une application
  • Solution 1 Modifier lapplication elle-même

Application
Application
Plate-forme dexécution
Plate-forme dexécution
11
Problématique 1 Faire évoluer une application
  • Solution 1 Modifier lapplication elle-même

Application
Application
Plate-forme dexécution
Plate-forme dexécution
12
Problématique 1 Faire évoluer une application
  • Solution 2 Modifier la plate-forme dexécution

Application
Application
Plate-forme dexécution
Plate-forme dexécution
13
Problématique 1 Faire évoluer une application
  • Solution 2 Modifier la plate-forme dexécution

Application
Application
Plate-forme dexécution
Plate-forme dexécution
14
Problématique 1 Faire évoluer une application
  • Solution 2 Modifier les deux

Application
Application
Plate-forme dexécution
Plate-forme dexécution
15
Problématique 1 Faire évoluer une application
  • Solution 3 Modifier les deux

Application
Application
Plate-forme dexécution
Plate-forme dexécution
16
Solution 1 Modifier lapplication
  • Chaîne de production dune application

Préprocesseur
compilation
Application
17
Solution 1 Modifier lapplication
  • Modifier le code source de lapplication

Ajouter par un préprocesseur
String mesg blabla mesg
crypt(mesg) Socket socket new
Socket() socket.send(mesg)
compilation
Application
18
Solution 1 Modifier lapplication
  • Modifier le code source de lapplication

String mesg blabla Socket socket new
Socket() socket.send(mesg)
19
Solution 1 Modifier lapplication
  • Modifier le code source de lapplication

Extension du langage
String mesg blabla Security Socket
socket new Socket() socket.send(mesg)
compilation
Application
Nouveau compilateur
20
Solution 1 Modifier lapplication
  • Modifier le code compilé

Application
21
Solution 1 Modifier lapplication
  • Modifier le code compilé

011000 100011 1010
bytecode initial
22
Solution 1 Modifier lapplication
  • Modifier le code compilé

011000 110010 100011 11110
011000 100011 1010
modifications
bytecode initial
bytecode modifié
23
Solution 1 Modifier lapplication
  • Utilisation de la réflexivité

Auto Représentation
Application
Interface
Plate-forme dexécution
Représentation de lapplication
24
Solution 1 Modifier lapplication
  • Point fort
  • Conservation de la portabilité

Application
Plate-forme dexécution
Plate-forme dexécution
25
Solution 1 Modifier lapplication
  • Point fort
  • Conservation de la portabilité
  • Point faibles
  • Couplage

String mesg blabla mesg
crypt(mesg) Socket socket new
Socket() socket.send(mesg) LogManager.log(mesg
)
26
Solution 1 Modifier lapplication
  • Point fort
  • Conservation de la portabilité
  • Point faibles
  • Couplage
  • Difficilement réversible

String mesg blabla mesg
crypt(mesg) Socket socket new
SecureSocket() socket.send(mesg) LogManager.lo
g(mesg)
27
Solution 1 Modifier lapplication
  • Point fort
  • Conservation de la portabilité
  • Point faibles
  • Couplage
  • Difficilement réversible

String mesg blabla mesg
crypt(mesg) Socket socket new
SecureSocket() socket.send(mesg) LogManager.lo
g(mesg)
28
Solution 1 Modifier lapplication
  • Point fort
  • Conservation de la portabilité
  • Point faibles
  • Couplage
  • Difficilement réversible
  • Difficilement combinable

29
Solution 1 Modifier lapplication
  • Point fort
  • Conservation de la portabilité
  • Point faibles
  • Couplage
  • Difficilement réversible
  • Difficilement combinable
  • Contrôle l'exécution limité

30
Solution 2 Modifier la plate-forme dexécution
  • Implantation ad-hoc
  • Redéfinition de modules avant exécution

Application
Plate-forme dexécution Sécurité
31
Solution 2 Modifier la plate-forme dexécution
  • Réflexivité

Données de la plate-forme dexécution
Application
Interface
Plate-forme dexécution
Auto - Représentation
32
Solution 2 Modifier la plate-forme dexécution
  • Points faibles
  • Perte de la portabilité
  • Mise en oeuvre difficile
  • Points forts
  • Contrôle de l'exécution accrû
  • Moins de couplages
  • Modifications dynamiques

33
Problématique 2 adapter la plate-forme
dexécution aux contraintes dune application
  • Exemple une application temps réel nécessitant
    un algorithme de ramasse-miettes adapté.

Algorithme GC
Application
Interface
Plate-forme dexécution
Algorithme GC
34
Travaux existants en Java
  • Adaptation de lapplication
  • Modification de code source
  • AspectJ, OpenJava, BCA,
  • Modification du bytecode
  • JOIE, ASM, BCEL, Javassist,
  • Peuvent se ramener à une transformation de la
    plate-forme dexécution

35
Travaux existants en Java
  • Adaptation de la plate-forme dexécution
  • Nombreuses JVMs ad-hoc
  • Jupiter, Plava, JanosVM
  • Quelques JVMs adaptables
  • JavaInJava, MetaXa, Guarana, Jikes
  • Difficilements combinables
  • Pas assez réflexives

36
Notre solution Corosol
  • Adapter la plate-forme d'exécution
  • Une JVM
  • Portable
  • Facilement adaptable
  • avant exécution
  • pendant l'exécution, par l'application exécutée

37
Portabilité
  • Portabilité des propriétés et des modifications
  • Comment ?
  • Implantation 100 Java

Application
Corosol
Plate-forme dexécution
Plate-forme dexécution
38
Adaptations statiques problématiques
  • Repose sur la redéfinition des éléments de
    larchitecture avant exécution
  • Reconnaître les éléments
  • Les redéfinir

39
Architecture à composants
Corosol se compose dune architecture à
composants.
40
(No Transcript)
41
Composants
  • Définition dun composant
  • Spécification abstraite

42
Composants
  • Définition dun composant
  • Spécification abstraite

interface A extends JVMComponent
43
Composants
Nouveau type abstrait de composant
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait

interface A extends JVMComponent
Interface commune à tous les types de composants
44
Composants
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait
  • Spécification des services

interface A extends JVMComponent int
service1(B b) int service2(Class c) C
service3(A a)
45
Composants
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait
  • Spécification des services
  • Implantation concrète

public class AImpl implements A
46
Composants
Type concret du composant de type abstrait A
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait
  • Spécification des services
  • Implantation concrète

public class AImpl implements A
47
Composants
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait
  • Spécification des services
  • Implantation concrète
  • Implantation des services

public class AImpl implements A public int
service1(B b) public int service2(Class
c) public C service3(A a)
48
Composants
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait
  • Spécification des services
  • Implantation concrète
  • Implantation des services
  • Dépendances dynamiques

public class AImpl implements A private D d
private E e public int service1(B b)
public int service2(Class c) public C
service3(A a) public void
configure(JVirtualMachine jvm) this.d
(D)jvm.getComponent(D.class) this.e
(E)jvm.getComponent(E.class)
49
Composants
  • Définition dun composant
  • Spécification abstraite
  • Type abstrait
  • Spécification des services
  • Implantation concrète
  • Implantation des services
  • Dépendances dynamiques

public class AImpl implements A private D d
private E e public int service1(B b)
public int service2(Class c) public C
service3(A a) public void
configure(JVirtualMachine jvm) this.d
(D)jvm.getComponent(D.class) this.e
(E)jvm.getComponent(E.class)
Commune à tous les composants
Type abstrait du conteneur de composants
50
Adaptations statiques
  • Redéfinition des implantations des composants
  • via un fichier de configuration

compilation
Corosol
Code source de Corosol
Fichier de configuration
51
Adaptations statiques fichier de configurations
corosol.component.JMethodInvoker
corosol.component.impl.RealJMethodInvoker corosol.
component.JScheduler
corosol.component.impl.DefaultJScheduler corosol.c
omponent.JHeapAllocator corosol.component.imp
l.JSimpleHeapAllocator corosol.component.JHeap
corosol.component.impl.DefaultJHea
p corosol.component.JavaStack
corosol.component.impl.DefaultJavaStack
52
Adaptations statiques fichier de configurations
corosol.component.JMethodInvoker
corosol.component.impl.RealJMethodInvoker corosol.
component.JScheduler
corosol.component.impl.DefaultJScheduler corosol.c
omponent.JHeapAllocator corosol.component.imp
l.JSimpleHeapAllocator corosol.component.JHeap
corosol.component.impl.DefaultJHea
p corosol.component.JavaStack
corosol.component.impl.DefaultJavaStack
Description des types abstraits des composants
53
Adaptations statiques fichier de configurations
corosol.component.JMethodInvoker
corosol.component.impl.RealJMethodInvoker corosol.
component.JScheduler
corosol.component.impl.DefaultJScheduler corosol.c
omponent.JHeapAllocator corosol.component.imp
l.JSimpleHeapAllocator corosol.component.JHeap
corosol.component.impl.DefaultJHea
p corosol.component.JavaStack
corosol.component.impl.DefaultJavaStack
Description des types abstraits des composants
Description des implantations (types concrêts)
des composants
54
Adaptations statiques fichier de configurations
corosol.component.JMethodInvoker
corosol.component.impl.RealJMethodInvoker corosol.
component.JScheduler
corosol.component.impl.DefaultJScheduler corosol.c
omponent.JHeapAllocator corosol.component.imp
l.JSimpleHeapAllocator corosol.component.JHeap
example.PersistentHeap corosol.com
ponent.JavaStack corosol.component.im
pl.DefaultJavaStack
Description des types abstraits des composants
Description des implantations (types concrêts)
des composants
55
Adaptations dynamiques Problématique
  • Reposent sur une gestion des composants à
    lexécution
  • Cest-à-dire
  • Y accéder via lapplication,
  • En ajouter, remplacer voire supprimer

56
Accès aux composants depuis lapplication
  • Lapplication créé et accède à
  • - ses objets,
  • - les composants de Corosol

Objets applicatifs
Composants
Application
57
Méta-niveaux
  • Trois méta-niveaux dexécution

58
Méta-niveaux
Objets applicatifs
  • Trois méta-niveaux dexécution
  • Niveau de base (lapplication)

59
Méta-niveaux
Objets applicatifs
  • Trois méta-niveaux dexécution
  • Niveau de base (lapplication)
  • Niveau méta 0 (Corosol)

Composants
60
Méta-niveaux
Objets applicatifs
  • Trois méta-niveaux dexécution
  • Niveau de base (lapplication)
  • Niveau méta 0 (Corosol)
  • Niveau méta 1 la JVM hôte

Composants
Objets natifs
61
Exécution
Objets applicatifs
  • Chaque niveau exécute
  • le niveau supérieur.

Composants
Niveau méta 0 (Corosol) Exécute le niveau de
base (lapplication)
Objets natifs
Niveau méta 1 (JVM hôte) Exécute Corosol
62
Références
Niveau méta 0 (Corosol) Alloue physiquement les
objets de lapplication
  • Chaque niveau contient les références des
    objets du
  • niveau supérieur.

Gestionnaire des références
Tas
Niveau méta 1 (JVM hôte) Alloue physiquement les
composants de Corosol
Tas
63
Causalité
Objets applicatifs
Les niveaux sont causalement entre eux.
Composants
Objets natifs
64
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif

Composants
65
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0

Composants
66
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0
  • Retour du résultat

Composants
67
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0
  • Retour du résultat
  • Création / Appel sur un composant

Composants
68
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0
  • Retour du résultat
  • Création / Appel sur un composant
  • Activation au niveau méta 0

Composants
69
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0
  • Retour du résultat
  • Création / Appel sur un composant
  • Activation au niveau méta 0
  • Délégation au niveau méta 1

Composants
Objets natifs
70
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0
  • Retour du résultat
  • Création / Appel sur un composant
  • Activation au niveau méta 0
  • Délégation au niveau méta 1
  • Activation au niveau méta 1

Composants
Objets natifs
71
Réflexivité totale méta-niveaux
Objets applicatifs
  • Création / Appel sur un objet applicatif
  • Exécution au niveau méta 0
  • Retour du résultat
  • Création / Appel sur un composant
  • Activation au niveau méta 0
  • Délégation au niveau méta 1
  • Activation au niveau méta 1
  • Remontée du résultat

Composants
Objets natifs
72
Réflexivité totale Up / Down
  • Passer dun méta-niveau à un autre nécessite une
    transformation des données

Gestion uniforme des composants Et objets de
lapplication
Représentation des objets de lapplication.
Niveau méta 0 (Corosol)
Tas
Up
Down
Représentation des composants
Tas
  • Niveau méta 1 (JVM hôte)

73
Réflexivité totale Up / Down
  • Passer dun méta-niveau à un autre nécessite une
    transformation des données
  • Si value est d'un type primitif
  • alors
  • Up(value) encode(value)
  • Sinon si value est du niveau méta 1
  • alors
  • Up(value) wrap(value)
  • Sinon
  • Up(value) value

Gestion uniforme des composants Et objets de
lapplication
Représentation des objets de lapplication.
Niveau méta 0 (Corosol)
Tas
Up
Down
Représentation des composants
Tas
Niveau méta 1 (JVM hôte)
74
Réflexivité totale Up / Down
  • Passer dun méta-niveau à un autre nécessite une
    transformation des données
  • Si value est d'un type primitif
  • alors
  • Down(value) decode(value)
  • Sinon si value est du niveau méta 1
  • alors
  • Down(value) value
  • Sinon
  • Down(value) Proxy(value)

Niveau méta 0 (Corosol)
Tas
Down
Tas
Niveau méta 1 (JVM hôte)
75
Gestion des composants à lexécution
  • Deux composants essentiels
  • Le gestionnaire des associations
  • Relations Type abstrait / Type concrèt
  • Le conteneur à composants
  • Gestion des dépendances
  • Construction des mandataires
  • Utilisé par lapplication

76
Gestion des composants à lexécution
Composant
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Création dun mandataire

Dépend de
A
B
Mandataire
C
D
Conteneur de composants
77
Gestion des composants à lexécution
Composant
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Création dun mandataire
  • Insertion dans le conteneur
  • Liaisons avec les autres composants

Dépend de
A
B
Mandataire
C
D
Conteneur de composants
78
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Création dun mandataire
  • Insertion dans le conteneur
  • Liaisons avec les autres composants
  • Remplacement dun composant

Dépend de
A
B
Composant
Mandataire
C
D
Conteneur de composants
79
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Remplacement dun composant
  • Création du nouveau composant
  • Transfert des données
  • Invalidation de lancien composant

Nouveau composant
Dépend de
A
B
Composant
Mandataire
C
D
Conteneur de composants
80
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Remplacement dun composant
  • Création du nouveau composant
  • Transfert des données
  • Invalidation de lancien composant
  • Mise à jour du mandataire

Nouveau composant
Dépend de
A
B
Mandataire
C
D
Conteneur de composants
81
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Remplacement dun composant
  • Création du nouveau composant
  • Transfert des données
  • Invalidation de lancien composant
  • Mise à jour du mandataire
  • Suppression dun composant

Dépend de
A
B
Composant
Mandataire
C
D
Conteneur de composants
82
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Remplacement dun composant
  • Suppression dun composant
  • Invalidation des dépendances

Dépend de
A
B
Composant
Mandataire
C
D
Conteneur de composants
83
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Remplacement dun composant
  • Suppression dun composant
  • Invalidation des dépendances
  • Retrait du conteneur

Dépend de
A
B
Composant
Mandataire
C
D
Conteneur de composants
84
Gestion des composants à lexécution
  • Trois opérations élémentaires
  • Ajout dun nouveau composant
  • Remplacement dun composant
  • Suppression dun composant
  • Invalidation des dépendances
  • Retrait du conteneur

Dépend de
A
B
Composant
Mandataire
C
D
Conteneur de composants
85
Exemple 1 Changer le type de mémoire
  • Motivations Ajouter dynamiquement la
    persistence
  • Comment ?
  • Reconnaître les composants mis en jeu
  • Écrire les nouvelles implantations
  • Les instancier
  • Effectuer le remplacement

86
Modification de la mémoire des objets et mise à
jour des layouts
Modification des valeurs au sein des Stacks
frames
87
Exemple 1 Changer le type de mémoire
  • Composants concernés
  • JHeap le tas

interface JHeap extends JVMComponent
//lecture dune valeur dans le tas Type
readType(int index) //écriture dune valeur
dans le tas void writeType(Type value, int
index)
Nouvelle implantation public class
PersistentJHeap implements JHeap
88
Exemple 1 Changer le type de mémoire
  • Composants concernés
  • JHeap le tas
  • JStackFrame les frames

interface JStackFrame extends JObject,
JAllocatable //empile une valeur sur la pile
des opérandes void pushType(Type type)
//dépile une valeur de la pile des opérandes
Type popType() //écriture dans le tableau
des valeurs locales void storeType(Type value,
int index) //lecture dans le tableau des
valeurs locales void loadType(int index)
Position à recalculer
89
Exemple 1 Changer le type de mémoire
  • Composants concernés
  • JHeap le tas
  • JStackFrame les frames
  • JLayout les gestionnaires de dispositions
  • interface JClassLayout extends JLayout
  • //position dun champ dans la mémoire
  • int getPosition(JField field)
  • interface JArrayLayout extends JLayout
  • //position dune entrée dans la mémoire
  • int getPosition(int index)

Mise à jour des layouts
90
Exemple 1 Changer le type de mémoire
  • public void replace(JVMComponent component)
  • ()
  • JHeap oldHeap (JHeap)component
  • JVirtualMachine jvm Corosol.getVirtualMachine()
  • JHeapAllocator allocator
    (JHeapAllocator)jvm.getComponent(JHeapAllocator.cl
    ass)
  • allocator.moveAllocatables(oldHeap, this)

Ancien tas passé en paramètre
LAllocateur déplace tous les objets de lancien
tas vers le nouveau
Obtention du composant Allocateur
91
Exemple 1 Changer le type de mémoire
public class MyApp private Object data
public void createObject(int n) //création
dobjets public static void main(String
args) new MyApp().createObject(1000)
JVirtualMachine jvm Corosol.getVirtualMachine()
jvm.replaceComponent(new PersistentHeap(10000
0)) Integer value new Integer(200)

Accès à la JVM
Création du nouveau composant
Remplacement du Composant (transfert)
Sera créé dans le nouveau tas
92
Conclusions et perspectives
  • Corosol, une JVM
  • Facilement adaptable
  • avant exécution
  • Via modularité
  • pendant exécution
  • Via réflexivité
  • Entièrement écrite en Java
  • Modifications portables
  • Travaux futurs
  • Améliorations des performances
  • Sûreté
  • Sécurité
  • Compilateur incrémental
Write a Comment
User Comments (0)
About PowerShow.com