Comment fonctionne l'émulateur Linux en Javascript par Fabrice Bellard?
Aujourd'hui, j'ai eu un moment à couper le souffle, quand j'ai vu L'émulateur Linux en Javascript: http://bellard.org/jslinux/
Il compile des programmes C, il a vi et emacs, il supporte toutes les commandes shell, etc etc.
Comment ça marche?
2 réponses
Au début, je pensais aussi que c'était juste un émulateur de terminal qui vous connectait à une machine virtuelle mais ce n'est pas le cas. si vous regardez les connexions réseau, vous pouvez voir qu'après le démarrage, Aucune donnée n'est transmise.
Donc c'est réel.
Un processeur n'est pas quelque chose de magique; en fait, tout ce qu'il fait est de lire des octets de la mémoire et de modifier la RAM en fonction de ce que signifient les commandes.
Dans ce cas, l'émulateur 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 l'octet suivant au PC (compteur de programme).
Maintenant, tout ce dont vous avez besoin est une simple distribution linux qui n'a pas besoin de commandes CPU exotiques comme l'arithmétique à virgule flottante ou le code MMX et voila.
, Ce qui est intéressant, c'est la vitesse de la bête. Le tout est un peu lent mais alors, C'est JavaScript dans un navigateur.
Conclusion: Impressionnant. J'ai hâte de voir un émulateur C64: -)
Voir http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work
Explication Simplifiée
Jslinux est essentiellement un ordinateur complet implémenté dans un logiciel, en particulier 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 à la place.
L'émulateur (JavaScript, ~ 90KB minifié, ~7000 lignes formatées) est chargé dans le navigateur. Un version de Linux a été précédemment compilé en code machine pour un processeur x86 est chargé et copié dans un grand tableau d'entiers qui agit comme la RAM de l'ordinateur émulé. Le processeur de l'émulateur est ensuite pointé vers la première instruction du code machine et dit de commencer à interpréter les instructions (telles que la lecture / écriture de RAM, faire des opérations arithmétiques et logiques, sauter autour de différentes instructions, etc.). Parfois, il va écrire des données (comme le journal système, ou une invite de commande shell) à le "terminal" via un autre morceau de code JavaScript qui simule un port série et un terminal en utilisant le navigateur DOM. Vos touches sont également renvoyées à Linux via ce port série simulé...