D'après ce que j'ai compris, une machine virtuelle se divise en deux catégories: "machine virtuelle système" ou "processus de machine virtuelle". C'est un peu flou pour moi où se trouve BEAM. Existe-t-il un autre type de machine virtuelle dont je ne suis pas au courant?
Erlang VM s'exécute en tant que processus de système d'exploitation. Par défaut, il exécute un thread de système d'exploitation par cœur pour optimiser l'utilisation de la machine. Le nombre de threads et les cœurs qu'ils peuvent exécuter peuvent être définis lors de VM est démarré.
Les processus Erlang sont implémentés entièrement par Erlang VM) et n'ont aucune connexion avec les processus ni les threads du système d'exploitation. Si vous utilisez un système Erlang de plus d'un million de processus, il ne reste qu'un processus de système d'exploitation et un thread par cœur. En ce sens, Erlang VM est une "machine virtuelle de processus", tandis que le Le système Erlang lui-même se comporte très bien comme un système d'exploitation et les processus Erlang ont des propriétés très similaires aux processus de système d'exploitation, par exemple, l'isolation. à droite, voir Erlang sur Xen .
Soit dit en passant, il est parfaitement possible d’avoir des systèmes exécutant des millions de processus Erlang et cela se fait effectivement dans certains produits, par exemple WhatsApp .
Nous pensions certainement beaucoup aux systèmes d’exploitation lorsque nous avons conçu l’environnement de base d’Erlang.
La machine virtuelle est un système informatique. Le but ultime d'un système informatique est d'exécuter une logique programmée. Dans cette perspective, les machines virtuelles peuvent être classées dans 4 types en fonction du niveau d'abstraction et de l'étendue de l'émulation:
Type 1: Machine virtuelle ISA (Full Instruction Set Architecture) == fournit un ISA émulation ou virtualisation. Les systèmes d'exploitation et les applications invités peuvent s'exécuter sur le dessus de la machine virtuelle en tant qu'ordinateur réel (par exemple, VirtualBox, QEMU, XEN ).
Type 2: machine virtuelle ABI (Application Binary Interface) == fournit une émulation ABI de processus invité. Les applications correspondant à cette ABI peuvent s’exécuter parallèlement à d’autres applications ABI natives (par exemple, (couche d’exécution IA-32 d’Intel sur Itanium, émulation Code Morphing pour X86 de Transmeta), couche de traduction Rosetta pour PowerPC de Transmeta). émulation ).
Type 3: Virtual ISA machine virtuelle == fournit un moteur d'exécution afin que les applications codées dans le virtuel ISA peut exécuter sur elle. Virtual ISA définit généralement une sémantique de haut niveau et limitée de la sémantique ISA. Il n'est donc pas nécessaire que la machine virtuelle émule un système informatique complet (par exemple, Sun JVM de Microsystem, Common Language Runtime de Microsoft, machine virtuelle Parrot de la Fondation Parrot).
Type 4: Machine virtuelle Langage == fournit un moteur d’exécution qui exécute des programmes exprimés dans une langue invité. Les programmes sont généralement présentés à la machine virtuelle sous la forme source du langage invité, sans être préalablement compilés au préalable dans le code machine. Le moteur d’exécution a besoin d’interpréter ou de traduire le programme et de remplir également certaines fonctionnalités résumées par le langage, telles que la gestion de la mémoire (par exemple, les moteurs d’exécution pour Basic, LISP, Tcl, Ruby ).
Les limites entre les types de machines virtuelles ne sont pas bien définies. Par exemple, une machine virtuelle langage peut également utiliser la technique d'une machine virtuelle virtuelle ISA en compilant le programme en une sorte de ISAvirtuel _, puis en exécutant le code sur une machine virtuelle de cet ISA virtuel.
De nombreux VM conceptions, telles que FAISCEAU , dépassent les limites. Ils pourraient être classés dans les 3ème et 4ème catégories.
la source:
Je suppose que vous avez lu http://en.wikipedia.org/wiki/Virtual_machine - Sous cette terminologie, BEAM est une "machine virtuelle de processus", tout comme la JVM.