Що це за віртуальна машина BEAM (Erlang VM)?


115

З того, що я розумію, віртуальна машина підпадає на дві категорії або "система віртуальної машини", або "процес віртуальної машини". Мені це якось нечітко, де БЕЙ лежить. Чи є інший вид віртуальної машини, про який я не знаю?

Відповіді:


177

Erlang VM працює як один процес ОС. За замовчуванням він запускає один потік ОС на ядро, щоб досягти максимального використання машини. Кількість потоків і на яких ядрах вони запущені, можна встановити при запуску VM.

Процеси Erlang повністю реалізовані Erlang VM і не мають зв'язку ні з процесами ОС, ні з потоками ОС. Тож навіть якщо ви запускаєте систему Erlang з понад мільйон процесів, це все одно лише один процес ОС і одна нитка на ядро. Тому в цьому сенсі Erlang VM - це "віртуальна машина процесу", тоді як сама система Erlang дуже поводиться як ОС, а процеси Erlang мають дуже схожі властивості з процесами ОС, наприклад, ізоляцією. Насправді є Erlang VM, заснований на BEAM, який працює на голому металі і є насправді ОС, саме по собі, див. Erlang на Xen .

До речі, цілком можливо мати системи, що працюють на мільйонах процесів Erlang, і це фактично робиться в деяких продуктах, наприклад, WhatsApp .

Ми, безумовно, дуже багато думали про ОС, коли розробляли базове середовище Erlang.


1
@rvirding Це означає, що основна ОС нічого не знає про додатки / процеси, що працюють поверх Erlang VM?
coffeMug

7
@coffeMug Ні, з точки зору ОС, Erlang VM - це нормальний процес ОС, як і будь-який інший процес ОС. Як і в інших процесах ОС, він використовує ресурси, що надаються ОС, такі як пам'ять, пристрої вводу-виводу і т.д.
rvirding

1
Яка велика виграш у Erlang на Xen - це просто швидше?
jononomo

1
Чи можна було б створити середовище BEAM + OTP 'роботоподібне' за допомогою стандартних процесів та функцій ОС, таких як управління процесами (нерестовина / вбити / встановити обмеження) та IPC (труби / сокети)?
Рік Хемслі

3
@RikHemsley Так, це можливо, але тільки для дуже обмежених застосувань. Пам'ятайте, що в системах erlang 10-ти, 100-ти або навіть 1М процесів не є рідкістю, тому моделювання їх із процесами ОС не було б реалістичним.
rvirding

43

Віртуальна машина - це обчислювальна система. Кінцевою метою обчислювальної системи є виконання запрограмованої логіки. З цього погляду віртуальні машини можна класифікувати на 4 типи відповідно до рівня абстракції та обсягу емуляції:

Тип 1: Віртуальна машина архітектури повного набору інструкцій (ISA) забезпечує повну емуляцію ISA або віртуалізацію комп'ютерної системи. Гостьові операційні системи та програми можуть працювати на вершині віртуальної машини як фактичний комп'ютер (наприклад, VirtualBox, QEMU, XEN ).

Тип 2: Віртуальна машина бінарного інтерфейсу додатків (ABI) забезпечує емуляцію гості ABI процесу. Програми проти цього ABI можуть запускатись поряд з іншими процесами вроджених додатків ABI (наприклад, Iay-32 Execution Layer на Itanium, Transmeta's Code Morphing для емуляції X86, перекладальний шар Apple Rosetta для емуляції PowerPC ).

Тип 3: Віртуальна машина ISA Virtual забезпечує двигун виконання, щоб додатки, кодовані у віртуальній ISA, могли виконувати на ній. Віртуальна ISA зазвичай визначає високий рівень та обмежений обсяг семантики ISA, тому вона не вимагає від віртуальної машини емуляції повноцінної комп'ютерної системи (наприклад, JVM Sun Microsystem, Загальна мова виконання Microsoft, віртуальна машина Parrot Foundation Parrot).

Тип 4: Мовна віртуальна машина забезпечує двигун виконання, який виконує програми, виражені мовою гостя. Програми, як правило, представлені віртуальній машині у вихідній формі гостьової мови, не попередньо повністю скомпільовані в машинний код. Двигун виконання повинен інтерпретувати або перекладати програму, а також виконувати певні функції, які абстрагуються такою мовою, як управління пам'яттю (наприклад, двигуни виконання для Basic, Lisp, Tcl, Ruby ).

Межі між типами віртуальної машини не чіткі. Наприклад, мовна віртуальна машина також може використовувати техніку віртуальної віртуальної машини ISA, компілюючи програму у своєрідну віртуальну ISA, а потім виконавши код на віртуальній машині цього віртуального ISA.

Багато конструкцій VM, таких як BEAM , перетинають межі. Вони можуть бути вписані в 3-ю та 4-ту категорії.

джерело:

  1. Вікіпедія
  2. Вдосконалений дизайн та впровадження віртуальних машин; Xlao-Feng LI

Він порівняно новий, тому не має багато відгуків. Я це схвалив.
Ерік де Кортіс

Дякую за пояснення. Саме те, що я шукав.
nhm tanveer

10

Я припускаю, що ви читали http://en.wikipedia.org/wiki/Virtual_machine - згідно з цією термінологією BEAM - це "віртуальна машина процесу", подібно до JVM.


2
Процеси на системному рівні та процеси Ерланг не однакові. Процеси в термінології Ерланг - це фактично наземні процеси користувача, а сам VM - це єдиний процес на рівні операційної системи.
kjw0188

2
@ kjw0188 Я розумію, але я не бачу різниці між процесом ОС та процесом на рівні мови.
Ерік де Кортіс

1
@EricdesCourtis Докладніше про процеси Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker

1
@WardBekker Дякую за допомогу, яку я розумію в процесах Erlang. Я просто не був впевнений, у який тип категорій ВМ потрапив Ерланг.
Ерік де Кортіс

2
Я б насторожено ставився до категоризації категорій віртуальних машин. Вони, як правило, унікальні в тому, що роблять. І вони часто занадто різні, щоб вносити їх у конкретну категорію.
Я даю відповіді на решти
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.