BEAM (Erlang VM) ne tür bir sanal makinedir?


115

Anladığım kadarıyla bir sanal makine "sistem sanal makinesi" veya "işlem sanal makinesi" olarak iki kategoriye ayrılır. BEAM'in nerede yattığı benim için biraz bulanık. Farkında olmadığım başka tür bir sanal makine var mı?

Yanıtlar:


177

Erlang VM, tek bir işletim sistemi süreci olarak çalışır. Varsayılan olarak, makinenin maksimum kullanımını sağlamak için çekirdek başına bir işletim sistemi iş parçacığı çalıştırır. VM başlatıldığında iş parçacığı sayısı ve hangi çekirdekler üzerinde çalışacakları ayarlanabilir.

Erlang süreçleri tamamen Erlang VM tarafından gerçekleştirilir ve işletim sistemi süreçleri veya işletim sistemi iş parçacıklarıyla bağlantısı yoktur. Dolayısıyla, bir milyondan fazla işlem içeren bir Erlang sistemi çalıştırıyor olsanız bile, bu hala yalnızca bir işletim sistemi süreci ve çekirdek başına bir iş parçacığıdır. Bu anlamda Erlang VM bir "işlem sanal makinesi" iken, Erlang sisteminin kendisi bir işletim sistemi gibi davranır ve Erlang süreçleri işletim sistemi işlemlerine çok benzer özelliklere sahiptir, örneğin izolasyon. Aslında BEAM tabanlı, çıplak metal üzerinde çalışan ve aslında kendi başına bir işletim sistemi olan bir Erlang VM var, bkz. Erlang on Xen .

Bu arada, milyonlarca Erlang işlemi çalıştıran sistemlere sahip olmak mükemmel bir şekilde mümkündür ve aslında WhatsApp gibi bazı ürünlerde yapılır .

Temel Erlang ortamını tasarlarken işletim sistemleri hakkında kesinlikle çok düşünüyorduk.


1
@rvirding Bu, temel işletim sisteminin Erlang VM üzerinde çalışan uygulamalar / işlemler hakkında hiçbir şey bilmediği anlamına mı geliyor?
coffeMug

7
@coffeMug Hayır, işletim sistemi açısından Erlang VM, diğer işletim sistemi işlemleri gibi normal bir işletim sistemi sürecidir. Diğer işletim sistemi süreçleri gibi, işletim sistemi tarafından sağlanan bellek, i / o cihazları vb. Kaynakları kullanır. Bu nedenle, özellikle Erlang benzeri işlemler / hata toleransı / uygulamalar / vb. Her şey Erlang VM işleminin içinde ele alınır.
2013

1
Xen'de Erlang ile büyük kazanç nedir - sadece daha hızlı mı?
jononomo

1
Standart süreçleri ve süreç yönetimi (spawn / kill / set limitleri) ve IPC (borular / soketler) gibi işletim sistemi özelliklerini kullanarak bir BEAM + OTP "iş benzeri" ortamı oluşturmak mümkün olabilir mi?
Rik Hemsley

3
@RikHemsley Evet, bu mümkün olabilir, ancak yalnızca çok sınırlı uygulamalar için. Erlang sistemlerinde 10k, 100k veya hatta 1M işlemlerinin olmasının nadir olmadığını ve bu nedenle bunları işletim sistemi süreçleriyle modellemenin gerçekçi olmayacağını unutmayın.
2017

43

Sanal makine bir bilgi işlem sistemidir. Bir bilgi işlem sisteminin nihai amacı, programlanmış mantığı yürütmektir. Bu açıdan bakıldığında, sanal makineler, soyutlama düzeyine ve emülasyon kapsamına göre 4 tipte kategorize edilebilir :

Tip 1: Tam Komut Seti Mimarisi (ISA) sanal makine , tam bir bilgisayar sisteminin ISA öykünmesini veya sanallaştırmasını sağlar. Konuk işletim sistemleri ve uygulamaları, sanal makinenin üstünde gerçek bir bilgisayar olarak çalışabilir (örn. VirtualBox, QEMU, XEN ).

