Présentation
Auteur(s)
-
Bertrand DUPOUY : Enseignant chercheur, ingénieur d’études au département informatique et réseaux,École nationale supérieure des télécommunications (ENST) , Paris
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleINTRODUCTION
Rappelons les différentes phases de la chaîne de développement d’un programme :
-
écriture, à l’aide d’un éditeur, d’un ou plusieurs fichiers sources qui sont rangés sur disque par cet éditeur ;
-
appel à l’assembleur, ou au compilateur, qui va traduire la représentation symbolique des instructions en représentation binaire et associer des adresses aux noms de variables. Le fichier dépositaire de ces informations s’appelle fichier objet, il contient des modules objets ;
-
utilisation de l’éditeur de liens (« linker ») qui prend en entrée un ou plusieurs modules objets pour créer un fichier binaire exécutable. Ce fichier exécutable, comme les fichiers sources et les fichiers objets est automatiquement rangé sur le disque.
Dans le cas des fichiers exécutables et objets, on parle de fichiers binaires pour insister sur le fait qu’ils contiennent des instructions et des données représentées suivant un codage compréhensible par le processeur de la machine. Les fichiers sources, par contre, sont lisibles par l’utilisateur, mais incompréhensibles pour le processeur : ce sont des suites de caractères codés ASCII.
Les fichiers objets peuvent être regroupés dans des fichiers appelés bibliothèques (« libraries »). Quand ces bibliothèques contiennent des objets d’intérêt général, comme les fonctions mathématiques ou les fonctions graphiques, on parle de bibliothèque « système ».
La figure 1 illustre cette construction d’un fichier exécutable à partir de plusieurs fichiers sources.
Pour exécuter un fichier exécutable, on le charge en mémoire. Cela est généralement fait en saisissant au clavier le nom de ce fichier exécutable. Il est alors chargé depuis le disque vers la mémoire par le module du système d’exploitation appelé « loader » ou chargeur.
Le tableau 1 donne les commandes de compilation et d’édition de liens sous Linux en utilisant
.
DOI (Digital Object Identifier)
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(238 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
4. Techniques d’optimisation
Nous donnons ici quelques ouvertures à partir des points abordés précédemment : lazy linking 4.1, configurations spécifiques pour systèmes embarqués 4.2 et machines virtuelles 4.3.
4.1 Lazy linking
Dans le cas de l’édition de liens statique, les modules objets des bibliothèques sont chargés dans le fichier objet au moment de l’édition de liens. Lors d’une édition de liens dynamique, ces modules sont remplacés par des pointeurs vers des fichiers exécutables. La bibliothèque contenant ces modules sera chargée en mémoire, si cela n’a pas été déjà fait, au lancement de l’application.
La technique du lazy linking diffère ce chargement de la bibliothèque d’exécutables partageables jusqu’à l’appel de la fonction.
Si une fonction n’est jamais appelée, la bibliothèque d’exécutables correspondante ne sera pas chargée. Cette technique s’accompagne souvent du découpage de la bibliothèque d’exécutables en sous-modules contenant chacun une fonction. Ainsi, l’appel à une fonction ne déclenche que le chargement du module correspondant, et non pas celui de toute la bibliothèque partageable.
L’édition de liens dynamique de fichiers objets au format ELF transforme la référence non statisfaite à une fonction par un pointeur vers l’entrée d’une table appellée PLT (Procedure Link Table). Cette table se trouve dans la section plt.
Les entrées de cette table sont mises à jour, c’est‐à‐dire initialisées, par les adresses effectives des fonctions au chargement du programme si l’option LD_BIND_NOW est utilisée ; sinon, cette mise à jour est faite à l’appel de la fonction.
On notera que la section plt et la got, construites par le linker au moment de l’édition...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(238 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Techniques d’optimisation
BIBLIOGRAPHIE
-
(1) - AHO (A), SETHI (R), ULLMAN (J) - Compilateurs. Principes, techniques et outils. - InterÉditions, Paris (1991).
-
(2) - BLANCHET (G.), DUPOUY (B.) - Architecture des ordinateurs. - Masson, Paris (1992).
-
(3) - LEVINE (J.R.) - Linkers and loaders. - Morgan Kaufmann, San Francisco (2000).
-
(4) - TANNENBAUM (A.) - Architecture de l’ordinateur. - InterÉditions, Paris (1991).
-
(5) - Computer research group, UC Berkeley - 4.4 BSD User’s reference manual. - O’Reilly (1994).
ANNEXES
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(238 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive