Mise en œuvre d'un outil d'aide au Mise en œuvre d'un outil d'aide au développement d'une JVM développement d'une JVM modulaire pour système embarquémodulaire pour système embarqué
Olivier DERUELLE
Erwan FOUYER
Maxime JOUIN
Rodolphe LOUE
Projet Solidor
2
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
3
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
4
Introduction Introduction (1/3)(1/3)
Les systèmes embarqués :un monde en plein essor
- Applications multimédia
- Télécommunications
- Chargement dynamique d’applications
5
Introduction Introduction (2/3)(2/3)
La solution :le mécanisme de la JVM
- supporte le chargement dynamique d’applications- nouveau standard dans l’industrie
- nombreuses applications
déjà disponibles
6
Introduction Introduction (3/3)(3/3)
Mais l’embarqué impose ses contraintes :
imposeCPU Mémoire
Énergie
Optimisation des ressources
JVM adaptée
7
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
8
1 - Présentation 1 - Présentation (1/5)(1/5)
SDE
Gestionnairede types
Projectionen C
Implémentation
Spécification
Source & Glue
Fonctionnement
Général
Langage
C
9
Interface de SDEInterface de SDE
Utilisation de SDE à travers deux types de fichiers :– fichiers de spécification– fichiers d’ implémentation
Modularité
1 - Présentation 1 - Présentation (2/5)(2/5)
Fichiers de spécificationFichiers de spécification
typedef integer{…}
typedef float{…}
typedef double{…}
service addition_integer(...)
service addition_float(...)
service addition_double(...)
service multiplication_integer(...)
...
operations.idl
typedef thread{…}
typedef fork{…}
service init_thread(…)
service start_thread(…)
service stop_thread(…)
service wait_thread(…)
service get_parent_fork(…)
service wait_fork(…)
…
process.idl
1 - Présentation 1 - Présentation (3/5)(3/5)
Fichiers d ’implémentationFichiers d ’implémentationtype integer { opaque(2) } type float { opaque(4) }type double { opaque(8) }
service addition_integer { addition_2_octets }
service addition_float { addition_4_octets }
service addition_double { addition_8_octets }
service multiplication_integer { multiplication_2_octets }
operation_16_bits.imp
type integer { opaque(4) } type float { opaque(8) }type double { opaque(16) }
service addition_integer { addition_4_octets }
service addition_float { addition_8_octets }
service addition_double { addition_16_octets }
service multiplication_integer { multiplication_4_octets }
operation_32_bits.imp
1 - Présentation 1 - Présentation (4/5)(4/5)
Fichiers d ’implémentationFichiers d ’implémentationtype thread { opaque(1024) } type fork { opaque(4096) }
service init_thread { init_thread_X }
service start_thread { start_thread_X }
service stop_thread { stop_thread_X }
service wait_fork { wait_fork_X }...
Process_X.imp
type thread { opaque(4096) } type fork { opaque(8192) }
service init_thread { init_thread_Y }
service start_thread { start_thread_Y }
service stop_thread { stop_thread_Y }
service wait_fork { wait_fork_Y }...
Process_Y.imp
1 - Présentation 1 - Présentation (5/5)(5/5)
13
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
14
2 - Objectifs du projet2 - Objectifs du projet
Implémentation d’un gestionnaire de types- types fixes
- types variables
Optimisation de la mémoire
- en taille de l’espace utilisé par les objets
- en temps d ’accès aux objets
Allocation mémoire des types créés
15
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
16
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
Types statiques introduits par SDE
Analyse de types statiques
Optimisation mémoire
Types dynamiques introduits par SDE
Analyse de types dynamiques
17
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
Types statiques introduits par SDE
Analyse de types statiques
Optimisation mémoire
Types dynamiques introduits par SDE
Analyse de types dynamiques
18
Types statiques introduits par SDETypes statiques introduits par SDE
Types statiques
– Opaque
– Externe
– Composé
19
Types statiques introduits par SDETypes statiques introduits par SDE
Types statiques
– Opaque
– Externe
– Composé
20
Type opaque (1/2)Type opaque (1/2)
Utilisé dans les fichiers d’ implémentation
Un espace mémoire contigu
Définit les types de base
Types statiques introduits par SDETypes statiques introduits par SDE
21
Type opaque (2/2)Type opaque (2/2)
Typedef int
{}
int.idl
Type int
{
private :
opaque(2);
}
int_2.imp
Types statiques introduits par SDETypes statiques introduits par SDE
22
Types statiques introduits par SDETypes statiques introduits par SDE
Types statiques
– Opaque
– Externe
– Composé
23
Type ExterneType Externe
correspond à un type déclaré par l ’utilisateur :
– soit dans le même fichier de spécification,
– soit dans un autre fichier de spécification.
Types statiques introduits par SDETypes statiques introduits par SDE
24
Types statiques introduits par SDETypes statiques introduits par SDE
Types statiques
– Opaque
– Externe
– Composé
25
Type ComposéType Composé
un type composé est :
– soit une structure
– soit une union
– soit un tableau
Types statiques introduits par SDETypes statiques introduits par SDE
26
Type StructureType Structure
Typedef frame{}
components.idl
Type frame{private : struct {
integer size; string color; … };
}frame_X.imp
Types statiques introduits par SDETypes statiques introduits par SDE
27
Type ComposéType Composé
un type composé est :
– soit une structure
– soit une union
– soit un tableau
Types statiques introduits par SDETypes statiques introduits par SDE
28
Type UnionType Union
typedef Object{}typedef Byte{}typedef Double{}typedef Short{}typedef Int{}
types.idl
type Object{private : union { Byte b;
Double d; Short s; Int i;…
};}
Object.imp
Types statiques introduits par SDETypes statiques introduits par SDE
29
Type ComposéType Composé
un type composé est :
– soit une structure
– soit une union
– soit un tableau
Types statiques introduits par SDETypes statiques introduits par SDE
Type TableauType Tableau
typedef IP_addr{}
typedef Char{}
protocols.idl
type IP_addr{ private:
Char [4];}
Type Char{ private:
opaque(1);}
protocols_v4.imp
type IP_addr{ private:
Char[4];}
Type Char{ private:
opaque(4);}
protocols_v6.imp
Types statiques introduits par SDETypes statiques introduits par SDE
31
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
Types statiques introduits par SDE
Analyse de types statiques
Optimisation mémoire
Types dynamiques introduits par SDE
Analyse de types dynamiques
32
Analyse des types statiquesAnalyse des types statiques
3 étapes :
– Parcours des types définis dans les fichiers de spécification et d ’implémentation
– Génération de macros permettant l ’utilisation des types
– Allocation mémoire du type
33
Macros générées par SDEMacros générées par SDE
Les noms des macros ont la forme suivante :– (global | <module_name>) [_<var_name_1> [_… [_<var_name_N>]]
Macros spécifiques aux Tableaux
Macros spécifiques aux autres types
Analyse des types statiquesAnalyse des types statiques
34
Macros des types statiquesMacros des types statiques
#define types_X_integer(ref) ( (char *) (ref)+OFFSET )
Type integer{private:
opaque(4) ;}
types_X.imp
Typedef integer{}
types.idl
Analyse des types statiquesAnalyse des types statiques
35
Macros des types Tableaux statiquesMacros des types Tableaux statiques
#define types_matrice(ref,i0,i1) ( (char *)(ref)+i0*5*4+i1*4+OFFSET )
Type matrice{private :
opaque(4) [5][2];}
types_X.imp
Typedef matrice{}
types.idl
Analyse des types statiquesAnalyse des types statiques
36
Allocation mémoire statiqueAllocation mémoire statique
une fonction d ’allocation mémoire par type :
– localité spatiale des champs du type :
rapidité d ’accès aux champs
– indispensable dans un contexte multitâche :
mémoire moins fragmentée
processus plus rapides
– retourne une référence
Analyse des types statiquesAnalyse des types statiques
37
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
Types statiques introduits par SDE
Analyse de types statiques
Optimisation mémoire
Types dynamiques introduits par SDE
Analyse de types dynamiques
38
Optimisation mémoire Optimisation mémoire (1/9)(1/9)
État initial du SDE :
Placement
Mémoire
Pas
d ’optimisation
39
Optimisation mémoire Optimisation mémoire (2/9)(2/9)
1- Le placement mémoire :
Alignement 1 :
Alignement 2 :
Accepté par processeur X
Accepté par processeur X
Refusé par processeur Y
Accepté par processeur Y
40
Optimisation mémoire Optimisation mémoire (3/9)(3/9)
1- Le placement mémoire :
Règle 1 :
l’adresse allouée à un objet placé en
mémoire doit satisfaire l’alignement
dicté par le processeur utilisé.
Optimisation mémoire Optimisation mémoire (4/9)(4/9)
2- L’optimisation de l ’espace utilisé :
1
2
4
4
4
8
Alignement Mémoire nonoptimisée
Mémoireoptimisée
Gain de place mémoire : 30%
42
Optimisation mémoire Optimisation mémoire (5/9)(5/9)
2- L’optimisation de l’espace utilisé :
Optimisation 1 :
l’espace restant entre 2 objets placés en
mémoire doit être minimal.
43
Optimisation mémoire Optimisation mémoire (6/9)(6/9)
3- L’alignement des types :
Les structures
Les tableaux
Les unions
Gestions différentes de l’alignement
44
3 x ( 2 )
1 x ( 4 )
2 x ( 8 )
Optimisation mémoire Optimisation mémoire (7/9)(7/9)
Les structures :
Objets à placer
Emplacementdes objets
45
1 x ( 2 )
1 x ( 4 )
1 x ( 8 )
Optimisation mémoire Optimisation mémoire (8/9)(8/9)
Les tableaux :
Objets d’un élémentÉlément
de tableau
Tableau à 2 éléments
Contrainte de spécification : la localité mémoire. Les éléments doivent être placés consécutivement
Optimisation mémoire Optimisation mémoire (9/9)(9/9)
Les unions :
Union composée des 3 structures : , ,
En hachuré, les emplacements laissés libres par les structures : ,,
47
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
Types statiques introduits par SDE
Analyse de types statiques
Optimisation mémoire
Types dynamiques introduits par SDE
Analyse de types dynamiques
48
Types dynamiques introduits par SDETypes dynamiques introduits par SDE
Taille du type connue à l’exécution.
Deux sortes de type dynamique :
– type composé Union
– type composé Tableau
Types Unions dynamiquesTypes Unions dynamiques
typedef Object{}typedef Byte{}typedef Double{}typedef Short{}typedef Boolean{}
types.idl
type Object{private : union <selection_function> { Byte b;
Double d; Short s; Boolean i; …
};}
Object.imp
Types dynamiques introduits par SDETypes dynamiques introduits par SDE
Types Tableaux dynamiquesTypes Tableaux dynamiques
typedef Object{}typedef Byte{}typedef Double{}typedef Short{}typedef Boolean{}
types.idl
type Object{private : union { Byte b;
Double d; Short s; Boolean bo; …
}[dimension_function];}
Object.imp
Types dynamiques introduits par SDETypes dynamiques introduits par SDE
51
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
Types statiques introduits par SDE
Analyse de types statiques
Optimisation mémoire
Types dynamiques introduits par SDE
Analyse de types dynamiques
52
Analyse des types dynamiquesAnalyse des types dynamiques
3 étapes :
– Parcours des types définis dans les fichiers de spécification et d’implémentation
– Génération de macros permettant l’utilisation des types
– Allocation mémoire du type
53
Macros des types Tableaux dynamiquesMacros des types Tableaux dynamiques
#define meta1(ref) ((char *)(ref)+OFFSET)#define types_array(ref,i0) ( (char *) (ref) +*meta1(ref)+i0*4+OFFSET)
Type array{private :
opaque(4) [<dim>];}
types_X.imp
Typedef array{}
types.idl
Analyse des types dynamiquesAnalyse des types dynamiques
54
Allocation mémoire des types dynamiquesAllocation mémoire des types dynamiques
Problème :– Taille du type connue à l’exécution
Solution :– Définition de pointeurs – Réservation d’emplacements pour les adresses– Mise à jour de ces emplacements– Localité mémoire – Retourne une référence
Analyse des types dynamiquesAnalyse des types dynamiques
55
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
56
4 - Perspectives4 - Perspectives
Pour les types
- interface graphique
- génération de Makefile
- séparation entre les classes Java et le langage d’implémentation
Pour l’alignement des objets en mémoire
- algorithme de recherche par arbres
- optimisation de la vitesse d’accès mémoire
57
Plan de la présentationPlan de la présentation
IntroductionIntroduction 1 - Présentation1 - Présentation 2 - Objectifs2 - Objectifs 3 - Mise en œuvre3 - Mise en œuvre 4 - Perspectives4 - Perspectives ConclusionConclusion
58
ConclusionConclusion
Objectifs atteints
- gestionnaire de type réalisé
- optimisation de la taille mémoire utilisée
Critiques
- fichiers générés
- travail modulaire
59
Questions et Questions et commentairescommentaires
Mise en œuvre d'un outil d'aide au Mise en œuvre d'un outil d'aide au développement d'une JVM développement d'une JVM modulaire pour système embarquémodulaire pour système embarqué
Olivier DERUELLE
Erwan FOUYER
Maxime JOUIN
Rodolphe LOUE
Projet Solidor
FINFIN