BEAM (Erlang VM) คือเครื่องเสมือนชนิดใด


115

จากสิ่งที่ฉันเข้าใจว่าเครื่องเสมือนแบ่งออกเป็นสองประเภท ได้แก่ "เครื่องเสมือนระบบ" หรือ "เครื่องเสมือนกระบวนการ" มันค่อนข้างคลุมเครือสำหรับฉันที่บีมอยู่ มีเครื่องเสมือนชนิดอื่นที่ฉันไม่รู้จักหรือไม่?

คำตอบ:


177

Erlang VM ทำงานเป็นกระบวนการ OS เดียว โดยค่าเริ่มต้นจะรันเธรด OS หนึ่งเธรดต่อคอร์เพื่อให้ใช้งานเครื่องได้สูงสุด สามารถตั้งค่าจำนวนเธรดและแกนที่รันได้เมื่อ VM เริ่มทำงาน

กระบวนการ Erlang จะดำเนินการทั้งหมดโดย Erlang VM และมีการเชื่อมต่อกับทั้งกระบวนการระบบปฏิบัติการหรือ OS ไม่มีหัวข้อ ดังนั้นแม้ว่าคุณจะใช้ระบบ Erlang มากกว่าหนึ่งล้านกระบวนการ แต่ก็ยังคงเป็นเพียงกระบวนการ OS เดียวและหนึ่งเธรดต่อคอร์ ดังนั้นในแง่นี้ Erlang VM จึงเป็น "เครื่องเสมือนกระบวนการ" ในขณะที่ระบบ Erlang เองก็มีพฤติกรรมเหมือน OS และกระบวนการ Erlang มีคุณสมบัติคล้ายกับกระบวนการ OS มากเช่นการแยก มีจริง Erlang VM บนพื้นฐานของ BEAM ซึ่งทำงานบนโลหะเปลือยและในความเป็นจริงระบบปฏิบัติการในสิทธิของตนเองให้ดู Erlang บน Xen

โดยวิธีการที่มันเป็นไปได้อย่างสมบูรณ์แบบที่จะมีระบบที่ใช้นับล้านของกระบวนการ Erlang และจะมีการทำจริงในผลิตภัณฑ์บางอย่างเช่นWhatsApp

เราคิดถึง OSes เป็นอย่างมากเมื่อเราออกแบบสภาพแวดล้อม Erlang พื้นฐาน


1
@rvirding หมายความว่าระบบปฏิบัติการพื้นฐานไม่ทราบอะไรเกี่ยวกับแอปพลิเคชัน / กระบวนการที่ทำงานอยู่ด้านบนของ Erlang VM หรือไม่?
coffeMug

7
@coffeMug ไม่ใช่จากมุมมองของระบบปฏิบัติการ Erlang VM เป็นกระบวนการของระบบปฏิบัติการปกติเช่นเดียวกับกระบวนการระบบปฏิบัติการอื่น ๆ เช่นเดียวกับกระบวนการระบบปฏิบัติการอื่น ๆ ที่ใช้ทรัพยากรที่มีให้โดยระบบปฏิบัติการเช่นหน่วยความจำอุปกรณ์ i / o ฯลฯ ดังนั้นทุกอย่างโดยเฉพาะ Erlang เช่นกระบวนการ / การยอมรับข้อผิดพลาด / แอปพลิเคชัน / ฯลฯ จะได้รับการจัดการภายในกระบวนการ Erlang VM
rvirding

1
อะไรคือชัยชนะครั้งใหญ่กับ Erlang บน Xen - เร็วกว่าหรือ
jononomo

1
เป็นไปได้ไหมที่จะสร้างสภาพแวดล้อมที่ 'ทำงานเหมือนกัน' ของ BEAM + OTP โดยใช้กระบวนการมาตรฐานและคุณสมบัติของระบบปฏิบัติการเช่นการจัดการกระบวนการ (วางไข่ / ฆ่า / กำหนดขีด จำกัด ) และ IPC (ไปป์ / ซ็อกเก็ต)
Rik Hemsley

3
@RikHemsley ใช่มันเป็นไปได้ แต่สำหรับการใช้งานที่ จำกัด มากเท่านั้น จำไว้ว่าการมีกระบวนการ 10k, 100k หรือแม้แต่ 1M ในระบบ erlang ไม่ใช่เรื่องแปลกดังนั้นการสร้างแบบจำลองด้วยกระบวนการ OS จึงไม่เป็นจริง
rvirding

43

เครื่องเสมือนเป็นระบบคอมพิวเตอร์ เป้าหมายสูงสุดของระบบคอมพิวเตอร์คือการรันตรรกะโปรแกรม จากมุมมองนี้เครื่องเสมือนสามารถแบ่งออกเป็น4 ประเภทตามระดับของนามธรรมและขอบเขตของการจำลอง:

