|
|
TUTORIEL ALGO/METHODES |
|
|
|
Expliquez-moi... L'émulation |
Jeux vidéo, virtualisation, tests logiciels et matériels : l'émulation est utilisée dans tous ces domaines. Elle consiste à imiter le fonctionnement interne d'un système. Mais comment ?
(29/11/2005) |
|
L'émulation est un sujet protéiforme
: elle est aujourd'hui présente tant dans le domaine ludique
que professionnel, et autant dans le monde du logiciel que dans celui du matériel.
En effet, il est possible d'émuler aussi bien un logiciel
voire un système d'exploitation complet, que la présence d'un processeur ou d'un type de carte donnés.
Citons notamment les outils d'émulation
d'anciens ordinateurs et consoles (Amiga, Nintendo, Sega...)
et les solutions professionnelles de virtualisation (VMWare,
SAN/NAS...).
L'objectif de l'émulation est donc d'imiter le fonctionnement
interne d'un système, le plus souvent de manière logicielle
: toutes les fonctions doivent être présentes, de sorte qu'un
logiciel, en y accédant, se comporte comme s'il était directement en
contact avec le système original. L'émulation ne consiste pas
à récrire un programme pour un système précis, mais à concevoir
une "boîte noire" qui se charge de traiter les appels aux fonctionnalités
du système émulé. Cette boîte noire peut être totalement indépendante
du système cible (émulation totale), ou reposer sur les fonctionnalités
de cette cible (compatibilité).
Outre le
fait de pouvoir utiliser des logiciels ou matériels anciens
avec les systèmes et machines d'aujourd'hui, l'émulation
a démontré son utilité lors des phases de développement de
produits - destinés à des processeurs encore en cours de conception,
par exemple. L'émulateur tente alors de prévoir le comportement
du futur système de la manière la plus précise possible, et
peut être mis à jour selon l'évolution des spécifications, plus
rapidement que si l'on devait fondre un nouveau processeur à
chaque fois.
L'émulation est rendue possible par le modèle d'architecture
Von Neumann, commune à tous les ordinateurs modernes. Ce
modèle, conçu dans les années 50, impose le partage de la même
mémoire par le processeur et les données. Tous les composants
d'un ordinateur suivant ce modèle fonctionnent par extension
sur le même principe. De fait, le fonctionnement logiciel ou
matériel répond, dans sa forme la plus basique, aux mêmes caractéristiques,
quel que soit le système d'origine.
Reste cependant à adapter un système pour le faire fonctionner
sur un autre. Cela suppose non seulement une excellente connaissance
du système d'origine (le système d'exploitation à émuler, par
exemple), du système de destination (le processeur de la machine
cible), et du langage de programmation utilisé pour construire
l'émulateur.
Les deux langages les plus utilisés sont l'Assembleur (très
rapide, mais spécifique à une machine) et le C (portable, mais
potentiellement moins rapide). Il est fortement recommandé d'utiliser
dans tous les cas un langage fortement typé, ou très proche
du processeur, plutôt qu'un langage généraliste.
Connaître et reproduire à l'identique n'a rien de trivial :
pour commencer, la documentation est rarement accessible, et
le développeur devrait certainement avoir recours à la décompilation
du code du système d'origine - donc en déduire son fonctionnement.
Il s'agira ensuite d'émuler non seulement le système d'origine,
mais également tous les composants qu'il est censé accéder :
mémoire, disque, carte son, périphériques de contrôles...
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Le plus souvent, cependant, l'émulateur se "contente" de créer
une couche de compatibilité entre les appels logiciels (fichier
ROM, par exemple) et le système d'exploitation. Cette couche
traduit ces appels en instructions cohérentes pour le système
réellement en place.
Pour le logiciel faisant appel au système
émulé, le résultat est le même, mais le fonctionnement interne
est beaucoup plus simple qu'en cas d'une émulation complète. |
|
|