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?
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?
Respostas:
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.
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:
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.