Synthèse de gestionnaires mémoire pour applications Java temps-réel embarquées - TEL - Thèses en ligne Access content directly
Theses Year : 2008

Automated memory management for real-time embedded Java applications

Synthèse de gestionnaires mémoire pour applications Java temps-réel embarquées

Guillaume Salagnac

Abstract

In this thesis, we address the problem of dynamic memory management in real-time embedded Java systems. When programming in C or C++, all memory management is done explicitly by the programmer, inducing numerous execution faults because of hazardous use of memory operations. This greatly increases software development costs, because such errors are very hard to debug. The Java language tackles this problem by offering automatic memory management, thanks to the use of a garbage collector. However, garbage collection is often deemed to be unsuited to a real-time embedded context, because of its unpredictable execution times. This problem hinders the spread of modern languages like Java in the world of real-time embedded systems.
To settle the problem of execution times, we propose to use a region-based memory manager. The idea is to group objects of similar lifetimes into memory regions, which are deallocated as a whole. This paradigm offers predictable execution times for all memory operations. We propose a static analysis algorithm that predicts connections between objects, so that every data structure is grouped into one region. The analysis also produces results describing the memory behaviour of the program, helping the developer to write his code in a style suitable for region-based memory management.
We implemented an automatic region allocator in the virtual machine of the JITS project, dedicated to bringing full Java support to resource-constrained embedded devices. Experiments show that for most programming patterns, our system behaves as efficiently as a garbage collector, while retaining predictable execution times. Our analysis tool is furthermore able to provide useful feedback to the programmer to pinpoint problematic constructs.
La problématique abordée dans ce travail est celle de la gestion mémoire automatique pour des programmes Java temps-réel embarqués. Dans des langages comme le C ou le C++, la mémoire est typiquement gérée explicitement par le programmeur, ce qui est la source de nombreuses erreurs d'exécution causées par des manipulations hasardeuses. Le coût de correction de telles erreurs est très important car ces erreurs sont rarement reproductibles et donc difficiles à appréhender. En Java la gestion mémoire est entièrement automatique, ce qui facilite considérablement le développement. Cependant, les techniques classiques de recyclage de la mémoire, typiquement basées sur l'utilisation d'un ramasse-miettes, sont souvent considérées comme inapplicables dans le contexte des applications temps-réel embarquées, car il est très difficile de prédire leur temps de réponse. Cette incompatibilité est un frein important à l'adoption de langages de haut niveau comme Java dans ce domaine.
Pour résoudre le problème de la prévisibilité du temps d'exécution des opérations mémoire, nous proposons une approche fondée sur l'utilisation d'un modèle mémoire en régions. Cette technique, en groupant physiquement les objets de durées de vie similaires dans des zones gérées d'un seul bloc, offre en effet un comportement temporel prévisible. Afin de décider du placement des objets dans les différentes régions, nous proposons un algorithme d'analyse statique qui calcule une approximation des relations de connexion entre les objets. Chaque structure de données est ainsi placée dans une région distincte. L'analyse renvoie également au programmeur des informations sur le comportement mémoire du programme, de façon à le guider vers un style de programmation propice à la gestion mémoire en régions, tout en pesant le moins possible sur le développement.
Nous avons implanté un gestionnaire mémoire automatique en régions dans la machine virtuelle JITS destinée aux systèmes embarqués à faibles ressources. Les résultats expérimentaux ont montré que notre approche permet dans la plupart des cas de recycler la mémoire de façon satisfaisante, tout en présentant un comportement temporel prévisible. Le cas échéant, l'analyse statique indique au développeur quels sont les points problématiques dans le code, afin de l'aider à améliorer son programme.
Fichier principal
Vignette du fichier
manuscrit.pdf (2.34 Mo) Télécharger le fichier
Loading...

Dates and versions

tel-00288426 , version 1 (16-06-2008)

Identifiers

  • HAL Id : tel-00288426 , version 1

Cite

Guillaume Salagnac. Synthèse de gestionnaires mémoire pour applications Java temps-réel embarquées. Informatique [cs]. Université Joseph-Fourier - Grenoble I, 2008. Français. ⟨NNT : ⟩. ⟨tel-00288426⟩
224 View
1569 Download

Share

Gmail Facebook X LinkedIn More