Rapport de projet
_____
MISE EN ŒUVRE D’UN OUTIL D’AIDE
AU DEVELOPPEMENT
D’UNE JVM MODULAIRE POUR SYSTEME EMBARQUE
Présenté par :
Olivier DERUELLE
Erwan FOUYER
Maxime JOUIN
Rodolphe LOUE
En vue de l’obtention du Diplôme d’Ingénieur en Information
et Communication (DIIC) de l’IFSIC
option Langages et Systèmes Informatiques (LSI)
Soutenu le 1er Février 2001
Responsable IRISA : Jean-Philippe Lesot
Abstract :
Implementation of a tool of development aid of a modular JVM for embedded systems
The world of the embedded systems is in full rise. However, the languages used to program the various applications used in these systems are very close to the hardware used. This is why it is necessary to find a language representing a higher level that allows an abstraction of the employed support. After search, the mechanism of the JVM (Java Virtual Machine) was regarded as a very good abstraction. But this last, not being modular, is not adapted to the embedded systems.
The goal of our third year project is to implement a tool of development aid of a modular JVM for the embedded systems. This project is part of the INRIA project known as SDE ( Scratchy Development Environment), which is being developed in collaboration with Texas Instruments and Wind River.
The SDE project aims to build a JVM which could be compatible with several embedded systems. The design of a JVM must be dedicated to the embedded systems to carry out an optimal abstraction between all their various components. The approach of the project is to conceive a JVM in a modular way to allow its adaptation to any kind of embedded system holding account of several criteria like the storage capacity or the characteristics of the processor.
SDE offers to users the way to specify the data types they need. The type is composed of other types or structured types (structures, unions and arrays). We have created a type manager which realise a merging of different parts of a type, global and private to a module, and generate offsets of its different components.
These offsets are determinate thanks to an algorithm of memory optimisation. This algorithm makes it possible to place objects implementing these types in a minimal memory capacity. It imposes these offsets to respect the alignment required by the used processor.
The data types are implemented with the language C in some specific files allowing to respect the modularity and the efficiency of embedded systems. By modularity, we mean that it is possible to explore several designs for one particular module, transparently for the others. We have performed the implementation of variable size types and static size types. This implementation consists in making a function which makes the memory allocation of a type and in defining some macros which allows the access of types fields. So, we have defined some pointers used to resolve the problem of memory allocation for variable size types and to access types fields.
All the objectives were not achieved but the current version of SDE is usable thanks to our work. Many tools can still be added to this application and could be considered in a future project.
Sommaire :
Abstract : 2
Implementation of a tool of development aid of a modular JVM for embedded systems 2
Sommaire : 4
1.INTRODUCTION 6
2.SITUATION DU PROJET 7
2.1.Présentation de l’IRISA 7
2.2.Le projet SDE : Scratchy Development Environment 9
2.2.1.Présentation 9
2.2.2.Objectifs 10
2.2.3.Démarche 11
3.MISE EN ŒUVRE 12
3.1.Analyse des types fixes 12
3.2.Alignement mémoire 16
3.2.1.Principe général 16
3.2.2.Un exemple d’utilisation 17
3.2.3.L’alignement mémoire des objets 19
3.2.3.1.Le principe du placement mémoire utilisé 19
3.2.3.2.L’alignement général des objets 20
3.2.3.3.L’alignement des « structures » 20
3.2.3.4.L’alignement des tableaux 21
3.2.3.5.L’alignement des unions 23
3.2.4. Les structures utilisées 25
3.3.Analyse des types variables 27
3.3.1.Le type Union 27
3.3.2.Le type Tableau 31
4.CONCLUSION 35
4.1.Objectifs atteints 35
4.2.Critiques objectives 35
4.3.Proportions hommes/mois 36
4.4.Difficultés 37
4.5.Perspectives du travail 37
5.ANNEXE 38
5.1. Fonction principale de placement des éléments en mémoire 38
5.2. Fonction finale d’optimisation mémoire 40
5.3. Fonction intermédiaire d’optimisation mémoire des structures 41
5.4. Fonction intermédiaire d’optimisation mémoire des tableaux 42
5.5. Fonction intermédiaire d’optimisation mémoire des unions 43
5.6. Fonction de recherche d’offset 44
5.7. Bibliographie 45
INTRODUCTION
Le monde des systèmes embarqués est en plein essor. Cependant, les langages utilisés pour programmer les différentes applications évoluant dans ces systèmes sont très proches du matériel utilisé, voir indissociables.
C’est pourquoi il est nécessaire de trouver un langage (un mécanisme) représentant une couche supérieure à celle existante et permettant une abstraction du support employé. Après de multiples recherches, le mécanisme de la JVM (Java Virtual Machine) a été considéré comme une très bonne abstraction. Mais ce dernier, n’étant pas modulaire, n’est pas adapté aux systèmes embarqués.
Ainsi, nous allons étudier la mise en œuvre d’un outil d’aide au développement d’une JVM modulaire pour les systèmes embarqués.
Le projet SDE a pour objectif de construire une JVM qui pourrait être compatible avec plusieurs systèmes embarqués. La conception d'une JVM doit être dédiée aux systèmes embarqués pour réaliser une abstraction optimale entre tous leurs différents composants. L’approche du projet est de concevoir une JVM d'une façon modulaire pour permettre son adaptation à n'importe quel genre de système embarqué tenant compte de plusieurs critères comme la capacité de la mémoire ou, les caractéristiques du processeur.
Pour ce faire, nous examinerons tout d’abord la situation du projet. Ce sera l’occasion de présenter notre cadre de travail : l’Irisa, et plus particulièrement le projet SDE, qui répond aux contraintes de la problématique posée.
Ensuite nous verrons plus en détail comment SDE introduit la notion de type, notamment l’analyse des types de taille fixe en première partie. Cette analyse donnera suite à l’optimisation mémoire de ces types qui fera l’objet d’une deuxième partie. Enfin, en troisième partie, nous enchaînerons sur le traitement particulier qu’imposent les types de taille variable.
Pour conclure, nous ferons la synthèse du travail effectué. Nous détaillerons les objectifs atteints, les critiques objectives, le temps consacré, les difficultés rencontrés et finalement, les perspectives possibles de notre projet.
Dostları ilə paylaş: |