Jaką maszyną wirtualną jest BEAM (Erlang VM)?

115

Z tego, co rozumiem, maszyna wirtualna dzieli się na dwie kategorie: „maszyna wirtualna systemu” lub „maszyna wirtualna procesu”. To dla mnie trochę niejasne, gdzie leży BEAM. Czy istnieje inny rodzaj maszyny wirtualnej, o której nie wiem?

Eric des Courtis
źródło

Odpowiedzi:

177

Maszyna wirtualna Erlang działa jako jeden proces systemu operacyjnego. Domyślnie uruchamia jeden wątek systemu operacyjnego na rdzeń, aby osiągnąć maksymalne wykorzystanie maszyny. Liczbę wątków i rdzenie, na których działają, można ustawić podczas uruchamiania maszyny wirtualnej.

Procesy Erlang są realizowane w całości przez maszynę wirtualną Erlang i nie mają połączenia z procesami systemu operacyjnego ani wątkami systemu operacyjnego. Więc nawet jeśli używasz systemu Erlang z ponad milionem procesów, nadal jest to tylko jeden proces systemu operacyjnego i jeden wątek na rdzeń. W tym sensie maszyna wirtualna Erlang jest „procesową maszyną wirtualną”, podczas gdy sam system Erlang zachowuje się bardzo podobnie jak system operacyjny, a procesy Erlang mają bardzo podobne właściwości do procesów systemu operacyjnego, na przykład izolację. W rzeczywistości istnieje maszyna wirtualna Erlang oparta na BEAM, która działa na czystym metalu i jest w rzeczywistości własnym systemem operacyjnym, patrz Erlang na Xen .

Nawiasem mówiąc, jest całkowicie możliwe, że systemy obsługują miliony procesów Erlanga i tak się dzieje w niektórych produktach, na przykład WhatsApp .

Na pewno dużo myśleliśmy o systemach operacyjnych, gdy projektowaliśmy podstawowe środowisko Erlang.

rvirding
źródło
1
@rvirding Czy to oznacza, że ​​bazowy system operacyjny nie wie nic o aplikacjach / procesach działających na maszynie wirtualnej Erlang?
coffeMug
7
@coffeMug Nie, z punktu widzenia systemu operacyjnego maszyna wirtualna Erlang jest normalnym procesem systemu operacyjnego, podobnie jak każdy inny proces systemu operacyjnego. Podobnie jak inne procesy systemu operacyjnego, wykorzystuje zasoby dostarczane przez system operacyjny, takie jak pamięć, urządzenia we / wy, itp. Zatem wszystko, co dotyczy Erlanga, takie jak procesy / odporność na błędy / aplikacje / itp., Jest obsługiwane wewnątrz procesu Erlang VM.
rvirding
1
Jaka jest wielka wygrana z Erlangiem na Xen - czy jest po prostu szybsza?
jononomo
1
Czy byłoby możliwe stworzenie podobnego do pracy środowiska BEAM + OTP przy użyciu standardowych procesów i funkcji systemu operacyjnego, takich jak zarządzanie procesami (tworzenie / zabijanie / ustawianie limitów) i IPC (potoki / gniazda)?
Rik Hemsley
3
@RikHemsley Tak, byłoby to możliwe, ale tylko w bardzo ograniczonych zastosowaniach. Pamiętaj, że posiadanie 10k, 100k lub nawet 1M procesów w systemach erlang nie jest rzadkością, więc modelowanie ich za pomocą procesów OS nie byłoby realistyczne.
występował
43

Maszyna wirtualna to system komputerowy. Ostatecznym celem systemu komputerowego jest wykonanie zaprogramowanej logiki. Z tego punktu widzenia maszyny wirtualne można podzielić na 4 typy w zależności od poziomu abstrakcji i zakresu emulacji:

