Sanallaştırma Hizmeti

VirtualizationService bir Android sisteminde çalışan, korumalı veya başka şekilde birden fazla konuk VM'yi, öncelikle crosvm örneklerini yöneterek yönetir. VirtualizationService , sistem hizmetlerinin veya uygulamaların VM'leri başlatmak, izlemek ve durdurmak için kullanabileceği bir AIDL API'sini kullanıma sunar. VirtualizationService kullanmak için virtmgr doğrudan çalıştırın veya virtmgr alt süreç olarak çalıştıran javalib veya Rustlib'i içe aktarın.

VM yaşam döngüsü

Bir VM'ye erişim IVirtualMachine nesnesi tarafından izlenir. IVirtualMachine nesnesine en az bir referans olduğu sürece VM çalışmaya devam eder (kendiliğinden çökmediği veya kapanmadığı sürece). IVirtualMachine nesnesine yapılan tüm referanslar VM kapatılmadan önce bırakılırsa VirtualizationService , VM'yi otomatik olarak kapatır. Bu süreç, VM'yi başlatan istemcinin düşük bellek öldürücü tarafından kapatılması durumunda VM'nin de kapatılacağı ve böylece kaynak sızıntılarının önleneceği anlamına gelir.

Her VM, VirtualizationService müşteri adına yönettiği kendi crosvm örneği tarafından yönetilir. virtmgr içindeki VirtualizationService bu crosvm alt süreçlerini, virtualizationservice içinde VirtualizationServiceInternal tarafından verilen CID de dahil olmak üzere, tahsis edilen genel kaynaklarla gerektiği şekilde başlatır ve onlara VM'nin ihtiyaç duyduğu görüntüler için dosya tanımlayıcılarını iletir. VirtualizationService daha sonra alt süreçlerin ne zaman öldüğüne dair izler, böylece kalan istemcilere buna göre bildirimde bulunabilir.

VM paketleme

crosvm, bir VM'yi başlatmanın iki farklı yolunu destekler: ya bir çekirdek ve initrd sağlanır ya da bir önyükleyici sağlanır. Her iki durumda da, ham bir görüntü veya birkaç bölümün birleşimi olabilecek isteğe bağlı sayıda disk görüntüsü de sağlanabilir. Çeşitli görüntüler istemci tarafından dosya tanımlayıcıları olarak sağlanır.

VirtualizationService isteğe bağlı olarak kompozit disk görüntüleri oluşturur. Bu işlem gereklidir çünkü bileşik disk dosyası, istemci tarafından iletilen ve crosvm tarafından doğrudan erişilemeyebilen, diski oluşturan çeşitli bölüm görüntü dosyalarına dahili olarak atıfta bulunur. Bu sorunu aşmak için VirtualizationService , crosvm tarafından devralınan dosya tanımlayıcı numaralarının, VirtualizationService kompozit görüntüleri oluştururken kullandığı dosya tanımlayıcı numaralarıyla aynı olmasını sağlar. Bileşik disk görüntüsü, her bölüm dosyasını temsil etmek için /proc/self/fd/N biçimindeki dosya adlarını kullanır.

Microdroid pVM'ler için AVF, standart Android Doğrulanmış Önyükleme akışını izleyerek çekirdeği kompozit disk görüntüsünün bir bölümünden yükleyen bir önyükleyici içerir.

VM Soketleri (vsock)

pVM'ler arasındaki iletişim için birincil arayüz, standart bir virtio soket arayüzü olan vsock'tur. Her VM, VirtualizationService VM'yi oluşturduğunda VirtualizationServiceInternal VM'ye atadığı ve VM'nin seçtiği bağlantı noktası numaralarındaki hizmetleri açığa çıkarabilen bir IP adresine benzeyen 32 bitlik bir içerik tanımlayıcı (CID) tarafından tanımlanır. VM çalışırken CID benzersizdir, ancak VM sonlandırıldığında ve VM'ye yönelik tüm IVirtualMachine bağlayıcı tanıtıcıları bırakıldığında CID değeri geri dönüştürülebilir.

Hata ayıklama arayüzü

vm komutu hata ayıklama amacıyla sağlanmıştır. Bu komut, geliştiricinin kabuktan bir VM başlatmasına, günlüklerini görüntülemesine ve VM'yi sonlandırmasına olanak tanır. AVF tarafından sağlanan vm komutu veya diğer arayüzlerle, bir VM hata ayıklanabilir (TAM) veya hata ayıklanamaz (HİÇBİR) modda başlatılabilir. Hata ayıklanabilir VM ile işletim sistemi düzeyindeki günlükleri görebilir, ADB kabuğuna erişebilir ve kilitlenme dökümü veya uygulama yükünü yakalayabilirsiniz. Üretimde hata ayıklanamayan bir VM kullanılması önerilir. Komut satırı aracı ve AVF'nin sağladığı diğer hata ayıklama arayüzleri hakkında daha fazla bilgi için debug/README.md dosyasına bakın.