BEAM (Erlang VM) là loại máy ảo nào?


115

Theo những gì tôi hiểu thì một máy ảo rơi vào hai loại là "máy ảo hệ thống" hoặc "máy ảo xử lý". Nó là loại mờ đối với tôi nơi BEAM nằm. Có một loại máy ảo khác mà tôi không biết?

Câu trả lời:


177

Erlang VM chạy như một tiến trình HĐH. Theo mặc định, nó chạy một luồng hệ điều hành trên mỗi lõi để đạt được mức sử dụng tối đa của máy. Số lượng luồng và lõi mà chúng chạy có thể được đặt khi VM được khởi động.

Các quy trình Erlang được thực hiện hoàn toàn bởi Erlang VM và không có kết nối với các quy trình HĐH hoặc các luồng hệ điều hành. Vì vậy, ngay cả khi bạn đang chạy một hệ thống Erlang gồm hơn một triệu quy trình, nó vẫn chỉ là một quy trình HĐH và một luồng trên mỗi lõi. Vì vậy, theo nghĩa này, Erlang VM là một "máy ảo xử lý" trong khi hệ thống Erlang hoạt động rất giống như các quy trình của OS và Erlang có các thuộc tính rất giống với các quy trình của OS, ví dụ như cách ly. Thực sự có một máy ảo Erlang, dựa trên BEAM, chạy trên kim loại trần và thực tế là một hệ điều hành theo đúng nghĩa của nó, xem Erlang trên Xen .

Nhân tiện, hoàn toàn có thể có các hệ thống chạy hàng triệu quy trình Erlang và nó thực sự được thực hiện trong một số sản phẩm, ví dụ WhatsApp .

Chúng tôi chắc chắn đã suy nghĩ rất nhiều về các hệ điều hành khi chúng tôi thiết kế môi trường Erlang cơ bản.


1
@rvirding Điều này có nghĩa là hệ điều hành cơ bản không biết gì về các ứng dụng / quy trình đang chạy trên Erlang VM?
coffeMug

7
@coffeMug Không, theo quan điểm của HĐH, Erlang VM là một quy trình HĐH bình thường giống như mọi quy trình HĐH khác. Giống như các quy trình HĐH khác, nó sử dụng các tài nguyên do HĐH cung cấp như bộ nhớ, thiết bị i / o, v.v. Vì vậy, mọi thứ cụ thể như Erlang như các quy trình / khả năng chịu lỗi / ứng dụng / vv đều được xử lý bên trong quy trình Erlang VM.
tái lập

1
Chiến thắng lớn với Erlang trên Xen là gì - nó chỉ nhanh hơn?
jononomo

1
Có thể tạo môi trường BEAM + OTP 'tương tự' bằng cách sử dụng các quy trình và tính năng hệ điều hành tiêu chuẩn như quản lý quy trình (giới hạn sinh sản / tiêu diệt / thiết lập) và IPC (ống / ổ cắm) không?
Rik Hemsley

3
@RikHemsley Vâng, điều đó là có thể nhưng chỉ dành cho các ứng dụng rất hạn chế. Hãy nhớ rằng có các quy trình 10k, 100k hoặc thậm chí 1M trong các hệ thống erlang không phải là hiếm gặp nên việc mô hình hóa chúng bằng các quy trình HĐH sẽ không thực tế.
tái lập

43

Máy ảo là một hệ thống máy tính. Mục tiêu cuối cùng của một hệ thống máy tính là thực hiện logic được lập trình. Từ quan điểm này, các máy ảo có thể được phân thành 4 loại theo mức độ trừu tượng và phạm vi mô phỏng:

Loại 1: Máy ảo Kiến trúc tập lệnh đầy đủ (ISA) cung cấp mô phỏng hoặc ảo hóa toàn bộ hệ thống máy tính của hệ thống máy tính. Các hệ điều hành và ứng dụng khách có thể chạy trên đỉnh của máy ảo như một máy tính thực tế (ví dụ: VirtualBox, QEMU, XEN ).

