Maszyna wirtualna

 

 

 

Maszyna wirtualna (ang. virtual machine, VM) - ogólna nazwa dla programów tworzących środowisko uruchomieniowe dla innych programów.

Maszyna wirtualna kontroluje wszystkie odwołania uruchamianego programu bezpośrednio do sprzętu lub systemu operacyjnego i zapewnia ich obsługę. Dzięki temu program uruchomiony na maszynie wirtualnej "myśli", że działa na rzeczywistym sprzęcie, podczas gdy w istocie pracuje na sprzęcie wirtualnym, "udawanym" przez odpowiednie oprogramowanie (maszynę wirtualną).

Wykonywanym programem może być zarówno pojedyncza aplikacja jak i cały system operacyjny lub nawet kolejna maszyna wirtualna. Są one zupełnie odizolowane przez maszynę wirtualną od maszyny fizycznej, w odróżnieniu od klasycznego systemu operacyjnego, który tylko zarządza uruchamianiem aplikacji na maszynie fizycznej.

Maszyny wirtualne to m.in.:

Różnice między poszczególnymi typami takich maszyn są płynne. Na przykład wirtualna maszyna Javy jest powszechnie znana jako samodzielny interpreter, ale ponieważ istniały komputery, które potrafiły wykonywać programy w kodzie bajtowym Javy bezpośrednio, można ją także traktować jako emulator tych maszyn.

Maszyny wirtualne pozwalają uruchamiać programy napisane dla innych architektur bez żadnych zmian lub tylko z niewielkimi modyfikacjami (parawirtualizacja). Daje to dużą niezależność od fizycznego sprzętu, choć kosztem dodatkowej warstwy abstrakcji, która wiąże się z pewnymi niedogodnościami: oprogramowanie wirtualizujące samo wymaga części czasu procesora i pamięci operacyjnej, zwiększa także stopień komplikacji układu, a więc i ryzyko błędu. Ponieważ jednak wydajność współczesnych komputerów ciągle rośnie, a osobne warstwy ułatwiają znajdowanie błędów, coraz częściej jest to cena, jaką warto zapłacić za dodatkowe możliwości. Podobne motywy stały za odejściem w informatyce od asemblera w stronę języków wysokiego poziomu (C, programowania obiektowego).

Elementy wirtualizacji pojawiają się zarówno w sprzęcie fizycznym (procesory firmy Transmeta, technologie Virtualization Technology w kościach Intela oraz Pacifica w procesorach AMD) jak i w budowie niektórych systemów operacyjnych (technologia mikrojądra czy wręcz wirtualne systemy operacyjne, które pracują jako aplikacje dla innych systemów), i choć są uznawane jako obiecujące na przyszłość, to jak dotąd nie stały się jeszcze popularne.

Idealna maszyna wirtualna w pełni naśladuje działanie fizycznego sprzętu, teoretycznie możliwe jest więc dowolne i nieograniczone kombinowanie różnych warstw wirtualizacji, w tym np. rekursywne uruchamianie wirtualnych maszyn. Jest to możliwe dzięki przeźroczystości maszyny wirtualnej: każda kolejna maszyna wirtualna zachowuje się tak, jakby działała na sprzęcie fizycznym, nawet jeśli jego rolę pełni inna maszyna wirtualna. Ograniczeniem jest jedynie ilość dostępnych fizycznych zasobów systemowych sprzętu (tak, jak kolejne babeczki w matrioszkach osiągają w końcu zbyt małe rozmiary, aby w środku umieścić jeszcze mniejszą).

 

Maszyny wirtualne są używane do różnych celów:

Poszczególne korzyści mogą występować łącznie, na przykład uruchamianie wielu wirtualnych maszyn na dużym komputerze odbywa się pod ścisłą kontrolą stanu ich działania.

Microsoft Virtual Machine (również Microsoft VM lub MVM) – umożliwia uruchamianie w oknie przeglądarki internetowej niewielkich aplikacji (apletów) napisanych w języku Java pod systemami operacyjnymi z rodziny Microsoft Windows. Są to przeważnie gry internetowe, komunikatory i czaty, wszelkiego rodzaju kalkulatory oraz animacje i prezentacje graficzne. Microsoft VM brak jest w systemie Windows XP, trzeba ją osobno zainstalować. W tym celu należy odwiedzić witrynę Microsoftu, ewentualnie pobrać środowisko Java Runtime Environment (JRE) firmy Sun Microsystems ze strony http://www.java.com/.

