Sanallaştırmanın yapı bakımından öykünmeden farkı nedir?


20

Birisi bana, VirtualBox gibi bir sanallaştırma programının bir emülatör gibi çalışmadığını, kayıtları taklit etmediği ve CPU'daki sanallaştırılmış veriler için gerçek olanları kullandığı anlamında çalıştığını söyledi. Öykünücüler, çoğunlukla yabancı bir ortama bağlı bir yazılım yürütecekleri için kayıtları taklit etmelidir (örneğin, bir Genesis taklitçisinin Motorola 68000'in kayıtlarına ve bellek adreslerine ihtiyacı vardır, bu nedenle geliştirici bu kaynakları taklit kayıtlar olarak kullanılabilir yapmalıdır).

Asıl sorum şu: Sanallaştırma nasıl geliştiriliyor? Tüm bir işletim sisteminin sanal bir makinede işlem olarak çalışmasını nasıl sağlayabiliriz, ancak gerçek CPU'yu kullanmaya devam ederken bağımsız olarak çalışmasını nasıl sağlayabiliriz? Ben sadece öykünme biliyorum, sanallaştırma değil, bu yüzden kimse yardımcı olabilir eğer güzel olurdu!

Not: Ben sadece farkın ne olduğunu sormuyorum, ama yazılımları nasıl çalıştırdıklarındaki farkları da soruyorum.

Yanıtlar:


32

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 .


Bir keresinde gördüğüm bir IRC tek oyunculu oyunu hatırlatıyor (Muhtemelen NSFW: bazı PG-13 dili içeriyor)
Scott Chamberlain

Bilgisayarımda Donanım Sanallaştırma (AMD-V veya VT-x) yok. Ama VirtualBox üzerinde bir Sanal Makine çalıştırabiliyorum ... VirtualBox bunu yapabilmek için işletim sistemine bir sürücü yükler. Bu nasıl yapılır?
NothingsImpossible

1
@NothingsImpossible: çok eski bir makineniz yoksa, günümüzde satılan çoğu ana CPU donanım sanallaştırmasını destekler. Temel sanallaştırma her zaman mümkündür, çünkü herhangi bir program (Konuk İşletim Sistemi gibi) geçerli güvenlik düzeyinde izin verilmeyen talimatları yürütmeye çalışırsa CPU denetleyiciye (çekirdek) bir kesinti gönderir. Ana Bilgisayar İşletim Sisteminin tek yapması gereken bu kesintileri yakalamak, istenen işlemi bulmak ve alt sürecin yürütülmesini sürdürmektir. AMD-V / VT-x yalnızca daha verimli bir sanallaştırmayı mümkün kılıyor, çünkü CPU artık "izin verilmiyor" talimatlarını sunabiliyor.
Yalan Ryan

@LieRyan Açıklama için teşekkürler. Ama eski değil, bir Atom işlemcisi. Kesin olmak gerekirse: ark.intel.com/products/70105
Şey

1

Tüm bir işletim sisteminin sanal bir makinede işlem olarak çalışmasını nasıl sağlayabiliriz, ancak gerçek CPU'yu kullanmaya devam ederken bağımsız olarak çalışmasını nasıl sağlayabiliriz?

(Aşağıdakiler çok basitleştirilmiştir.)

İşletim sisteminin kullanıcı modu süreçlerini çoğunlukla uyumlu tutmak için kullandığı aynı veya benzer mekanizmayı kullanarak.

Kullanıcı modu işlemleri, yapmasına izin verilmeyen bir şey yapmaya çalıştıklarında CPU özel durumlarına neden olur.

Bu nedenle, kullanıcı modunda çalışan bir işletim sistemi çekirdeğimiz varsa, doğrudan erişim donanımına benzer bir şey yapmaya çalıştığında, bir istisnaya neden olacaktır. Bir hipervizör, normal bir çekirdeğin yaptığı gibi bir sistem çökmesine neden olmak yerine, bu istisnayı alabilir ve taklit veya sanallaştırılmış davranışla yanıt verebilir.

Bu çekirdek adına donanım erişimi gerçekleştirebilir, değiştirilmiş bir donanım erişimi gerçekleştirebilir (yani doğrudan disk sektörü erişimi yerine dosyanın bir kısmına erişebilir) veya hayal edebileceğiniz herhangi bir şey.

CPU sanal makine uzantıları temel olarak CPU'nun tüm "süpervizörü" veya "korumalı" modunu tam olarak bunu yapmak için bir seviye daha uzatır ve ayrıca sanallaştırmanın daha kolay olması için ek bir sanal bellek "yuvalama seviyesi" sağlar.


0

Sanallaştırma , bir konuk donanımın değiştirilmemiş olarak çalışması için yeterli olan bir bilgisayar donanımının parçalarını simüle etmeyi içerir, ancak çoğu işlem yine de verimlilik nedeniyle gerçek donanımda gerçekleşir. Bu nedenle sanallaştırma normalde öykünmeden daha hızlıdır, ancak gerçek sistemin konuk sistemle aynı mimariye sahip olması gerekir. Örneğin, VMWare sanal bir Windows XP makinesini gerçek bir makinenin "içinde" çalıştırmak için sanal bir ortam sağlayabilir. Ancak VMWare, gerçek bir x86 bilgisayar dışında herhangi bir gerçek donanım üzerinde çalışamaz.

Gelen öykünmesi sanal makine yazılımı komple donanımı taklit eder. Bu, bir bilgisayar mimarisi için bir işletim sisteminin öykünücünün yazıldığı mimari üzerinde çalışmasına izin verir. Sinüs tüm işlemler yazılımda çalıştırılır, öykünme daha yavaş olma eğilimindedir, ancak donanımdan bağımsız olduğu için daha fazla platformu destekleyebilir.


Tamam ... ama donanımın "simüle" kısımlarını nasıl kastediyorsun? Bir emülatör tam olarak bunu yapar ... Sanallaştırma, konuk işletim sisteminin gerçek CPU kaynaklarından faydalanmasını nasıl sağlar?
ton bons

@tonsbons: Tanım gereği. : P Bir emülatör tam olarak aynı şeyi yapmaz - CPU'dan her şeyi taklit eder. Bochs, örneğin, bir emülatördür. Sanallaştırma daha incedir; bir hipervizör konuk işletim sistemini fiziksel CPU üzerinde çalıştırır (temel olarak misafirin CPU'ya sahip olduğunu düşünmesine kandırır). Misafir, sahip olduğunu düşündüğü ayrıcalıklara sahip olmadığından, çekirdek işleri yapmaya çalıştığında "hataları" tetikler. Hiper yönetici bu hataları izler ve bu işlemleri gerçekte olduğu gibi konuklara görünmesini sağlamak için sanal donanımı döndürür.
cHao

0

Sadece bütünlük için, makinenin eylemlerinin çoğaltıldığı, ancak iç kısımları "gerçek" makineden radikal olarak farklı olabilecek kodu kullanarak simülasyon vardır . ("Uçuş simülatörü" nü düşünün.) Genellikle simülatörler "gerçek" makinenin kaynak kodunu derler, ancak tamamen farklı işletim sistemi ve G / Ç olanaklarıyla tamamen farklı bir CPU mimarisini hedefler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.