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.