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?
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?
Odpowiedzi:
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.
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:
Zakładam, że czytałeś http://en.wikipedia.org/wiki/Virtual_machine - w tej terminologii BEAM jest „procesową maszyną wirtualną”, podobnie jak JVM.