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

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


person Eric des Courtis    schedule 27.05.2013    source источник


Ответы (3)


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

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

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

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

person rvirding    schedule 27.05.2013
comment
@rvirding Означает ли это, что базовая ОС ничего не знает о приложениях / процессах, выполняемых поверх виртуальной машины Erlang? - person coffeMug; 19.10.2013
comment
@coffeMug Нет, с точки зрения ОС Erlang VM - это обычный процесс ОС, как и любой другой процесс ОС. Как и другие процессы ОС, он использует ресурсы, предоставляемые ОС, такие как память, устройства ввода-вывода и т. Д. Таким образом, все, что связано с Erlang, например процессы / отказоустойчивость / приложения / и т. Д., Обрабатывается внутри процесса Erlang VM. - person rvirding; 20.10.2013
comment
В чем большой успех Erlang на Xen - он просто быстрее? - person jononomo; 17.02.2017
comment
Можно ли создать «рабочую» среду BEAM + OTP, используя стандартные процессы и функции ОС, такие как управление процессами (создание / уничтожение / установка ограничений) и IPC (каналы / сокеты)? - person Rik Hemsley; 02.03.2017
comment
@RikHemsley Да, это возможно, но только для очень ограниченных приложений. Помните, что наличие 10 тыс., 100 тыс. Или даже 1 млн процессов в системах erlang не является редкостью, поэтому моделирование их с помощью процессов ОС было бы нереалистично. - person rvirding; 10.05.2017
comment
Отличный ответ - однако, IMHO то, что он описывает, не является виртуальной машиной, а просто интерпретатором. - person peterh; 07.06.2018

Виртуальная машина - это вычислительная система. Конечная цель вычислительной системы - выполнение запрограммированной логики. С этой точки зрения виртуальные машины можно разделить на 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. Расширенный дизайн и внедрение виртуальных машин; Кслао-Фэн Ли
person Mahyar    schedule 03.08.2017
comment
Он относительно новый, поэтому у него не так много положительных отзывов. Я поддержал это. - person Eric des Courtis; 26.09.2017
comment
Спасибо за объяснение. Именно то, что я искал. - person nhm tanveer; 18.03.2019

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

person RichardC    schedule 27.05.2013
comment
Что меня смущает, так это то, что он утверждает, что это виртуальная машина процесса runs as a normal application inside a host OS and supports a single process. Но в виртуальной машине Erlang есть много процессов, выполняемых внутри нее, что не соответствует описанию. - person Eric des Courtis; 28.05.2013
comment
Процессы системного уровня и процессы Erlang - это не одно и то же. Процессы в терминологии Erlang на самом деле являются процессами на уровне пользователя, а сама виртуальная машина представляет собой процесс уровня единой операционной системы. - person kjw0188; 28.05.2013
comment
С одним процессом они, вероятно, используют определение процесса в Unix. Процесс Erlang - это другой тип процесса. - person Ward Bekker; 28.05.2013
comment
@ kjw0188 Я понимаю, но не вижу разницы между процессом ОС и процессом языкового уровня. - person Eric des Courtis; 28.05.2013
comment
@WardBekker Возможно, вы правы, но нигде это не указано. - person Eric des Courtis; 28.05.2013
comment
@EricdesCourtis Дополнительные сведения о процессах Erlang: stackoverflow.com/questions/2708033/ - person Ward Bekker; 28.05.2013
comment
@WardBekker Спасибо за помощь. Я понимаю процессы Erlang. Я просто не знал, к какой категории виртуальных машин относится Erlang. - person Eric des Courtis; 28.05.2013
comment
Я бы опасался слишком сильно категоризировать виртуальные машины. Они, как правило, уникальны в том, что делают. И они часто слишком разные, чтобы относить их к определенной категории. - person I GIVE CRAP ANSWERS; 29.05.2013
comment
@IGIVECRAPANSWERS Вы правы, но настоящий вопрос в том, почему это делает Википедия? - person Eric des Courtis; 29.05.2013
comment
@EricdesCourtis Wikipedia делает это, потому что имя сильно перегружено, как и многие другие вещи в компьютерных науках. Когда люди говорят о виртуальных машинах, это все равно, что говорить об объектной ориентации: это означает разные вещи для разных людей. Итак, вам нужна дальнейшая доработка, чтобы справиться с этим. - person I GIVE CRAP ANSWERS; 30.05.2013
comment
@IGIVECRAPANSWERS Мне кажется, люди не понимают, о чем говорят. Но да, вы правы. - person Eric des Courtis; 30.05.2013