Wirtualizacja – szerokie pojęcie odnoszące się do abstrakcji zasobów w różnych aspektach komputeryzacji.

Wirtualizacja umożliwia efektywniejsze wykorzystanie istniejących zasobów sprzętowych środowiska informatycznego poprzez dowolne (w ramach możliwości sprzętowych czy programowych oraz założeń projektowych) modyfikowanie cech wirtualizowanych zasobów, dostosowując je do wymagań użytkownika.

Jedną z pierwszych szeroko stosowanych technik wirtualizacji była technika wirtualizacji pamięci operacyjnej. Obecnie technika ta jest powszechna nie tylko w superkomputerach, serwerach czy komputerach osobistych, ale także w systemach wbudowanych. Inną techniką wirtualizacji jest wirtualizacja sprzętu komputerowego w celu umożliwienia jednoczesnego uruchamiania wielu systemów operacyjnych.

W obrębie pojęcia "wirtualizacja" można wyróżnić trzy grupy rozwiązań[1]:

Emulacja API – rozwiązanie programowe wykorzystujące sposób działania aplikacji jako rozdzielnych procesów w stosunku do systemu operacyjnego. Aplikacje wykorzystują interfejs API w celu dokonania procesu komunikacji z systemem operacyjnym. Emulatory API wprowadzają do głównego systemu operacyjnego otoczenie API pochodzące z innego systemu i niezbędne dla danej, emulowanej aplikacji. Tak działa Wine (ang. Wine is not emulator) będący implementacją WinAPI dla środowiska systemu Unix/X11. Rozwiązanie takie eliminuje konieczność posiadania całego systemu operacyjnego, pod którym działa emulowany program. Wymaga ono tylko emulacji jego interfejsu API. Jeżeli jednak emulowany program uruchamiany za pomocą Wine pominie standardowe biblioteki zawarte w WinAPI, to prawdopodobnie zakończy się to błędem.

Emulacja pełna – stanowi sposób na uruchamianie aplikacji pochodzących z niekompatybilnego komputera, w stosunku do wykorzystywanego (np. PC/Mac). Emulowane są podstawowe podzespoły komputera (CPU, RAM, HDD, CD itp.) wraz z systemem operacyjnym (virtual OS), zapewniając dużą przenośność przy pewnym spadku wydajności. Praktycznie każda operacja na uruchomionym wirtualnym systemie operacyjnym jest emulowana. Emulatory pełne są zatem wirtualnymi odpowiednikami całego komputera. Typowy emulator wykonuje w pętli wszystko to, co robiłby rzeczywisty procesor maszyny emulowanej, co prowadzi do spadku wydajności pracy komputera.

Wirtualizacja – pozwalają jednocześnie uruchomić wiele systemów operacyjnych na tej samej platformie sprzętowej i systemowej przy maksymalnej możliwej wydajności. Wirtualizacja pozostaje często tylko perspektywą ze wzg. na problemy w stosowaniu jej na większości współczesnych platform.

Wirtualizacja jest połączeniem podstawowych zalet emulacji pełnej oraz emulacji API. Opiera się ona na uruchamianiu w maszynie wirtualnej systemu operacyjnego, rezygnując z uniwersalności emulowania wielu architektur komputerów (np. 68K). Ograniczenie się wyłącznie do wykorzystywanej platformy sprzętowej umożliwia wykonywanie pewnej ilości procesów systemu operacyjnego gościa (systemu emulowanego) bezpośrednio na zasobach sprzętowych komputera. Dopiero w sytuacji, gdy operacje takie nie dadzą się bezpośrednio wykonać wirtualizator emuluje je. Oznacza to, że wirtualizator uruchamia system operacyjny tak, aby mógł on koegzystować z systemem głównym i osiągać maksymalną zgodność i wydajność.

Teoretycznie wirtualizator powinien wykonywać bez emulacji wszystkie operacje w trybie nieuprzywilejowanym. W praktyce jednak dana architektura (np. PC x86) musiałaby zostać specjalnie do tego celu zaprojektowana (np. technologie AMD-V, Intel VT-x).

Przykładowo wirtualizator firmy VMWare Inc. o nazwie VMWare Workstation uruchamia dany system operacyjny w wirtualnym środowisku sprzętowym tworzonym w ten sposób, że system emulowany wykonuje operacje bezpośrednio na możliwie największej ilości zasobów sprzętowych, w szczególności na procesorze.

Typy wirtualizacji