Tip 2: Uygulama İkili Arabirimi (ABI) sanal makinesi , konuk işlem ABI öykünmesi sağlar. Bu ABI'ya karşı uygulamalar, yerel ABI uygulamalarının diğer süreçleriyle yan yana çalışabilir (örneğin, Itanium'da Intel'in IA-32 Yürütme Katmanı, X86 öykünmesi için Transmeta'nın Kod Dönüşümü, Apple'ın PowerPC emülasyonu için Rosetta çeviri katmanı ).

Tip 3: Sanal ISA sanal makinesi , sanal ISA'da kodlanmış uygulamaların üzerinde çalıştırılabilmesi için bir çalışma zamanı motoru sağlar. Sanal ISA genellikle yüksek seviyeli ve sınırlı bir ISA semantiğini tanımlar, bu nedenle sanal makinenin tam bir bilgisayar sistemini taklit etmesini gerektirmez (örneğin, Sun Microsystem'in JVM'si, Microsoft'un Ortak Dil Çalışma Zamanı, Parrot Foundation'ın Parrot sanal makinesi).

Tip 4: Dil Sanal Makinesi , konuk dilde ifade edilen programları yürüten bir çalışma zamanı motoru sağlar. Programlar genellikle önceden makine koduna tam olarak derlenmeden sanal makineye konuk dilin kaynak biçiminde sunulur. Çalışma zamanı motorunun programı yorumlaması veya çevirmesi ve ayrıca bellek yönetimi gibi dil tarafından soyutlanmış belirli işlevleri yerine getirmesi gerekir (örneğin, Basic, Lisp, Tcl, Ruby için çalışma zamanı motorları ).

Sanal makine türleri arasındaki sınırlar net değildir. Örneğin, bir dil sanal makinesi, programı bir tür sanal ISA'ya derleyerek ve ardından kodu bu sanal ISA'nın sanal makinesinde çalıştırarak sanal ISA sanal makine tekniğini de kullanabilir.

BEAM gibi birçok sanal makine tasarımı sınırları aşıyor. Hem 3. hem de 4. kategoriye uygun olabilirler.

kaynak:

  1. Vikipedi
  2. Sanal Makinelerin İleri Tasarımı ve Gerçekleştirilmesi; Xlao-Feng LI

Nispeten yenidir, bu yüzden çok fazla olumlu oyu yoktur. Oy verdim.
Eric des Courtis

Açıklama için teşekkürler. Tam olarak aradığım şey.
nhm tanveer

10

Http://en.wikipedia.org/wiki/Virtual_machine okuduğunuzu varsayıyorum - bu terminoloji altında BEAM, JVM gibi bir "işlem sanal makinesi" dir.


2
Sistem düzeyinde süreçler ve Erlang süreçleri aynı değildir. Erlang terminolojisindeki süreçler aslında kullanıcı kara süreçleridir ve sanal makinenin kendisi tek bir işletim sistemi seviyesi işlemidir.
kjw0188

2
@ kjw0188 Anlıyorum ama işletim sistemi süreci ile dil seviyesi süreci arasında herhangi bir fark görmüyorum.
Eric des Courtis

1
@EricdesCourtis Erlang süreçleri hakkında daha fazla arka plan: stackoverflow.com/questions/2708033/…
Ward Bekker

1
@WardBekker Erlang süreçlerini anladığım yardım için teşekkürler. Erlang'ın ne tür bir sanal makine kategorisine girdiğinden emin değildim.
Eric des Courtis

2
Sanal makineleri çok fazla kategorize etmekten çekinirim. Yaptıkları işte benzersiz olma eğilimindedirler. Ve genellikle belirli bir kategoriye koymak için çok farklıdırlar.
CRAP CEVAPLARINI
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.