Techniki wirtualizacji

Wirtualizacja z wykorzystaniem aplikacji

Wirtualizacja Guest systemu operacyjnego jest koncepcją najłatwiejszą do zrozumienia. W tym przypadku fizyczny system komputerowy działa na standardowym niezmodyfikowanym systemie operacyjnym, takim jak Windows, Linux, Unix lub MacOS X. Wirtualizacja wykonuje się w taki sam sposób, jak inne aplikacje działające w systemie, takie jak edytor tekstu lub arkusz kalkulacyjny. Aplikacja tworzy jedną lub więcej maszyn wirtualnych służących do uruchomienia systemu operacyjnego typu "Guest" na komputerze tzw. gospodarza (Hosta). Aplikacja jest odpowiedzialna za uruchomienie, zatrzymywanie i zarządzanie każdą maszyną wirtualną i kontroluje dostęp do zasobów sprzętowych fizycznych w imieniu poszczególnych maszyn wirtualnych. Aplikacja prowadzi także proces znany jako binary rewriting,  który polega skanowaniu strumienia instrukcji wykonywanych w systemie Guest i wymianie uprzywilejowanych instrukcji na bezpieczne emulacje. W tym wypadku system Guest myśli że jest uruchomiony bezpośrednio w sprzęcie, a nie na maszynie wirtualnej w aplikacji. Niektóre przykłady technologii wirtualizacji systemów gości to VMware Server oraz VirtualBox.


Wirtualizacja systemu z wykorzystaniem aplikacji

Jak przedstawiono na powyższym rysunku, systemy operacyjne Guest pracują w maszynach wirtualnych, czyli w aplikacji do wirtualizacji, która z kolei działa na szczycie systemu operacyjnego Hosta w taki sam sposób jak każda inna aplikacja. Oczywiste jest, że wiele warstw pomiędzy systemami operacyjnymi gości i podstawowym sprzętem Hosta nie sprzyja wysokiemu poziomowi wydajności maszyny wirtualnej. Technika ta ma jednak tę zaletę, że żadne zmiany nie są konieczne zarówno u Hosta jak i u systemów Guest i nie jest wymagane specjalne wsparcie wirtualizacji dla procesora.


Wirtualizacja z wykorzystaniem współdzielonego jądra (Shared Kernel Virtualization)

Wirtualizacji z dzielonym jądrem korzysta z architektury systemów operacyjnych Linux i UNIX. Aby zrozumieć, jak działa wirtualizacja jądra współdzielonego, trzeba  najpierw zrozumieć dwa główne komponenty systemów operacyjnych Linux i UNIX. Rdzeniem systemu operacyjnego jest jądro. Jądro obsługuje wszystkie interakcje pomiędzy systemem operacyjnym a sprzętem fizycznym. Drugim składnikiem jest główny system plików, który zawiera wszystkie biblioteki, pliki i narzędzia niezbędne dla funkcjonowania systemu operacyjnego. W wirtualizacji przy użyciu współdzielonego jądra sprawia, że systemy wirtualne gości mają swoje własne systemy plików, ale dzielą jądro systemu operacyjnego Hosta. Struktura ta jest przedstawiona na poniższym rysunku:


Wirtualizacja z wykorzystaniem współdzielonego jądra

Ten typ wirtualizacji jest możliwy dzięki zdolności jądra do dynamicznego zmieniania bieżącego systemu plików (pojęcie znane jako chroot) do innego systemu plików bez konieczności restartowania całego systemu. Wirtualizacja ze współdzielonym jądrem stanowi rozszerzenie tej możliwości. Największą wadą tej formy wirtualizacji jest fakt, że systemy operacyjne Guest muszą być zgodne z wersją jądra, które dzielą. Na przykład, nie można uruchomić program Microsoft Windows jako gość w systemie Linux przy użyciu metody wspólnego jądra. Nie jest to także możliwe dla systemu Guest Linux przeznaczonego dla  wersji 2.6 jądra do dzielenia jądra o wersji  2.4. Linux VServer, Solaris Zones and Containers, FreeVPS i OpenVZ to przykłady wirtualizacji z wykorzystaniem współdzielonego jądra.


Wirtualizacja na poziomie jądra

W przypadku wirtualizacji na poziomie jądra system operacyjny Hosta działa na specjalnie zmodyfikowanym jądrze, któro zawiera rozszerzenia przeznaczone do zarządzania i kontrolowania wielu maszyn wirtualnych, z których każda zawiera system operacyjny gościa. W przeciwieństwie do wirtualizacji ze współdzielonym jądrem, każdy Guest posiada własne jądro, choć są podobne ograniczenia w tym, że systemy operacyjne gości muszą być skonfigurowane pod ten sam sprzęt na, którym pracuje jądro. Przykłady technologii wirtualizacji na poziomie jądra to User Mode Linux (UML) i Kernel-based Virtual Machine (KVM).


