Что это за виртуальная машина BEAM (Erlang VM)?

115

Насколько я понимаю, виртуальная машина делится на две категории: «системная виртуальная машина» или «виртуальная машина процесса». Мне непонятно, где находится BEAM. Есть ли еще одна виртуальная машина, о которой я не знаю?

Эрик де Курти
источник

Ответы:

177

Виртуальная машина Erlang работает как один процесс ОС. По умолчанию он запускает один поток ОС на каждое ядро ​​для достижения максимального использования машины. Количество потоков и ядра, на которых они работают, можно установить при запуске виртуальной машины.

Процессы Erlang полностью реализуются виртуальной машиной Erlang и не связаны ни с процессами ОС, ни с потоками ОС. Таким образом, даже если вы используете систему Erlang, состоящую из более чем миллиона процессов, это по-прежнему только один процесс ОС и один поток на ядро. Таким образом, в этом смысле Erlang VM - это «виртуальная машина процесса», в то время как сама система Erlang очень похожа на ОС, а процессы Erlang имеют очень похожие свойства с процессами ОС, например изоляцию. На самом деле существует виртуальная машина Erlang, основанная на BEAM, которая работает на «голом железе» и фактически является самостоятельной ОС, см. Erlang на Xen .

Кстати, вполне возможно иметь системы, в которых выполняются миллионы процессов Erlang, и это действительно делается в некоторых продуктах, например WhatsApp .

Мы определенно много думали об операционных системах, когда проектировали базовую среду Erlang.

rvirding
источник
1
@rvirding Означает ли это, что базовая ОС ничего не знает о приложениях / процессах, выполняемых поверх виртуальной машины Erlang?
coffeMug
7
@coffeMug Нет, с точки зрения ОС Erlang VM - это обычный процесс ОС, как и любой другой процесс ОС. Как и другие процессы ОС, он использует ресурсы, предоставляемые ОС, такие как память, устройства ввода-вывода и т. Д. Таким образом, все, что касается Erlang, например, процессы / отказоустойчивость / приложения / и т.д., обрабатывается внутри процесса Erlang VM.
rvirding
1
В чем преимущество Erlang на Xen - он просто быстрее?
jononomo
1
Можно ли создать «рабочую» среду BEAM + OTP, используя стандартные процессы и функции ОС, такие как управление процессами (создание / уничтожение / установка ограничений) и IPC (каналы / сокеты)?
Рик Хемсли
3
@RikHemsley Да, это возможно, но только для очень ограниченных приложений. Помните, что наличие 10k, 100k или даже 1M процессов в системах erlang не является редкостью, поэтому моделирование их с помощью процессов ОС было бы нереалистично.
rvirding
43

Виртуальная машина - это вычислительная система. Конечная цель вычислительной системы - выполнение запрограммированной логики. С этой точки зрения виртуальные машины можно разделить на 4 типа в зависимости от уровня абстракции и объема эмуляции:

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

Тип 2: виртуальная машина с двоичным интерфейсом приложений (ABI) обеспечивает эмуляцию ABI гостевого процесса. Приложения для этого ABI могут работать в процессе бок о бок с другими процессами собственных приложений ABI (например, уровень выполнения Intel IA-32 на Itanium, преобразование кода Transmeta для эмуляции X86, уровень перевода Apple Rosetta для эмуляции PowerPC ).

Тип 3: Виртуальная машина ISA обеспечивает механизм выполнения, так что приложения, закодированные в виртуальной ISA, могут выполняться на нем. Виртуальный ISA обычно определяет высокий уровень и ограниченный объем семантики ISA, поэтому он не требует, чтобы виртуальная машина имитировала полную компьютерную систему (например, JVM Sun Microsystem, Microsoft Common Language Runtime, виртуальную машину Parrot от Parrot Foundation).

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

Границы между типами виртуальных машин нечеткие. Например, языковая виртуальная машина может также использовать технику виртуальной виртуальной машины ISA путем компиляции программы в своего рода виртуальный ISA и последующего выполнения кода на виртуальной машине этого виртуального ISA.

Многие проекты виртуальных машин, такие как BEAM , выходят за границы. Они могут входить как в 3-ю, так и в 4-ю категории.

источник:

  1. Википедия
  2. Расширенный дизайн и внедрение виртуальных машин; Кслао-Фэн Ли
Махьяр
источник
Он относительно новый, поэтому у него не так много положительных отзывов. Я поддержал это.
Эрик де Курти
Спасибо за объяснение. Именно то, что я искал.
nhm tanveer
10

Я предполагаю, что вы читали http://en.wikipedia.org/wiki/Virtual_machine - по этой терминологии BEAM - это «виртуальная машина процесса», как и JVM.

RichardC
источник
2
Процессы системного уровня и процессы Erlang - не одно и то же. Процессы в терминологии Erlang на самом деле являются пользовательскими процессами, а сама виртуальная машина - это процесс уровня единой операционной системы.
kjw0188
2
@ kjw0188 Я понимаю, но не вижу разницы между процессом ОС и процессом языкового уровня.
Эрик де Курти
1
@EricdesCourtis Дополнительная информация о процессах Erlang: stackoverflow.com/questions/2708033/…
Уорд Беккер
1
@WardBekker Спасибо за помощь. Я понимаю процессы Erlang. Я просто не знал, к какой категории виртуальных машин относится Erlang.
Эрик де Курти
2
Я бы с осторожностью относился к категоризации виртуальных машин. Они, как правило, уникальны в том, что делают. И они часто слишком разные, чтобы отнести их к определенной категории.
ДАЮ ДЕРЬМЫ ОТВЕТЫ