Hardware / CPU

L’émulation de microprocesseur

Dernière mise à jour :

L’émulation de microprocesseur

Lorsque l’on veut faire fonctionner un programme sur un processeur pour lequel il n’a pas été conçu, plusieurs approches techniques sont possibles. Chacune présente ses avantages, ses limites et ses cas d’usage.

Recompilation

C’est la solution la plus efficace en termes de performances. Elle consiste à recompiler le code source pour la nouvelle architecture cible. Le code généré s’exécute alors directement sur le processeur cible, sans intermédiaire. Cela n’est évidemment possible que si l’on dispose encore du code source du programme et des bibliothèques utilisées, sinon il faut utiliser une des méthodes suivantes.

Transcompilation

La transcompilation (ou cross-compilation) traduit chaque instruction du code assembleur d’origine vers une ou plusieurs instructions du code assembleur de destination. Les performances sont proches de celles du code initial, mais cette méthode n’est pas sans risque : si le programme d’origine avait été optimisé par le compilateur ou était destiné à un processeur précis, certains comportements ou certaines instructions spécifiques peuvent ne plus être correctement reproduits, entraînant des dysfonctionnements.

Émulation

Dans ce cas, le code assembleur d’origine est interprété instruction par instruction par une machine virtuelle. Cette méthode est utilisée pour simuler le comportement exact d’un ancien processeur, souvent dans le cadre de la restauration de consoles de jeu, de bornes d’arcade ou d’ordinateurs historiques.

Le décodage et le traitement de chaque instruction provoquent un ralentissement important, mais la performance n’est pas ici l’objectif : on cherche avant tout à reproduire fidèlement la vitesse et le comportement de la machine d’époque. Comme les processeurs modernes sont largement plus rapides, aucune lenteur n’est perceptible par l’utilisateur.

Exécution JIT (Just-In-Time)

La technique du Just-In-Time ( juste à temps ) constitue un compromis entre l’émulation et la recompilation. Les instructions sont traduites et exécutées par une machine virtuelle, mais le code traduit est mis en cache afin d’être réutilisé lors des exécutions suivantes. Ce mécanisme améliore considérablement les performances tout en conservant une grande flexibilité.

C’est ainsi que fonctionnent la machine virtuelle Java, l’environnement .NET (C#), ou encore la plupart des moteurs JavaScript modernes.

← Retour à la liste des articles