Que tipo de máquina virtual é BEAM (a Erlang VM)?

115

Pelo que entendi, uma máquina virtual se enquadra em duas categorias: "máquina virtual de sistema" ou "máquina virtual de processo". É meio confuso para mim onde BEAM está. Existe outro tipo de máquina virtual que não conheço?

Eric des Courtis
fonte

Respostas:

177

O Erlang VM é executado como um processo de sistema operacional. Por padrão, ele executa um thread do SO por núcleo para atingir a utilização máxima da máquina. O número de threads e em quais núcleos eles são executados pode ser definido quando a VM é iniciada.

Os processos Erlang são implementados inteiramente pela VM Erlang e não têm conexão com os processos do SO ou threads do SO. Portanto, mesmo se você estiver executando um sistema Erlang com mais de um milhão de processos, ele ainda será apenas um processo do sistema operacional e um thread por núcleo. Portanto, neste sentido, a VM Erlang é uma "máquina virtual de processo", enquanto o próprio sistema Erlang se comporta como um SO e os processos Erlang têm propriedades muito semelhantes aos processos do SO, por exemplo, isolamento. Na verdade, existe uma VM Erlang, baseada no BEAM, que funciona em bare metal e é, na verdade, um sistema operacional por si só, consulte Erlang no Xen .

Aliás, é perfeitamente possível ter sistemas rodando milhões de processos Erlang e isso é feito em alguns produtos, por exemplo, WhatsApp .

Definitivamente, estávamos pensando muito sobre os sistemas operacionais quando projetamos o ambiente básico Erlang.

RVirding
fonte
1
@rvirding Isso significa que o sistema operacional subjacente não sabe nada sobre os aplicativos / processos em execução no Erlang VM?
coffeMug
7
@coffeMug Não, do ponto de vista do SO, o Erlang VM é um processo normal do SO, como qualquer outro processo do SO. Como outros processos do sistema operacional, ele usa recursos fornecidos pelo sistema operacional, como memória, dispositivos de i / o, etc. Portanto, tudo especificamente Erlang, como processos / tolerância a falhas / aplicativos / etc, é tratado dentro do processo Erlang VM.
vôo de
1
Qual é a grande vitória com Erlang no Xen - é apenas mais rápido?
Jononomo de
1
Seria possível criar um ambiente 'semelhante' ao BEAM + OTP usando processos padrão e recursos do sistema operacional, como gerenciamento de processos (spawn / kill / set limits) e IPC (pipes / sockets)?
Rik Hemsley
3
@RikHemsley Sim, seria possível, mas apenas para aplicativos muito limitados. Lembre-se de ter 10k, 100k ou mesmo 1M de processos em sistemas erlang não é incomum, então modelá-los com processos de SO não seria realista.
rodando
43

A máquina virtual é um sistema de computação. O objetivo final de um sistema de computação é executar a lógica programada. A partir dessa perspectiva, as máquinas virtuais podem ser categorizadas em 4 tipos de acordo com o nível de abstração e o escopo da emulação:

Tipo 1: A máquina virtual ISA (Full Instruction Set Architecture) fornece emulação ou virtualização ISA de um sistema de computador completo. Os sistemas operacionais e aplicativos convidados podem ser executados na parte superior da máquina virtual como um computador real (por exemplo, VirtualBox, QEMU, XEN ).

Tipo 2: A máquina virtual de interface binária de aplicativo (ABI) fornece uma emulação ABI de processo convidado. Os aplicativos contra essa ABI podem ser executados no processo lado a lado com outros processos de aplicativos ABI nativos (por exemplo, IA-32 Execution Layer da Intel no Itanium, Code Morphing da Transmeta para emulação X86, camada de tradução Rosetta da Apple para emulação PowerPC ).

Tipo 3: a máquina virtual ISA virtual fornece um mecanismo de tempo de execução para que os aplicativos codificados no ISA virtual possam ser executados nele. O ISA virtual geralmente define um alto nível e escopo limitado da semântica do ISA, portanto, não requer que a máquina virtual emule um sistema de computador completo (por exemplo, JVM da Sun Microsystem, Common Language Runtime da Microsoft, máquina virtual Parrot da Parrot Foundation).

Tipo 4: Linguagem Virtual Machine fornece um mecanismo de tempo de execução que executa programas expressos em uma linguagem de convidado. Os programas são geralmente apresentados à máquina virtual na forma de código-fonte da linguagem hóspede, sem serem totalmente compilados em código de máquina de antemão. O mecanismo de tempo de execução precisa interpretar ou traduzir o programa e também cumprir certas funcionalidades que são abstraídas pela linguagem, como gerenciamento de memória (por exemplo, os motores de tempo de execução para Basic, Lisp, Tcl, Ruby ).

Os limites entre os tipos de máquina virtual não são claros. Por exemplo, uma máquina virtual de linguagem também pode empregar a técnica de uma máquina virtual ISA virtual, compilando o programa em uma espécie de ISA virtual e, em seguida, executando o código em uma máquina virtual desse ISA virtual.

Muitos designs de VM, como BEAM , ultrapassam os limites. Eles podem ser enquadrados nas 3ª e 4ª categorias.

fonte:

  1. Wikipedia
  2. Projeto Avançado e Implementação de Máquinas Virtuais; Xlao-Feng LI
Mahyar
fonte
É relativamente novo, por isso não tem muitos votos positivos. Eu votei a favor.
Eric des Courtis
Obrigada pelo esclarecimento. Exatamente o que eu estava procurando.
nhm tanveer
10

Presumo que você esteja lendo http://en.wikipedia.org/wiki/Virtual_machine - sob essa terminologia, BEAM é uma "máquina virtual de processo", assim como a JVM.

RichardC
fonte
2
Os processos de nível de sistema e os processos Erlang não são os mesmos. Os processos na terminologia Erlang são, na verdade, processos de terreno do usuário, e a própria VM é um processo de nível de sistema operacional único.
kjw0188
2
@ kjw0188 Eu entendo, mas não vejo nenhuma distinção entre o processo do sistema operacional e o processo de nível de linguagem.
Eric des Courtis
1
@EricdesCourtis Mais informações sobre os processos Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker
1
@WardBekker Obrigado pela ajuda, eu entendo os processos Erlang. Eu só não tinha certeza de que tipo de categoria VM Erlang caiu.
Eric des Courtis
2
Eu teria medo de categorizar demais as máquinas virtuais. Eles tendem a ser únicos no que fazem. E muitas vezes são muito diferentes para serem colocados em uma categoria específica.
EU DEU RESPOSTAS DE CRAP