BEAM (Erlang VM)은 어떤 종류의 가상 머신입니까?


115

내가 이해 한 바에 따르면 가상 머신은 "시스템 가상 머신"또는 "프로세스 가상 머신"의 두 가지 범주로 나뉩니다. BEAM이있는 곳은 저에게 다소 모호합니다. 내가 알지 못하는 다른 종류의 가상 머신이 있습니까?

답변:


177

Erlang VM은 하나의 OS 프로세스로 실행됩니다. 기본적으로 시스템의 최대 활용도를 달성하기 위해 코어 당 하나의 OS 스레드를 실행합니다. VM이 시작될 때 스레드 수와 실행되는 코어를 설정할 수 있습니다.

Erlang 프로세스는 전적으로 Erlang VM에 의해 구현 되며 OS 프로세스 또는 OS 스레드에 연결되지 않습니다. 따라서 100 만 개가 넘는 프로세스의 Erlang 시스템을 실행하더라도 여전히 OS 프로세스 하나와 코어 당 스레드 하나입니다. 따라서 이러한 의미에서 Erlang VM은 "프로세스 가상 머신"인 반면 Erlang 시스템 자체는 OS처럼 작동하며 Erlang 프로세스는 OS 프로세스와 매우 유사한 속성 (예 : 격리)을 갖습니다. 베어 메탈에서 실행되고 실제로 자체적으로 OS 인 BEAM을 기반으로하는 Erlang VM이 있습니다. Erlang on Xen을 참조하세요 .

그건 그렇고, 시스템이 수백만 개의 Erlang 프로세스를 실행하는 것은 완벽하게 가능하며 실제로 WhatsApp 과 같은 일부 제품에서 수행됩니다 .

우리는 기본적인 Erlang 환경을 설계 할 때 OS에 대해 많이 생각했습니다.


1
@rvirding 이것은 기본 OS가 Erlang VM 위에서 실행되는 응용 프로그램 / 프로세스에 대해 아무것도 알지 못한다는 것을 의미합니까?
— coffeMug

7
@coffeMug 아니요, OS 관점에서 Erlang VM은 다른 OS 프로세스와 마찬가지로 일반적인 OS 프로세스입니다. 다른 OS 프로세스와 마찬가지로 메모리, i / o 장치 등과 같이 OS에서 제공하는 리소스를 사용합니다. 따라서 프로세스 / 내결함성 / 응용 프로그램 / etc와 같은 모든 Erlang은 Erlang VM 프로세스 내에서 처리됩니다.
— rvirding

1
Xen에서 Erlang의 큰 승리는 무엇입니까-더 빠를까요?
— jononomo

1
프로세스 관리 (스폰 / 킬 / 설정 제한) 및 IPC (파이프 / 소켓)와 같은 표준 프로세스 및 OS 기능을 사용하여 BEAM + OTP 'workalike'환경을 만들 수 있습니까?
— Rik Hemsley

3
@RikHemsley 예, 가능하지만 매우 제한된 응용 프로그램에서만 가능합니다. erlang 시스템에 10k, 100k 또는 1M 프로세스를 갖는 것은 드문 일이 아니므로 OS 프로세스로 모델링하는 것은 현실적이지 않을 것입니다.
— rvirding

43

가상 머신은 컴퓨팅 시스템입니다. 컴퓨팅 시스템의 궁극적 인 목표는 프로그래밍 된 논리를 실행하는 것입니다. 이러한 관점에서 가상 머신 은 추상화 수준과 에뮬레이션 범위에 따라 4 가지 유형 으로 분류 할 수 있습니다 .

유형 1 : ISA (Full Instruction Set Architecture) 가상 머신 은 전체 컴퓨터 시스템의 ISA 에뮬레이션 또는 가상화를 제공합니다. 게스트 운영 체제 및 응용 프로그램은 가상 컴퓨터의 상단에서 실제 컴퓨터 (예 : VirtualBox, QEMU, XEN )로 실행될 수 있습니다 .

