Jenis mesin virtual apa BEAM (VM Erlang)?

115

Dari apa yang saya pahami, mesin virtual terbagi dalam dua kategori baik "mesin virtual sistem" atau "mesin virtual proses". Agak kabur bagi saya di mana BEAM berada. Apakah ada jenis mesin virtual lain yang tidak saya ketahui?

Eric des Courtis
sumber

Jawaban:

177

VM Erlang berjalan sebagai satu proses OS. Secara default, ini menjalankan satu utas OS per inti untuk mencapai pemanfaatan mesin secara maksimal. Jumlah utas dan inti mana yang dijalankan dapat diatur saat VM dimulai.

Proses Erlang diimplementasikan sepenuhnya oleh VM Erlang dan tidak memiliki koneksi ke proses OS atau thread OS. Jadi, meskipun Anda menjalankan sistem Erlang dengan lebih dari satu juta proses, itu masih hanya satu proses OS dan satu utas per inti. Jadi dalam pengertian ini VM Erlang adalah "mesin virtual proses" sedangkan sistem Erlang sendiri berperilaku seperti OS dan proses Erlang memiliki properti yang sangat mirip dengan proses OS, misalnya isolasi. Sebenarnya ada VM Erlang, berdasarkan BEAM, yang berjalan di atas bare metal dan pada kenyataannya merupakan OS dengan sendirinya, lihat Erlang di Xen .

Ngomong-ngomong, sangat mungkin memiliki sistem yang menjalankan jutaan proses Erlang dan ini sebenarnya dilakukan di beberapa produk, misalnya WhatsApp .

Kami benar-benar memikirkan banyak tentang OS saat kami merancang lingkungan dasar Erlang.

rvirding
sumber
1
@rvirding Apakah ini berarti bahwa OS yang mendasarinya tidak tahu apa-apa tentang aplikasi / proses yang berjalan di atas VM Erlang?
coffeMug
7
@coffeMug Tidak, dari sudut pandang OS, VM Erlang adalah proses OS normal seperti proses OS lainnya. Seperti proses OS lainnya, ia menggunakan sumber daya yang disediakan oleh OS seperti memori, perangkat i / o, dll. Jadi segala sesuatu yang secara khusus Erlang seperti proses / toleransi kesalahan / aplikasi / dll ditangani di dalam proses VM Erlang.
rvirding
1
Apa kemenangan besar dengan Erlang di Xen - apakah lebih cepat?
jononomo
1
Apakah mungkin untuk membuat lingkungan 'workalike' BEAM + OTP menggunakan proses standar dan fitur OS seperti manajemen proses (spawn / kill / set limit) dan IPC (pipe / sockets)?
Rik Hemsley
3
@RikHemsley Ya, itu mungkin saja tetapi hanya untuk aplikasi yang sangat terbatas. Ingat memiliki 10k, 100k atau bahkan 1M proses dalam sistem erlang tidak jarang sehingga memodelkannya dengan proses OS tidak akan realistis.
rvirding
43

Mesin virtual adalah sistem komputasi. Tujuan akhir dari sistem komputasi adalah untuk menjalankan logika terprogram. Dari perspektif ini, mesin virtual dapat dikategorikan menjadi 4 jenis menurut tingkat abstraksi dan ruang lingkup emulasi:

Tipe 1: Mesin virtual Full Instruction Set Architecture (ISA) menyediakan emulasi atau virtualisasi ISA sistem komputer lengkap. Sistem operasi dan aplikasi tamu dapat berjalan di atas mesin virtual sebagai komputer sebenarnya (misalnya, VirtualBox, QEMU, XEN ).

Tipe 2: Mesin virtual Application Binary Interface (ABI) menyediakan proses tamu emulasi ABI. Aplikasi terhadap ABI tersebut dapat berjalan dalam proses berdampingan dengan proses lain dari aplikasi ABI asli (misalnya, Lapisan Eksekusi IA-32 Intel pada Itanium, Morphing Kode Transmeta untuk emulasi X86, lapisan terjemahan Rosetta Apple untuk emulasi PowerPC ).

Tipe 3: Mesin virtual ISA virtual menyediakan mesin runtime sehingga aplikasi yang dikodekan dalam ISA virtual dapat dijalankan di atasnya. ISA virtual biasanya mendefinisikan semantik ISA tingkat tinggi dan cakupan terbatas, sehingga tidak memerlukan mesin virtual untuk meniru sistem komputer lengkap (misalnya, JVM Sun Microsystem, Microsoft's Common Language Runtime, mesin virtual Parrot Foundation's Parrot).

Tipe 4: Mesin Virtual Bahasa menyediakan mesin runtime yang mengeksekusi program yang diekspresikan dalam bahasa tamu. Program-program biasanya disajikan ke mesin virtual dalam bentuk sumber bahasa tamu, tanpa dikompilasi sepenuhnya ke dalam kode mesin sebelumnya. Mesin runtime perlu menafsirkan atau menerjemahkan program dan juga memenuhi fungsi tertentu yang diabstraksi oleh bahasa seperti manajemen memori (misalnya, mesin runtime untuk Basic, Lisp, Tcl, Ruby ).

Batasan antara jenis mesin virtual tidak jelas. Misalnya, mesin virtual bahasa juga dapat menggunakan teknik mesin virtual ISA virtual dengan menyusun program menjadi semacam ISA virtual dan kemudian mengeksekusi kode pada mesin virtual ISA virtual tersebut.

Banyak desain VM, seperti BEAM , melintasi batas. Mereka dapat dimasukkan ke dalam kategori ke-3 dan ke-4.

sumber:

  1. Wikipedia
  2. Desain Canggih dan Implementasi Mesin Virtual; Xlao-Feng LI
Mahyar
sumber
Ini relatif baru sehingga tidak memiliki banyak suara positif. Saya memilihnya.
Eric des Courtis
Terima kasih untuk penjelasannya. Persis apa yang saya cari.
nhm tanveer
10

Saya berasumsi bahwa Anda telah membaca http://en.wikipedia.org/wiki/Virtual_machine - di bawah terminologi itu, BEAM adalah "proses mesin virtual", seperti JVM.

RichardC
sumber
2
Proses tingkat sistem dan proses Erlang tidak sama. Proses dalam terminologi Erlang sebenarnya adalah proses lahan pengguna, dan VM itu sendiri adalah proses tingkat sistem operasi tunggal.
kjw0188
2
@ kjw0188 Saya mengerti tetapi saya tidak melihat perbedaan apa pun antara proses OS dan proses tingkat bahasa.
Eric des Courtis
1
@EricdesCourtis Latar belakang selengkapnya tentang proses Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker
1
@ WardBekker Terima kasih atas bantuannya, saya memahami proses Erlang. Saya hanya tidak yakin jenis VM kategorie Erlang termasuk.
Eric des Courtis
2
Saya akan berhati-hati dalam mengkategorikan mesin virtual terlalu banyak. Mereka cenderung unik dalam apa yang mereka lakukan. Dan mereka seringkali terlalu berbeda untuk dimasukkan ke dalam kategori tertentu.
SAYA BERIKAN JAWABAN SENGKETA