Başlangıçta, konuk işletim sisteminin gerçek donanımı kullanmasına izin veremezdiniz, çünkü onu kontrol etmenin bir yolu yoktu. Gerçek CPU'da çalıştırmayı denediyseniz, kontrolü ana işletim sistemine geri vereceğine dair bir garantiniz yoktu.
Açıkladığınız gibi sanallaştırma, ana bilgisayar tarafından yönetilebilen bir donanım düzeyinde belirli kuralların ve kısıtlamaların uygulanmasına izin verilerek donanımda uygulanır. Bu, ana bilgisayar işletim sisteminin, konuğun neler yapabileceği ve yapamayacağı ile ilgili kuralları ayarlamasını ve ardından konuğu gerçek donanımda çalıştırmasını sağlar. Konuk, kuralları ihlal eden gerçek bir donanımla (disk aygıtına erişmeye çalışmak gibi) bir şey yapmaya çalışırsa, donanım konuğu askıya alır ve ana bilgisayara bir kesme (örneğin, taklit edilmiş bir disk aygıtından veri döndürme) ve ardından misafire devam etme
İşlemin basitleştirilmiş bir örneği:
Ana İşletim Sistemi: Hey CPU, bu kodu sanallaştırmanız gerekiyor. Sadece talimatları yerine getirmeyen bir şey yapmak istiyorsa beni ara.
Ana CPU: Anladınız!
Ana bilgisayar CPU'su tüm ana bilgisayar kayıtlarını ve durumunu kaydeder ve ardından Konuk OS kodunu yürütmeye başlar
Konuk İşletim Sistemi: Hayattayım! Hey CPU, bana bu dosyayı alabilir misin?
Ana CPU: Ah ... tabi. Bir dakika.
Host CPU tüm konuk kayıtlarını ve durumlarını kaydeder ve ardından tüm host kayıtlarını ve durumlarını geri yükler
Host CPU: Hey Host OS, Guest bu dosyayı istedi!
Ana İşletim Sistemi: Ah, onlara şunu verin: Sanal sabit diskten dosya
Ana CPU: Anladınız!
Ana CPU tüm ana bilgisayar kayıtlarını ve durumunu kaydeder, konuk kayıtlarını ve durumunu geri yükler ve ardından Konuk OS kodunu çalıştırmaya başlar
Ana CPU: İşte bu dosya!
Konuk İşletim Sistemi: Tatlı, teşekkürler!
Buradaki temel fark bir emülatörde, konuk işletim sistemi aslında donanımda asla çalışmıyor. Sanallaştırma ile, ana işletim sistemi CPU'daki sınırlamaları yapılandırır ve daha sonra fiziksel CPU'da konuk kodunu çalıştırır. Yukarıdaki örnek son derece basitleştirilmiştir, ancak bellek, disk i / o ve hatta ağ iletişimi, günümüzün en son işlemcileri üzerinde kontrol edilebilir ve her seferinde ana bilgisayar işletim sistemini rahatsız etmeden güvenli bir şekilde arabirim haline getirilebilir. Misafir sanallaştırılmış sınırların dışına çıkmaya çalışmadığı sürece, Host OS belirli bir zamanda yapacak bir şey yapmıyorsa herhangi bir kod çalışmayabilir.
Biraz bakış açısı eklemek için, bu uzun bir sanallaştırma ve kontrol geçmişinde sadece bir adım daha. (Bunun doğru sırada olduğunu veya kapsamlı olduğunu garanti etmez, ancak iyi bir başlangıç genel görünümü vermelidir)
Başlangıçta sanallaştırma yoktu. İşlemlerin hepsi aynı bellek alanını paylaştı, hepsinin donanıma tam erişimi vardı ve çoklu görev yeteneği tamamen bir işlemin kendini durdurmasına ve bir sonraki işleme kontrol vermesine bağlıydı. İşletim sistemi bir süreç üzerinde herhangi bir kontrole sahip olmak istiyorsa , süreci bir emülatörde çalıştırmak zorunda kaldı (hiç kimse yapmadı, çünkü çok acı verici bir şekilde yavaştı).
Birincisi Ayrıcalıklı Hafızaydı : sadece hafızanın özel bölgeleri tarafından yapılabilen belirli eylemler. Bu bölgeler İS tarafından işgal edilir ve bu ayrıcalıklı eylemlere açılan bir kapı görevi görür. Bir örnek, donanıma veri okuma / yazma yeteneğidir. Bu, işlemlerin doğrudan sabit sürücüye okuma / yazma işlemlerini önler ve bunun yerine işletim sisteminden onlar için okuma / yazma istemelerini zorlar. Bu, işletim sisteminin eylemi gerçekleştirmeden önce sürecin izni olup olmadığını kontrol edebileceği anlamına gelir.
Sonra olduğu gibi sanallaştırılmış "zaman" geldi. İşletim sistemi, işlemciyi belirli aralıklarla etkin işlemi kesintiye uğratacak şekilde yapılandırabilir, bu da zamanlamanın kontrolünü ele geçirmesini ve işlemler arasında geçiş yapmasını sağlar. İşletim sistemi artık işlemleri doğrudan donanım üzerinde çalıştırabilir ve yine de CPU zamanını kötüye kullanmalarını engelleyebilir. Bu bir donanım zamanlayıcısı tarafından sağlandı .
Sonra sanallaştırılmış bellek geldi : Paylaşılan bellekle ilgili sorun, herhangi bir işlemin diğer işlemlerin belleğini okuyabilmesidir. Mary'nin programı Bob'un şifresini web tarayıcısından okuduğunda ne olur? Sanal bellek, işletim sisteminin bir işlemin gördüğü belleği fiziksel belleğin farklı bölümleriyle eşlemesine, hatta bunları fiziksel bellekten tamamen (sayfa dosyasına) taşımasına olanak tanır. Bir işlem belleğe okumaya veya belleğe yazmaya çalıştığında, CPU'nun VMMU (sanal bellek yönetim birimi) fiziksel bellekte eşlendiği yere bakar ve eylemi orada gerçekleştirir. Bellek yetersiz kaldığında CPU, sayfayı sayfa dosyasından belleğe almak için işletim sistemini çağırır.
Pekala, bu noktada, süreçleri güvenli bir şekilde çalıştırabildiğimiz ve işletim sistemi özel olarak izin vermedikçe, sistemi devralmalarını aktif olarak engelleyebileceğimiz X86 işlemcisinin başlangıcına ulaştık. Bu noktada süreçler etkili bir şekilde "sanallaştırılır". Bu destek uzun zamandır var, bu yüzden insanların sanallaştırılmış süreçler hakkında konuştuğunu gerçekten duymuyorsunuz, çünkü tüm süreçlerin şimdi sanallaştırıldığı varsayılıyor.
Sanallaştırılmış işletim sistemleri neden özeldir? Neden sadece bir süreç olarak başlayamayız ve kendi işini yapmasına izin veremeyiz? Sorun şu ki, bir işletim sistemi olarak, konuk sistem, ana bilgisayarın işlemleri kontrol etmek için kullandığı denetimlere erişmeyi ve bunları kullanabilmeyi beklemektedir - temel olarak, işletim sistemi bilgisayarın üstün hükümdarı olmayı beklemektedir ve sadece Durum böyle değilse çalışmayın. "Donanım Sanallaştırma" uzantıları (AMD için AMD-V ve Intel için VT-x), Ana Bilgisayar İşletim Sisteminin sanallaştırılmış bir dizi sanal işlem denetimi (sanal ayrıcalıklı bellek, sanal donanım zamanlayıcıları, sanal sanal bellek) sağlamasına olanak tanır .