ประเภทที่ 1: เครื่องเสมือนสถาปัตยกรรมชุดคำสั่งแบบเต็ม (ISA)ให้การจำลอง ISA หรือการจำลองเสมือนของระบบคอมพิวเตอร์เต็มรูปแบบ ระบบปฏิบัติการและแอปพลิเคชันของแขกสามารถทำงานที่ด้านบนของเครื่องเสมือนเสมือนคอมพิวเตอร์จริง (เช่นVirtualBox, QEMU, XEN )

ประเภทที่ 2: เครื่องเสมือน Application Binary Interface (ABI)จัดเตรียมการจำลอง ABI ของกระบวนการแบบแขก แอปพลิเคชันต่อต้าน ABI นั้นสามารถทำงานในกระบวนการควบคู่ไปกับกระบวนการอื่น ๆ ของแอปพลิเคชัน ABI ดั้งเดิม (เช่นIA-32 Execution Layer ของ Intel บน Itanium, Code Morphing ของ Transmeta สำหรับการจำลอง X86, เลเยอร์การแปล Rosetta ของ Apple สำหรับการจำลอง PowerPC )

ประเภทที่ 3: เครื่องเสมือน ISA เสมือนจัดเตรียมเอ็นจิ้นรันไทม์เพื่อให้แอปพลิเคชันที่เข้ารหัสใน ISA เสมือนสามารถดำเนินการได้ Virtual ISA มักจะกำหนดขอบเขตความหมายของ ISA ในระดับสูงและ จำกัด ดังนั้นจึงไม่จำเป็นต้องใช้เครื่องเสมือนเพื่อจำลองระบบคอมพิวเตอร์เต็มรูปแบบ (เช่นJVM ของ Sun Microsystem, Microsoft's Common Language Runtime, Parrot virtual machine ของ Parrot Foundation)

ประเภทที่ 4: Language Virtual Machineมีเอ็นจินรันไทม์ที่รันโปรแกรมที่แสดงในภาษาแขก โดยปกติโปรแกรมจะถูกนำเสนอไปยังเครื่องเสมือนในรูปแบบซอร์สของภาษาแขกโดยไม่ได้รวบรวมเป็นรหัสเครื่องไว้ล่วงหน้า รันไทม์เอ็นจินจำเป็นต้องแปลความหมายหรือแปลโปรแกรมและยังตอบสนองฟังก์ชันการทำงานบางอย่างที่เป็นนามธรรมโดยภาษาเช่นการจัดการหน่วยความจำ (เช่นเอ็นจินรันไทม์สำหรับ Basic, Lisp, Tcl, Ruby )

ขอบเขตระหว่างประเภทเครื่องเสมือนไม่ชัดเจน ตัวอย่างเช่นเครื่องเสมือนภาษาสามารถใช้เทคนิคของเครื่องเสมือน ISA เสมือนได้โดยการรวบรวมโปรแกรมให้เป็น ISA เสมือนชนิดหนึ่งจากนั้นเรียกใช้รหัสบนเครื่องเสมือนของ ISA เสมือนนั้น

การออกแบบ VM จำนวนมากเช่นBEAMข้ามขอบเขต สามารถเข้าได้กับทั้งประเภทที่ 3 และ 4

แหล่งที่มา:

  1. วิกิพีเดีย
  2. การออกแบบขั้นสูงและการใช้งานเครื่องเสมือน Xlao-Feng LI

ค่อนข้างใหม่ซึ่งเป็นเหตุผลว่าทำไมจึงไม่มีการโหวตเพิ่มขึ้นมากมาย ฉันโหวตให้แล้ว
Eric des Courtis

ขอบคุณสำหรับคำอธิบาย สิ่งที่ฉันกำลังมองหา
nhm tanveer

10

ฉันคิดว่าคุณได้อ่านhttp://en.wikipedia.org/wiki/Virtual_machineภายใต้คำศัพท์นั้น BEAM เป็น "เครื่องเสมือนกระบวนการ" เช่นเดียวกับ JVM


2
กระบวนการระดับระบบและกระบวนการ Erlang ไม่เหมือนกัน กระบวนการในคำศัพท์ Erlang เป็นกระบวนการของผู้ใช้และ VM เองก็เป็นกระบวนการระดับระบบปฏิบัติการเดียว
kjw0188

2
@ kjw0188 ฉันเข้าใจ แต่ไม่เห็นความแตกต่างระหว่างกระบวนการ OS และกระบวนการระดับภาษา
Eric des Courtis

1
@EricdesCourtis ข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการ Erlang: stackoverflow.com/questions/2708033/…
Ward Bekker

1
@WardBekker ขอบคุณสำหรับความช่วยเหลือที่ฉันเข้าใจกระบวนการของ Erlang ฉันไม่แน่ใจว่าประเภทของ VM Erlang ตกอยู่ในประเภทใด
Eric des Courtis

2
ฉันจะระมัดระวังในการจัดหมวดหมู่เครื่องเสมือนมากเกินไป พวกเขามักจะไม่เหมือนใครในสิ่งที่ทำ และมักจะแตกต่างกันเกินกว่าที่จะใส่ไว้ในหมวดหมู่เฉพาะ
ฉันให้คำตอบ CRAP ใน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.