유형 2 : ABI (Application Binary Interface) 가상 머신 은 게스트 프로세스 ABI 에뮬레이션을 제공합니다. 해당 ABI에 대한 애플리케이션은 네이티브 ABI 애플리케이션의 다른 프로세스 (예 : Itanium의 Intel IA-32 Execution Layer, X86 에뮬레이션을위한 Transmeta의 코드 모핑, PowerPC 에뮬레이션을위한 Apple의 Rosetta 번역 레이어) 와 함께 프로세스에서 나란히 실행될 수 있습니다 .

유형 3 : 가상 ISA 가상 머신 은 가상 ISA에서 코딩 된 애플리케이션이 실행될 수 있도록 런타임 엔진을 제공합니다. 가상 ISA는 일반적으로 높은 수준의 제한된 범위의 ISA 의미 체계를 정의하므로 전체 컴퓨터 시스템 (예 : Sun Microsystem의 JVM, Microsoft의 공용 언어 런타임, Parrot Foundation의 Parrot 가상 컴퓨터) 을 에뮬레이트하는 데 가상 컴퓨터가 필요하지 않습니다 .

유형 4 : 언어 가상 머신 은 게스트 언어로 표현 된 프로그램을 실행하는 런타임 엔진을 제공합니다. 프로그램은 일반적으로 사전에 기계 코드로 완전히 컴파일되지 않고 게스트 언어의 소스 형태로 가상 컴퓨터에 제공됩니다. 런타임 엔진은 프로그램을 해석하거나 번역해야하며 메모리 관리와 같은 언어로 추상화 된 특정 기능 (예 : Basic, Lisp, Tcl, Ruby 용 런타임 엔진 )을 수행해야합니다.

가상 머신 유형 간의 경계는 명확하지 않습니다. 예를 들어, 언어 가상 머신은 프로그램을 일종의 가상 ISA로 컴파일 한 다음 해당 가상 ISA의 가상 머신에서 코드를 실행하여 가상 ISA 가상 머신의 기술을 사용할 수도 있습니다.

BEAM 과 같은 많은 VM 설계 가 경계를 넘습니다. 세 번째 및 네 번째 범주에 모두 적합 할 수 있습니다.

출처:

  1. 위키 백과
  2. 가상 머신의 고급 설계 및 구현; Xlao-Feng LI

상대적으로 새로운 것이기 때문에 많은 찬성 투표가 없습니다. 나는 그것을 찬성했다.
— Eric des Courtis

설명 해주셔서 감사합니다. 내가 찾던 바로 그것.
— nhm tanveer

10

나는 당신이 http://en.wikipedia.org/wiki/Virtual_machine을 읽었다 고 가정합니다 -그 용어로 BEAM은 JVM과 같은 "프로세스 가상 머신"입니다.


2
시스템 수준 프로세스와 Erlang 프로세스는 동일하지 않습니다. Erlang 용어의 프로세스는 실제로 사용자 토지 프로세스이며 VM 자체는 단일 운영 체제 수준 프로세스입니다.
— kjw0188

2
@ kjw0188 이해하지만 OS 프로세스와 언어 수준 프로세스 사이에 차이가 없습니다.
— Eric des Courtis

1
@EricdesCourtis Erlang 프로세스에 대한 자세한 배경 정보 : stackoverflow.com/questions/2708033/…
— Ward Bekker

1
@WardBekker Erlang 프로세스를 이해하는 데 도움을 주셔서 감사합니다. Erlang이 어떤 유형의 VM 범주에 속하는지 잘 모르겠습니다.
— Eric des Courtis 2013 년

2
나는 가상 머신을 너무 많이 분류하는 것을 조심할 것입니다. 그들은 자신이하는 일에있어서 독특한 경향이 있습니다. 그리고 그들은 종종 너무 다르기 때문에 특정 카테고리에 넣을 수 없습니다.
— I GIVE CRAP ANSWERS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.