Le module exécutable Qu'es acò ? |
--ooOoo--
Dans ses grandes lignes la composition d'un programme exécutable est toujours la même aujourd'hui.
- En tout premier lieu, qu'est-ce qu'un programme exécutable ?
C'est un ensemble cohérent d'ordres donnés à une machine pour lui faire faire un travail donné. Ce travail peut être des calculs, des traitements de textes, des ordres donnés à une ou des machines industrielles numériques ou/et analogiques, des surveillances pour la sécurité, des analyses en imageries pour la médecine, etc...
Ces ordres donnés à la machine doivent être compris par elle. Ils doivent donc être traduits dans son propre code (décimal ou binaire) puis entrés dans sa mémoire pour que son unité centrale puissent les exécuter. C'est le code dit "code-machine".
Donc un programme exécutable est un ensemble d'ordres écrits en langage-machine.
- De quoi est fait ce programme exécutable ?
Tout naturellement, il comprend le programme principal, celui écrit par le programmeur.
Ce programme principal, pour tourner
à besoin de services comme par exemple lire une cartes, imprimer
une ligne, allumer une lumière, déclencher une alarme, tracer
un trait, afficher une image, etc... Ces services sont aussi des programmes
qui n'ont pas vocation à tourner tout seuls, ils sont appelés
par d'autres programmes. On les appelle tout simplement "sous-programmes"
ou "fonctions". Ecartons la
nuance, seulement une manière de les appeler, ce n'est pas très
important. Ces sous-programmes et ces fonctions peuvent se trouver :
soit dans le programme principal lui-même,
soit accolés au programme principal,
soit plus généralement dans des "bibliothèques" qui sont de deux types :
les bibliothèques-système, celles fournies avec la distribution du moniteur d'exploitation,
les bibliothèques-utilisateur, celles que l'utilisateur confectionne pour son propre compte.
Pour construire un exécutable, il faut donc un programme particulier joint à la distribution du système. On l'appelle 'LOADER' car, quand il a terminé, il se charge de monter en mémoire le programme exécutable qu'il vient de construire. Mais le nom de "LINK EDITOR" (éditeur de liens) me paraît plus approprié.
- Comment est construit un programme exécutable ?
La
construction d'un programme principal exécutable consiste donc à
effectuer la collecte
de toutes les références externes de tous les
sous-programmes et fonctions qu'il appelle. Mais la seule collecte ne suffit
pas. Il faut établir les liaisons externes aux endroits où elles
se trouvent mais il y a aussi des références internes à
résoudre.
La figure ci-contre représente un module intermédiaire c'est à dire un programme, un sous-programme ou une fonction comprenant tout ce qu'il faut pour permettre à l'éditeur de liens de construire un programme définitif donc exécutable. Il y a trois composants majeurs :
le code
intermédiaire du module (en marron) : Il est
fait d'instructions-machine mais sa référence d'adressage
est le début du module, adresse 0 sur la figure. Toutes les
adresses du module sont déterminées par rapport à ce
zéro là. L'instruction-machine "goto
80" (branch en assembleur), écrite ici en clair pour
faciliter la compréhension alors qu'elle est exprimée par
une série de chiffres décimaux ou binaires, se trouvant par
exemple à l'adresse 50 du module renvoie à l'adresse
80 où se trouve la prochaine instruction-machine à exécuter.
Lorsque le module sera chargé en mémoire,
l'adresse 0 du module correspondra à son adresse réelle
d'implantation, disons 'n'. L'adresse relative 80 du "goto"
se trouvant à l'adresse 52 devra donc être corrigée
en 'n+80' pour qu'elle soit exécutable. On dit que cette
adresse est relative ou translatable
puisqu'il faut la modifier.
la Table
d'Adresses Relatives (en vert en bas du module) : elle
contient toutes les adresses relatives à corriger et c'est l'éditeur
de liens qui est chargé de cette mission de correction.
- Conclusion :
La fabrication des modules intermédiaires est la mission des compilateurs.
La fabrication des modules exécutables est la mission des éditeurs de liens.
--ooOoo--