VirtualizationService

VirtualizationService, Android sistemde çalışan birden fazla misafir sanal makineyi (korunan veya korunmayan) temel olarak crosvm örneklerini yöneterek yönetir. VirtualizationService, sistem hizmetlerinin veya uygulamaların sanal makineleri başlatmak, izlemek ve durdurmak için kullanabileceği bir AIDL API'si sağlar. VirtualizationService kullanmak için virtmgr'ı doğrudan çalıştırın veya virtmgr'ı alt işlem olarak çalıştıran javalib ya da rustlib'i içe aktarın.

Sanal makine yaşam döngüsü

Sanal makineye erişim, IVirtualMachine nesnesi tarafından izlenir. IVirtualMachine nesnesine en az bir referans olduğu sürece sanal makine çalışmaya devam eder (kendi kendine kilitlenmediği veya kapanmadığı sürece). IVirtualMachine nesnesine yapılan tüm referanslar sanal makine kapanmadan önce kaldırılırsa VirtualizationService, sanal makineyi otomatik olarak kapatır. Bu işlem, sanal makineyi başlatan istemci düşük bellek öldürücü tarafından kapatılırsa sanal makinenin de kapatılacağı ve böylece kaynak sızıntılarının önleneceği anlamına gelir.

Her sanal makine, kendi crosvm örneği tarafından yönetilir. VirtualizationServiceBu örnek de istemci adına yönetimi üstlenir. virtmgr'daki VirtualizationService, bu crosvm alt işlemlerini gerektiği gibi, virtualizationservice'daki VirtualizationServiceInternal tarafından verilen CID dahil olmak üzere ayrılmış genel kaynaklarla başlatır ve VM'nin ihtiyaç duyduğu görüntülerin dosya tanımlayıcılarını onlara iletir. VirtualizationService, alt işlemin sona erip ermediğini izler. Böylece, kalan istemcileri buna göre bilgilendirebilir.

Sanal makine paketleme

crosvm, sanal makineyi başlatmanın iki farklı yolunu destekler: çekirdek ve initrd sağlanır ya da önyükleme yükleyici sağlanır. Her iki durumda da, rastgele sayıda disk görüntüsü de sağlanabilir. Bu görüntüler ham görüntü veya birkaç bölümden oluşan bir kompozit olabilir. Çeşitli resimler, istemci tarafından dosya tanımlayıcıları olarak sağlanır.

VirtualizationService, karma disk görüntülerini isteğe bağlı olarak oluşturur. Kompozit disk dosyası, diski oluşturan çeşitli bölüm resim dosyalarını dahili olarak referans aldığından bu işlem gereklidir. Bu dosyalar istemci tarafından iletilir ve crosvm tarafından doğrudan erişilemeyebilir. Bu sorunun üstesinden gelmek için VirtualizationService, crosvm tarafından devralınan dosya tanımlayıcı numaralarının, VirtualizationService'nin birleşik resimleri oluştururken kullandığı dosya tanımlayıcı numaralarıyla aynı olduğundan emin olur. Kompozit disk görüntüsü, her bölüm dosyasını temsil etmek için /proc/self/fd/N biçiminde dosya adları kullanır.

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

Sanal makine yuvaları (vsock)

pVM'ler arasındaki iletişim için birincil arayüz, standart bir virtio soket arayüzü olan vsock'tur. Her sanal makine, VirtualizationService sanal makineyi oluşturduğunda VirtualizationServiceInternal tarafından sanal makineye atanan ve sanal makinenin seçtiği tüm bağlantı noktası numaralarında hizmetleri gösterebilen, IP adresine benzer bir 32 bit bağlam tanımlayıcısı (CID) ile tanımlanır. CID, sanal makine çalışırken benzersizdir ancak sanal makine sonlandırılıp sanal makinenin tüm IVirtualMachine bağlayıcısı işleri bırakıldığında CID değeri yeniden kullanılabilir.

Hata ayıklama arayüzü

vm komutu, hata ayıklama amacıyla sağlanmıştır. Bu komut, geliştiricilerin kabuktan sanal makine başlatmasına, günlüklerini görüntülemesine ve sanal makineyi sonlandırmasına olanak tanır. vmkomutuyla veya AVF tarafından sağlanan diğer arayüzlerle bir sanal makine, hata ayıklama yapılabilir (FULL) veya hata ayıklama yapılamaz (NONE) modunda başlatılabilir. Hata ayıklanabilir bir sanal makineyle işletim sistemi düzeyindeki günlükleri görebilir, ADB kabuğuna erişebilir ve kilitlenme dökümünü veya uygulama yükünü yakalayabilirsiniz. Üretimde hata ayıklama yapılamayan bir sanal makine 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ını inceleyin.