Loại 2: Máy ảo Giao diện nhị phân ứng dụng (ABI) cung cấp mô phỏng ABI quy trình khách. Các ứng dụng chống lại ABI đó có thể chạy song song với các quy trình khác của các ứng dụng ABI gốc (ví dụ: Lớp thực thi IA-32 của Intel trên Itanium, Mô phỏng mã của Transmeta cho mô phỏng X86, lớp dịch Rosetta của Apple cho mô phỏng PowerPC ).

Loại 3: Máy ảo ISA ảo cung cấp một công cụ thời gian chạy để các ứng dụng được mã hóa trong ISA ảo có thể thực thi trên nó. Virtual Virtual thường định nghĩa một phạm vi cao và phạm vi hạn chế của ngữ nghĩa của ISA, do đó, nó không yêu cầu máy ảo mô phỏng một hệ thống máy tính đầy đủ (ví dụ, JVM của Sun microsystem, Thời gian chạy ngôn ngữ chung của Microsoft, máy ảo Parrot của Parrot Foundation).

Loại 4: Máy ảo ngôn ngữ cung cấp công cụ thời gian chạy thực thi các chương trình được thể hiện bằng ngôn ngữ khách. Các chương trình thường được trình bày cho máy ảo ở dạng nguồn của ngôn ngữ khách, mà không được biên dịch đầy đủ thành mã máy trước đó. Công cụ thời gian chạy cần diễn giải hoặc dịch chương trình và cũng đáp ứng một số chức năng nhất định được trừu tượng hóa bằng ngôn ngữ như quản lý bộ nhớ (ví dụ: các công cụ thời gian chạy cho Basic, Lisp, Tcl, Ruby ).

Ranh giới giữa các loại máy ảo không rõ ràng. Ví dụ, một máy ảo ngôn ngữ cũng có thể sử dụng kỹ thuật của máy ảo ISA ảo bằng cách biên dịch chương trình thành một loại ISA ảo và sau đó thực thi mã trên một máy ảo của máy ảo ảo đó.

Nhiều thiết kế VM, chẳng hạn như BEAM , vượt qua các ranh giới. Họ có thể phù hợp với cả loại thứ 3 và thứ 4.

nguồn:

  1. Wikipedia
  2. Thiết kế tiên tiến và triển khai các máy ảo; Xlao-Phong LI

Nó tương đối mới, đó là lý do tại sao nó không có nhiều upvote. Tôi ủng hộ nó.
Eric des Courtis

Cảm ơn đã giải thích. Chính xác những gì tôi đang tìm kiếm.
nhm tanveer 18/03/19

10

Tôi giả sử rằng bạn đã đọc http://en.wikipedia.org/wiki/Virtual_machine - theo thuật ngữ đó, BEAM là một "máy ảo xử lý", giống như JVM.


2
Các quy trình cấp hệ thống và quy trình Erlang không giống nhau. Các quy trình trong thuật ngữ Erlang thực sự là các quy trình đất của người dùng và bản thân VM là một quy trình cấp hệ điều hành duy nhất.
kjw0188

2
@ kjw0188 Tôi hiểu nhưng tôi không thấy bất kỳ sự phân biệt nào giữa quy trình HĐH và quy trình cấp ngôn ngữ.
Eric des Courtis

1
@EricdesCourtis Thông tin cơ bản khác về các quy trình Erlang: stackoverflow.com/questions/2708033/ Lời
Ward Bekker

1
@WardBekker Cảm ơn sự giúp đỡ Tôi hiểu các quy trình Erlang. Tôi chỉ không chắc chắn loại phân loại VM Erlang rơi vào.
Eric des Courtis

2
Tôi sẽ cảnh giác khi phân loại máy ảo quá nhiều. Họ có xu hướng là duy nhất trong những gì họ làm. Và chúng thường quá khác nhau để đưa vào một danh mục cụ thể.
TÔI CHO CÂU TRẢ LỜI CRAP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.