II.7.2. Le ciblage logiciel en général :
Dans ce travail nous présentons un flot de ciblage avec
génération de système d'exploitation. Dans cette section
nous nous intéresserons au ciblage logiciel de manière plus
générale, c'est-à-dire sans se soucier des architectures
spécifiques et sans l'introduction ou non de systèmes
d'exploitation dans le flot. Dans un premier temps nous donnons quelques
définitions concernant le ciblage logiciel et notamment la nuance entre
ciblage et compilation, puis nous nous intéressons aux flots de ciblage
avec les représentations utilisées et les étapes à
suivre.
II.7.2.1. Notion d'exécutable :
Le logiciel peut se présenter sous plusieurs formes,
dans plusieurs langages. Cependant, le processeur sur lequel il
s'exécute ne comprend en général qu'un langage basé
sur des suites de 0 et de 1, on parle de langage machine. Un programme est dit
exécutable lorsqu'il se présente sous cette forme,
c'est-à-dire qu'il est « compris » par le processeur et qu'il
peut donc être exécuté.
On parle parfois de langage exécutable pour les
langages qui peuvent être traduits en un langage exécutable (par
exemple le C), par opposition à ceux qui ne le permettent pas (par
exemple UML).
Il existe de très nombreux processeurs et ils ne sont
en générale pas compatibles entre eux. En particulier, ils ne
« comprennent » pas le même langage machine. Dès lors,
la notion d'exécutable n'est pas générale : un programme
est sous une forme exécutable pour un processeur donné.
De nos jours il existe aussi ce que l'on appelle des machines
virtuelles, qui sont des couches logicielles ajoutées aux processeurs et
comprenant le même langage quel que soit le processeur sur lequel elles
sont installées. L'exemple le plus connu est le langage Java qui
s'exécute sur une machine virtuelle Java. Dans ce cas, un programme
exécutable pour la machine virtuelle, l'est indépendamment du
processeur. L'avantage est qu'un même programme peut fonctionner quel que
soit le processeur. L'inconvénient est que ces machines sont en
général très lentes.
II.7.2.2. Définition du ciblage logiciel :
Le ciblage logiciel consiste à produire une description
exécutable (pour une architecture matérielle donnée) d'une
application logicielle, à partir d'une ou plusieurs descriptions de haut
niveau de cette dernière, ne contenant pas de détails
d'implémentation.
Le ciblage n'est pas exactement une compilation. En effet, une
compilation est simplement la traduction d'un langage vers un autre. Le
compilateur ne doit donc effectuer aucun changement dans la sémantique
de la description. Le compilateur ne réalise donc pas de raffinement
dans la description et n'est pas capable de l'adapter à l'architecture
cible. Pour que la compilation puisse produire un logiciel correct, il est
nécessaire au préalable, d'adapter cette description d'entre
à l'architecture.
Le ciblage logiciel quant à lui effectue cette
adaptation, la compilation étant l'étape finale d'un flot de
ciblage. Un tel flot va tout d'abord raffiné certaines parties de la
description d'entrée pour qu'elle soit compatible et efficace avec
l'architecture cible. Cela veut dire qu'elle change la sémantique de
cette description. Par exemple, dans le cas d'une spécification
système, le ciblage logiciel consiste à traiter les concepts de
haut niveau contenus dans la description (communication, structures
parallèles) pour rendre la spécification exécutable pour
une architecture donnée.
|