Wirtualizacja na poziomie jądra

Wirtualizacja z wykorzystaniem hipernadzorcy

Rodziny procesorów x86  zapewniają szereg poziomów ochrony znanych również jako pierścienie (rings), w których wykonywany może być kod. Pierścień 0 ma przywilej najwyższego poziomu i w tym pierścieniu działa jądro systemu operacyjnego. Mówi się, że kod wykonywany w pierścieniu 0 działa w przestrzeni systemu, trybie jądra lub trybie nadzorcy. Wszystkie inne kody, takie jak aplikacje działające na systemie operacyjnym pracują na mniej uprzywilejowanych pierścieniach, zwykle jest to pierścień 3.


W przypadku wirtualizacji z hipernadzorcą, program zwany hipernadzorcą (znany również jako kontroler maszyny wirtualnej typu 1 - Virtual Machine Monitor lub VMM) działa bezpośrednio na sprzęcie systemu hosta w pierścieniu 0. Zadaniem hipernadzorcy jest obsługa alokacji zasobów i pamięci dla wirtualnych maszyn oraz zapewnienie interfejsu dla administracji wyższego poziomu i narzędzi monitorowania. Oczywiście, z hipernadzorcą zajmującym pierścień 0 procesora, jądra dla wszelkich systemów-gości uruchomionych w systemie muszą pracować w mniej uprzywilejowanych pierścieniach procesora. Niestety, większość jąder jest przeznaczona do pracy w pierścieniu 0 z tego prostego powodu, że wykonują zadania, które są możliwe do zrobienia tylko w tym pierścieniu. Jest to na przykład zdolność do wykonania uprzywilejowanych instrukcji procesora oraz bezpośrednie manipulowanie pamięci. W ostatnich latach opracowano wiele różnych rozwiązań tego problemu, z których każdy jest opisany poniżej:


Parawirtualizacja

W przypadku parawirtualizacji, jądro systemu operacyjnego gościa jest zmodyfikowane specjalnie do pracy w hipernadzorcy. Zazwyczaj polega to na zastępowaniu uprzywilejowanych operacji, które będą uruchamiane tylko w pierścieniu 0 na przerwania wysyłane do hipernadzorcy. Hipernadzorca z kolei wykonuje zadania w imieniu jądra gości. Rozwiązanie to ograniczone jest do open source'owych systemów operacyjnych jak Linux i firmowych systemów operacyjnych, gdzie właściciele wyrazili zgodę na dokonanie niezbędnych modyfikacji kodu w celu określenia hipernadzorcy. Mimo tego ograniczenia, zdolność bezpośredniego komunikowania się jądra z hipernadzorcą znacząco zwiększa wydajność w porównaniu z innymi rozwiązaniami wirtualizacji.

Całkowita wirtualizacja

Całkowita wirtualizacja zapewnia wsparcie dla niezmodyfikowanych systemów-gości. Termin "niezmodyfikowany" odnosi się do jąder systemów operacyjnych, które nie zostały zmienione, aby działać na hipernadzorcy i dlatego nadal potrafią wykonywać czynności uprzywilejowane jak  działanie w pierścieniu 0 procesora. W tym przypadku hipernadzorca zapewnia procesorowi emulację do obsługiwania i modyfikowania uprzywilejowanych i chronionych operacji procesora, zapoczątkowanych przez niezmodyfikowane jądro systemu operacyjnego gościa. Niestety proces emulacji wymaga do pracy czasu i zasobów systemowych co prowadzi do niższego poziomu wydajności w porównaniu do parawirtualizacji.

Wirtualizacja sprzętowa

Wirtualizacja sprzętowa wykorzystuje możliwości wirtualizacji wbudowane w najnowsze procesory z rodziny Intel i AMD. Technologie te, znane jako Intel VT oraz AMD-V, zapewniają rozszerzenia niezbędne do uruchomienia niemodyfikowanych maszyn wirtualnych gości bez wad związanych z wirtualizacją pełną. W sposób bardzo uproszczony,  procesory zapewniają dodatkowy tryb uprawnień powyżej pierścienia 0, w którym hipernadzorca może działać zasadniczo opuszczając pierścień 0, który jest wtedy dostępny dla niezmodyfikowanych systemów-gości.

Jak przedstawiono na powyższej ilustracji, na powierzchni hipernadzorcy, oprócz maszyn wirtualnych, może działać także konsol administracyjna pozwalając administratorom systemu na zarządzanie maszynami wirtualnymi. Rozwiązania oparte na wirtualizacji z użyciem hipernadzorcy to m.in. Xen, VMware ESX Server i Microsoft's Hyper-V technology.







Остання зміна: середа 3 травень 2017 7:16