VirtualizationService

VirtualizationService quản lý nhiều máy ảo khách, dù được bảo vệ hay nói cách khác, chạy trên hệ thống Android, chủ yếu bằng cách quản lý các phiên bản của crosvm. VirtualizationService hiển thị API AIDL, dịch vụ hoặc ứng dụng hệ thống nào có thể sử dụng để khởi động, giám sát và dừng máy ảo. Để sử dụng VirtualizationService , hãy thực thi virtmgr trực tiếp hoặc nhập javalib hoặc Rustlib để thực thi virtmgr như một tiến trình con.

Vòng đời máy ảo

Việc truy cập vào VM được theo dõi bởi đối tượng IVirtualMachine . Miễn là có ít nhất một tham chiếu đến đối tượng IVirtualMachine thì VM sẽ tiếp tục chạy (trừ khi nó gặp sự cố hoặc tự tắt). Nếu tất cả các tham chiếu đến đối tượng IVirtualMachine bị loại bỏ trước khi VM tắt thì VirtualizationService sẽ tự động tắt VM. Quá trình này ngụ ý rằng nếu máy khách khởi động VM bị tắt do trình diệt bộ nhớ thấp thì VM cũng bị tắt, do đó ngăn ngừa rò rỉ tài nguyên.

Mỗi VM được quản lý bởi phiên bản crosvm riêng của nó, mà VirtualizationService lần lượt quản lý thay mặt cho khách hàng. VirtualizationService trong virtmgr khởi động các tiến trình con crosvm này theo yêu cầu với các tài nguyên toàn cầu được phân bổ, bao gồm CID do VirtualizationServiceInternal cấp trong virtualizationservice và chuyển cho chúng các bộ mô tả tệp cho hình ảnh mà VM cần. Sau đó, VirtualizationService sẽ giám sát quy trình con để biết thời điểm chúng chết, do đó, nó có thể thông báo cho bất kỳ khách hàng còn lại nào tương ứng.

Bao bì VM

crosvm hỗ trợ hai cách khởi động VM khác nhau: cung cấp kernel và initrd hoặc cung cấp bộ tải khởi động. Trong cả hai trường hợp, số lượng ảnh đĩa tùy ý cũng có thể được cung cấp, có thể là ảnh thô hoặc tổng hợp của một số phân vùng. Các hình ảnh khác nhau được khách hàng cung cấp dưới dạng mô tả tệp.

VirtualizationService xây dựng hình ảnh đĩa tổng hợp theo yêu cầu. Quá trình này là cần thiết vì tệp đĩa tổng hợp tham chiếu nội bộ đến các tệp hình ảnh phân vùng khác nhau cấu thành đĩa, được máy khách chuyển qua và crosvm có thể không truy cập trực tiếp được. Để giải quyết vấn đề này, VirtualizationService đảm bảo rằng số bộ mô tả tệp được crosvm kế thừa giống với số bộ mô tả tệp mà VirtualizationService đã sử dụng để tạo hình ảnh tổng hợp. Hình ảnh đĩa tổng hợp sử dụng tên tệp có dạng /proc/self/fd/N để thể hiện từng tệp phân vùng.

Đối với các pVM Microdroid, AVF bao gồm một bộ tải khởi động, tải kernel từ một phân vùng của ảnh đĩa tổng hợp, tuân theo quy trình Khởi động được xác minh Android tiêu chuẩn.

Ổ cắm VM (vsock)

Giao diện chính để liên lạc giữa các pVM là vsock, một giao diện ổ cắm virtio tiêu chuẩn. Mỗi VM được xác định bằng mã nhận dạng ngữ cảnh 32 bit (CID), tương tự như địa chỉ IP mà VirtualizationServiceInternal gán cho VM khi VirtualizationService tạo VM và có thể hiển thị các dịch vụ trên bất kỳ số cổng nào mà VM chọn. CID là duy nhất khi VM đang chạy, nhưng giá trị CID có thể được tái sử dụng khi VM bị chấm dứt và tất cả các xử lý liên kết IVirtualMachine đối với VM đã bị loại bỏ.

Giao diện gỡ lỗi

Lệnh vm được cung cấp cho mục đích gỡ lỗi. Lệnh này cho phép nhà phát triển khởi động VM từ shell, xem nhật ký của nó và chấm dứt VM. Với lệnh vm hoặc các giao diện khác do AVF cung cấp, VM có thể khởi động ở chế độ có thể gỡ lỗi (FULL) hoặc không thể gỡ lỗi (NONE). Với VM có thể sửa lỗi, bạn có thể xem nhật ký cấp hệ điều hành, truy cập trình bao ADB và ghi lại sự cố kết xuất hoặc tải trọng ứng dụng. Bạn nên sử dụng máy ảo không thể gỡ lỗi trong quá trình sản xuất. Để biết thêm về công cụ dòng lệnh và các giao diện gỡ lỗi khác mà AVF cung cấp, hãy xem debug/README.md .