Quel type de machine virtuelle est BEAM (la VM Erlang)?

115

D'après ce que je comprends, une machine virtuelle se divise en deux catégories: «machine virtuelle système» ou «machine virtuelle de processus». 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?

Eric des Courtis
la source

Réponses:

177

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.

rvirding
la source
1
@rvirding Cela signifie-t-il que le système d'exploitation sous-jacent ne sait rien des applications / processus s'exécutant sur Erlang VM?
coffeMug
7
@coffeMug Non, du point de vue du système d'exploitation, la VM Erlang est un processus normal du système d'exploitation, comme tout autre processus du système d'exploitation. Comme les autres processus du système d'exploitation, il utilise des ressources fournies par le système d'exploitation telles que la mémoire, les périphériques d'E / S, etc. Ainsi, tout ce qui concerne spécifiquement Erlang comme les processus / la tolérance aux pannes / les applications / etc. est géré dans le processus de la VM Erlang.
rvirding
1
Quelle est la grande victoire avec Erlang sur Xen - est-ce juste plus rapide?
jononomo
1
Serait-il possible de créer un environnement «fonctionnel» BEAM + OTP en utilisant des processus standard et des fonctionnalités du système d'exploitation telles que la gestion des processus (spawn / kill / set limites) et IPC (pipes / sockets)?
Rik Hemsley
3
@RikHemsley Oui, ce serait possible mais seulement pour des applications très limitées. N'oubliez pas qu'il n'est pas rare d'avoir des processus 10k, 100k ou même 1M dans les systèmes erlang, donc les modéliser avec des processus OS ne serait pas réaliste.
rvirding
43

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:

  1. Wikipédia
  2. Conception et mise en œuvre avancées de machines virtuelles; Xlao-Feng LI
Mahyar
la source
C'est relativement nouveau, c'est pourquoi il n'a pas beaucoup de votes positifs. Je l'ai voté.
Eric des Courtis
Merci pour l'explication. Exactement ce que je cherchais.
nhm tanveer
10

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.

RichardC
la source
2
Les processus au niveau du système et les processus Erlang ne sont pas les mêmes. Les processus de la terminologie Erlang sont en fait des processus utilisateur, et la machine virtuelle elle-même est un processus au niveau du système d'exploitation unique.
kjw0188
2
@ kjw0188 Je comprends mais je ne vois aucune distinction entre le processus du système d'exploitation et le processus au niveau de la langue.
Eric des Courtis
1
@EricdesCourtis Plus d'informations sur les processus Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker
1
@WardBekker Merci pour l'aide que je comprends des processus Erlang. Je n'étais tout simplement pas sûr du type de catégorie de VM auquel Erlang appartenait.
Eric des Courtis
2
Je me méfierais de trop catégoriser les machines virtuelles. Ils ont tendance à être uniques dans ce qu'ils font. Et ils sont souvent trop différents pour être classés dans une catégorie spécifique.
JE DONNE DES RÉPONSES CRAP