690 likes | 818 Views
Mise en œuvre d'un outil d'aide au développement d'une JVM modulaire pour système embarqué. Projet SOLIDOR. Rodolphe Loué. Plan de la présentation. Introduction 1 - Présentation 2 - Objectifs 3 - Mise en œuvre 4 - Perspectives Conclusion. Plan de la présentation. Introduction
E N D
Mise en œuvre d'un outil d'aide au développement d'une JVM modulaire pour système embarqué Projet SOLIDOR Rodolphe Loué
Plan de la présentation • Introduction • 1 - Présentation • 2 - Objectifs • 3 - Mise en œuvre • 4 - Perspectives • Conclusion
Plan de la présentation • Introduction • 1 - Présentation • 2 - Objectifs • 3 - Mise en œuvre • 4 - Perspectives • Conclusion
Introduction (1/4) • Applications multimédia • télécommunications Essor des architectures embarquées
Introduction (2/4) Programme Liaison
Introduction (2/4) Programme Liaison
Introduction (3/4) • Modification du programme indépendamment du matériel • Evolution du matériel indépendamment du programme Programme ABSTRACTION MATERIELLE
Introduction (4/4) • mémoire • rapidité d’exécution • coût énergétique Optimisation de l’abstraction matérielle selon les critères :
Plan de la présentation • Introduction • 1 - Présentation • 2 - Objectifs • 3 - Mise en œuvre • 4 - Perspectives • Conclusion
spécification Implantation (modules) Alignements requis M1 M3 DSP C55x M2 M4 SDE Gestionnaire de type Sélecteur de module Critères de conception Projection de langage M1, M2 Interface utilisateur 1 - Présentation (1/2) Gestionnaire de type
1 - Présentation (2/2) Programme utilisateur Service1 Service2 Service d’allocation Implantation de l’allocation de T Version1 validée Version2 invalidée Implantation2 <T> <référence sur T> Implantation1 Fonction de construction de T MEMOIRE <T> langage2 langage1 SDE spécification Alignement requis Implantation Système d’exploitation
Plan de la présentation • Introduction • 1 - Présentation • 2 - Objectifs • 3 - Mise en œuvre • 4 - Perspectives • Conclusion
2 - Objectifs • Utilisation des fonctions de construction de type • Création d’information sur le type Rendre le gestionnaire de type polyvalent
Plan de la présentation • Introduction • 1 - Présentation • 2 - Objectifs • 3 - Mise en œuvre • 4 - Perspectives • Conclusion
Les types dans SDE • Type opaque : bloc contigu (opaque(5)) • Type externe : déclaré dans la spécification • Type composé • structure : concaténation de type (struct {...}) • union : superposition de type • simple : taille de sa composante la plus volumineuse (union {...}) • avec sélecteur de type : fonction retournant le type de l’union (union <sélecteur_de_type> {…}) • tableau : ensemble d’éléments indexés d’un type • classique (opaque(1)[2]) • dynamique : fonction retournant la taille de la dimension (opaque(3)[<fonction_de_dimension>])
inversion du type • Propriété :un type est • représenté par un arbre • construit par une grammaire LALR • Type ::= Type_Tableau • Type_Tableau ::= Type Dim • Exemple :type [5][2][7]
inversion du type Type type[5][2][7] Dim Type [7] type[5][2] Dim Type type[5] [2] Dim Type type [5] Interprété par l’analyseur par : type[7][2][5]
légende 1 racine 1 2 3 15 17 structure ou union 2 3 16 18 22 19 4 21 20 tableau 21 20 5 7 8 10 11 opaque 19 22 6 8 7 10 11 23 12 9 13 14 inversion du type
légende 1 racine 1 3 15 17 structure ou union 2 16 18 22 4 21 tableau 20 5 8 11 opaque 19 6 7 10 23 12 9 13 14 inversion du type
Descripteur de la dimension 1 Descripteur de la dimension 2 Tableau dynamique versus fixe Tableau dynamique Tableau fixe Tableau dynamique Tableau fixe 2 1 3 (0,0,0) (0,0,1) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,2,0) (1,2,1) (1,2,2) (2,0,0) (3,0,0) (0,0,0) (0,0,1) (0,1,0) (0,1,1) (0,2,0) (0,2,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1) (1,2,0) (1,2,1) Représentation spatiale Représentation mémoire
d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 Opaque(5) [2][3][<d3>][3]
Légende Emplacement mémoire de taille indéfinie Opaque(5) [2][3][<d3>][3]
Légende Emplacement mémoire de taille indéfinie Opaque(5) [2][3][<d3>][3]
Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Opaque(5) [2][3][<d3>][3]
d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Opaque(5) [2][3][<d3>][3]
0 4 8 12 16 20 24 32 d3(0,0)=1 d3(0,1)=1 d3(0,2)=3 d3(1,0)=2 d3(1,1)=1 d3(1,2)=1 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 Opaque(5) [2][3][<d3>][3] Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Emplacement mémoire de la taille d’un opaque(5) aligné
Unions avec sélecteur dans un tableau • Exemple : union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3];
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3];
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3];
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2
opaque(8) o2; union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2
opaque(8) o2; union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2
opaque(4) o1; union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3];
opaque(8) o2; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3];
opaque(16) o3; sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3];
union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; Légende Emplacement mémoire de taille indéfinie
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Emplacement mémoire de la taille d’un opaque(8) aligné
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; u Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Emplacement mémoire de la taille d’un opaque(8) aligné
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; u Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Emplacement mémoire de la taille d’un opaque(8) aligné
sel1=Type_u sel1=Type_o1 sel1=Type_u sel2=Type_o2 sel2=Type_o2 sel2=Type_o2 sel2=Type_o3 union <sel1> { opaque(4) o1; union <sel2> { opaque(8) o2; opaque(16) o3; }[2] u; }[3]; u Légende Emplacement mémoire de taille indéfinie Emplacement mémoire de la taille d’un pointeur Emplacement mémoire de la taille d’un opaque(8) aligné Emplacement mémoire de la taille d’un opaque(4) aligné