68 votes

Comment fonctionne l'émulateur Linux en Javascript de Fabrice Bellard ?

Aujourd'hui, j'ai eu le souffle coupé en voyant un émulateur Linux en Javascript : http://bellard.org/jslinux/

Il compile les programmes C, il a vi et emacs, il supporte toutes les commandes shell, etc etc.

Comment cela fonctionne-t-il ?

35voto

Aaron Digulla Points 143830

Au début, j'ai également pensé qu'il s'agissait simplement d'un émulateur de terminal vous connectant à une VM, mais ce n'est pas le cas. Si vous observez les connexions réseau, vous pouvez voir qu'après le démarrage, aucune donnée n'est plus transmise.

Donc c'est réel.

Une unité centrale n'est pas quelque chose de magique ; en fait, tout ce qu'elle fait, c'est lire des octets dans la mémoire et modifier la RAM en fonction de la signification des commandes.

Dans ce cas, l'émulateur de CPU est basé sur le code qemu. Ce qu'il fait, c'est qu'il crée un tableau de fonctions où l'index est le prochain octet du PC (compteur de programme).

Maintenant, tout ce dont vous avez besoin, c'est d'une distribution linux simple qui ne nécessite pas de commandes exotiques pour le CPU comme l'arithmétique à virgule flottante ou le code MMX et voilà.

Ce qui est intéressant, c'est la vitesse de la bête. L'ensemble est un peu lent, mais il s'agit de JavaScript dans un navigateur.

Conclusion : Impressionnant. J'ai hâte de voir un émulateur C64 :-)

26voto

alex Points 511

Voir http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work

Explication simplifiée

jslinux est essentiellement un ordinateur complet implémenté en logiciel, spécifiquement en JavaScript. Ceci est bien sûr connu comme un émulateur. Cette version particulière est configurée pour exécuter Linux, mais en théorie, elle pourrait exécuter d'autres systèmes d'exploitation.

L'émulateur (JavaScript, ~90KB minifié, ~7000 lignes formatées) est chargé dans le navigateur. Une version de Linux préalablement compilée en code machine pour un processeur x86 est chargée et copiée dans un grand tableau d'entiers qui fait office de RAM de l'ordinateur émulé. L'unité centrale de l'émulateur est ensuite dirigée vers la première instruction du code machine et on lui demande de commencer à interpréter les instructions (lecture/écriture de la RAM, opérations arithmétiques et logiques, saut à différentes instructions, etc.) Parfois, il écrira des données (comme le journal du système, ou une invite de commande shell) dans le "terminal" via un autre morceau de code JavaScript qui simule un port série et un terminal en utilisant le DOM du navigateur. Vos pressions sur les touches sont également renvoyées à Linux via ce port série simulé...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X