La VM Erlang fonctionne comme un seul processus OS. Par défaut, il exécute un thread du système d'exploitation par cœur pour atteindre une utilisation maximale de la machine. Le nombre de threads et les cœurs sur lesquels ils s'exécutent peuvent être définis au démarrage de la machine virtuelle.
Les processus Erlang sont entièrement implémentés par la VM Erlang et n'ont aucune connexion aux processus du système d'exploitation ou aux threads du système d'exploitation. Ainsi, même si vous exécutez un système Erlang de plus d'un million de processus, il ne s'agit toujours que d'un seul processus OS et d'un thread par cœur. Donc, en ce sens, la VM Erlang est une "machine virtuelle de processus" alors que le système Erlang lui-même se comporte très bien comme un OS et les processus Erlang ont des propriétés très similaires aux processus OS, par exemple l'isolation. Il existe en fait une VM Erlang, basée sur le BEAM, qui fonctionne sur du métal nu et qui est en fait un OS à part entière, voir
Erlang sur Xen .
À propos, il est parfaitement possible d'avoir des systèmes exécutant des millions de processus Erlang et cela se fait en fait dans certains produits, par exemple WhatsApp .
Nous pensions vraiment 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. De ce point de vue, les machines virtuelles peuvent être classées en 4 types selon le niveau d'abstraction et la portée de l'émulation:
Type 1: la machine virtuelle ISA (Full Instruction Set Architecture) fournit l'émulation ou la virtualisation ISA d'un système informatique complet. Les systèmes d'exploitation et 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: la machine virtuelle ABI (Application Binary Interface) fournit une émulation ABI de processus invité. Les applications contre cet ABI peuvent s'exécuter dans le processus côte à côte avec d'autres processus d'applications ABI natives (par exemple, la couche d'exécution IA-32 d'Intel sur Itanium, le code Morphing de Transmeta pour l'émulation X86, la couche de traduction Rosetta d'Apple pour l'émulation PowerPC ).
Type 3: la machine virtuelle ISA virtuelle fournit un moteur d'exécution afin que les applications codées dans l'ISA virtuel puissent s'exécuter dessus. Virtual ISA définit généralement un niveau élevé et une portée limitée de la sémantique ISA, il ne nécessite donc pas que la machine virtuelle émule un système informatique complet (par exemple, la JVM de Sun Microsystem, le Common Language Runtime de Microsoft, la machine virtuelle Parrot de Parrot Foundation).
Type 4: Language Virtual Machine fournit un moteur d'exécution qui exécute des programmes exprimés dans un langage invité. Les programmes sont généralement présentés à la machine virtuelle sous la forme source du langage invité, sans avoir été préalablement compilés en code machine. Le moteur d'exécution a besoin d'interpréter ou de traduire le programme et également de remplir certaines fonctionnalités qui sont abstraites par le langage telles que la gestion de la mémoire (par exemple, les moteurs d'exécution pour Basic, Lisp, Tcl, Ruby ).
Les frontières entre les types de machines virtuelles ne sont pas clairement définies. Par exemple, une machine virtuelle de langage peut également utiliser la technique d'une machine virtuelle ISA virtuelle en compilant le programme dans une sorte d'ISA virtuel, puis en exécutant le code sur une machine virtuelle de cet ISA virtuel.
De nombreuses conceptions de VM, telles que BEAM , franchissent les limites. Ils pourraient être classés dans les 3ème et 4ème catégories.
la source:
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.
la source