Typ 1: Maszyna wirtualna z pełną architekturą zestawu instrukcji (ISA) zapewnia emulację lub wirtualizację ISA pełnego systemu komputerowego. Systemy operacyjne i aplikacje gościa mogą działać na górze maszyny wirtualnej jako rzeczywisty komputer (np. VirtualBox, QEMU, XEN ).

Typ 2: Maszyna wirtualna interfejsu binarnego aplikacji (ABI) zapewnia emulację ABI procesu gościa. Aplikacje przeciwko temu ABI mogą działać równolegle z innymi procesami natywnych aplikacji ABI (np. Intel IA-32 Execution Layer na Itanium, Transmeta's Code Morphing dla emulacji X86, warstwa translacyjna Rosetta firmy Apple dla emulacji PowerPC ).

Typ 3: Wirtualna maszyna wirtualna ISA zapewnia silnik wykonawczy, dzięki czemu aplikacje zakodowane w wirtualnym ISA mogą być na niej wykonywane. Wirtualne ISA zwykle definiuje wysoki poziom i ograniczony zakres semantyki ISA, więc nie wymaga maszyny wirtualnej do emulacji pełnego systemu komputerowego (np . JVM Sun Microsystem, Microsoft Common Language Runtime, maszyna wirtualna Parrot Foundation's Parrot).

Typ 4: Język Maszyna wirtualna zapewnia aparat wykonawczy, który wykonuje programy wyrażone w języku gościa. Programy są zwykle prezentowane na maszynie wirtualnej w postaci kodu źródłowego języka gościa, bez uprzedniej pełnej kompilacji do kodu maszynowego. Silnik wykonawczy musi zinterpretować lub przetłumaczyć program, a także spełniać pewne funkcje, które są wyabstrahowane przez język, takie jak zarządzanie pamięcią (np. Silniki wykonawcze dla Basic, Lisp, Tcl, Ruby ).

Granice między typami maszyn wirtualnych nie są wyraźne. Na przykład maszyna wirtualna języka może również wykorzystywać technikę wirtualnej maszyny wirtualnej ISA, kompilując program w rodzaj wirtualnego ISA, a następnie wykonując kod na maszynie wirtualnej tego wirtualnego ISA.

Wiele projektów maszyn wirtualnych, takich jak BEAM , przekracza granice. Mogą pasować zarówno do trzeciej, jak i czwartej kategorii.

źródło:

  1. Wikipedia
  2. Zaawansowane projektowanie i wdrażanie maszyn wirtualnych; Xlao-Feng LI
Mahyar
źródło
Jest stosunkowo nowy, dlatego nie ma wielu głosów za. Głosowałem za tym.
Eric des Courtis
Dziękuję za wyjaśnienie. Dokładnie to, czego szukałem.
nhm tanveer
10

Zakładam, że czytałeś http://en.wikipedia.org/wiki/Virtual_machine - w tej terminologii BEAM jest „procesową maszyną wirtualną”, podobnie jak JVM.

Richard C.
źródło
2
Procesy na poziomie systemu i procesy Erlanga nie są tym samym. Procesy w terminologii Erlang są w rzeczywistości procesami użytkownika, a sama maszyna wirtualna jest procesem na poziomie pojedynczego systemu operacyjnego.
kjw0188
2
@ kjw0188 Rozumiem, ale nie widzę żadnej różnicy między procesem systemu operacyjnego a procesem na poziomie języka.
Eric des Courtis
1
@EricdesCourtis Więcej informacji o procesach Erlanga: stackoverflow.com/questions/2708033/…
Ward Bekker
1
@WardBekker Dzięki za pomoc w zrozumieniu procesów Erlang. Po prostu nie byłem pewien, do jakiego typu kategorii maszyn wirtualnych wpadł Erlang.
Eric des Courtis
2
Nie chciałbym zbytnio kategoryzować maszyn wirtualnych. Zwykle są wyjątkowi w tym, co robią. I często są zbyt różne, aby umieścić je w określonej kategorii.
DAM ODPOWIEDZI NA CRAP