Loading AI tools
Z Wikipedii, wolnej encyklopedii
Wirtualizacja – proces symulowania przez oprogramowanie istnienia zasobów logicznych, które wykorzystują ustalone podczas konfiguracji zasoby fizyczne. Wirtualna maszyna stosuje wirtualizację w celu emulowania pracy maszyny z danym systemem operacyjnym, pozwalając przez to badać zachowanie tej maszyny i jej oprogramowania, bez wpływania na realny system operacyjny.
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ą 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[2].
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 – pozwala jednocześnie uruchomić wiele systemów operacyjnych na tej samej platformie sprzętowej i systemowej przy maksymalnej możliwej wydajności.
Wirtualizacja jest połączeniem podstawowych zalet emulacji pełnej oraz emulacji API[3]. 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 liczby 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.
Parawirtualizacja jest to jedna lub wiele maszyn wirtualnych działających obok systemu host. Parawirtualizacja korzysta z hypervisora typu 1, monitor działa tutaj bezpośrednio na sprzęcie i udostępnia go (lub nie) systemom guest. Jeden z wirtualizowanych systemów pełni rolę zarządzającą, może rozdzielać zasoby pośród pozostałych systemów i pełnić pełną kontrolę nad maszyną wirtualną i jej zasobami. System, który mógłby być uruchomiony jako guest za pomocą parawirtualizacji, musi mieć zmodyfikowane jądro w taki sposób, aby zamiast odwołań do sprzętu, jak również standardowych odwołań do sprzętu, które są niedozwolone podczas parawirtualizacji, trzeba używać odwołań typu hypercall. Odwołanie to po prostu interfejs pomiędzy monitorem a systemami guest. Mechanizm zapewnia tutaj bardzo dobrą wydajność, bardzo zbliżoną do natywnego działania systemu. Bardzo dobra wydajność systemów guest oraz łatwość w modyfikowaniu jądra systemu guest w celu przystosowania go do parawirtualizacji jest jego zaletą. Natomiast wadą jest konieczność modyfikowania systemu guest, ponieważ nie zawsze jest możliwe uzyskanie takiej wydajności. Niestety modyfikacja jądra niesie za sobą również koszty związane z dostosowaniem systemu guest do odpowiedniego hypervisora oraz musimy tę procedurę ponowić dla każdego innego hypervisora. Implementacją parawirtualizacji w postaci VMI (Virtual Machine Interface) jest interfejs komunikacji pomiędzy systemem guest a hypervisorem proponowanym przez VMware. Można również powiedzieć, że VMI jest to próba ujednolicenia interfejsu dla wirtualizacji. Celem było także stworzenie jednego interfejsu komunikacji, który byłby zaimplementowany na wielu hypervisorach i w miarę łatwa byłaby implementacja na systemach guest. Zaletą VMI jest to, że implementacja ta nie jest przynależna do jednego hypervisora tylko jest otwarta. Implementacja systemu guest dałaby raz możliwość uruchomienia go we wszystkich liczących się hypervisorach.
Pełna wirtualizacja pozwala nam na wirtualizowanie dowolnie wybranego niezmodyfikowanego systemu operacyjnego. Największą zaletą pełnej wirtualizacji jest to, iż nie narzuca ona nam żadnych ograniczeń ani wymagań co do systemu guest. Wydajność w takim rozwiązaniu jest niestety mniejsza niż w przypadku parawirtualizacji. Zarówno za pomocą hypervisora typu 1, jak i typu 2 może być zrealizowana pełna wirtualizacja. Głównym wyzwaniem pełnej wirtualizacji jest realizowanie i przechwytywanie uprzywilejowanych instrukcji jądra guest, tak jak na przykład operacja I/O, przerwań czy operacji na pamięci. Większość instrukcji systemu guest wykonywana jest bezpośrednio na procesorze przez hypervisora, natomiast te instrukcje, które wychodzą poza uprawnienia systemu guest, jak też odwołują się do sprzętu, powinny być przechwycone i emulowane. W przypadku kiedy zostanie użyty hypervisor typu 1 wymagane jest odpowiednie rozszerzenie sprzętowe, które umożliwia wirtualizację. Pełną wirtualizację określa się również pojęciem natywna wirtualizacja oraz wirtualizacja wspierana sprzętowo. Jeśli do pełnej wirtualizacji użyjemy hypervisora typu 2, to będziemy ją realizować przez mechanizmy takie jak binary translation oraz direct execution, często ze wsparciem pamięci podręcznej tych transakcji w postaci cache, można również użyć kompilacji instrukcji just in time.
By być możliwie ścisłym, o pierwszym szeroko znanym zastosowaniu wirtualizacji można mówić przy tworzonym we współudziale Uniwersytetu w Manchesterze i firm Ferranti oraz Plessey komputerze ATLAS. W zastosowanej architekturze część instrukcji zewnętrznych wykonywana była przez sprzęt, a część zostawała przechwycona przez program nadzorujący. Dziś pełniłby on jeszcze dużo innych funkcji i zostałby nazwany systemem operacyjnym. Wtedy jednak zajmował się wykonywaniem w odpowiedni sposób przechwyconych wywołań, a ta skromna wirtualizacja była wyłącznie efektem ubocznym dość rewolucyjnych rozwiązań zastosowanych w komputerze.
Faktyczne zastosowanie wirtualizacji pojawiło się dopiero w połowie lat 60. w wyniku prac laboratoriów IBM. Wtedy właśnie centrum badawcze Watsona zakończyło projekt M44/44X, który składał się z fizycznej maszyny M44, oznaczanej też IBM 7044 oraz maszyn wirtualnych 44X. Każda z nich operowała na pamięci M44, korzystając przy tym z wieloprogramowania i pamięci wirtualnej. Wkrótce potem stworzono kolejne maszyny wirtualne: CP40 dla IBM 860/40, CP67 dla 360/67, a także wiele innych. Zwykle maszyny wirtualne były idealnymi kopiami fizycznego sprzętu, obsługiwanymi przez monitor maszyn wirtualnych, kontaktujący się bezpośrednio z systemem komputerowym. W ten sposób mogło być tworzone wiele kopii tego samego systemu operacyjnego, co pozwalało znacząco zwiększyć wykorzystanie procesora na komputerach klasy Mainframe. Wielu użytkowników mogło korzystać z tej samej fizycznej maszyny, dzięki czemu – choć tak wiele czasu zabierała interakcja między komputerem i człowiekiem – procesor był w większym stopniu wykorzystywany.
Od tego czasu wirtualizacja była nadal rozwijana, lecz do momentu, gdy komputery osobiste uzyskały wystarczająco dużą moc obliczeniową, zastosowanie maszyn wirtualnych w gospodarstwach domowych lub niewyspecjalizowanych firmach było ograniczone. Druga połowa poprzedniego dziesięciolecia to jednak czas dość gwałtownego rozwoju technologii wirtualnych – pojawił się język Java korzystający z maszyn wirtualnych, działalność zaczęła również firma VMware, specjalizująca się w oprogramowaniu do wirtualizacji. Również Microsoft dołączył do rywalizacji w tej branży, podobnie jak później Google. W wyniku konkurencji część swych produktów dotyczących wirtualnych serwerów Microsoft i VMware zaczęły udostępniać za darmo. Wraz ze wzrostem mocy obliczeniowej i zmniejszania kosztów pamięci można oczekiwać popularyzacji maszyn wirtualnych i używania ich także w domowych stanowiskach.
Przykłady, w których występują elementy wirtualizacji.
Nazwa maszyny wirtualnej | VMware ESX Server | VMware Server | VMware Workstation | Xen | OpenVZ | Microsoft Hyper-V | QEMU | KVM | VirtualBox | VServer |
---|---|---|---|---|---|---|---|---|---|---|
System gospodarza (Dystrybucja, Wersja) | ESX | Linux, Windows | Linux, Windows | Linux | Linux (Centos, Debian) | Windows Server, Windows 8.1 Professional i Enterprise | Linux | Linux | Linux, Windows, OS X, Solaris, OpenSolaris, | Linux (PLD) |
Rodzaj wirtualizacji | Pełna | Parawirtualizacja ewentualnie pełna | Kontenery | Pełna | Pełna, w przypadku sieci możliwość użycia parawirtualizacji | Kontenery | ||||
Hipernadzorca w kernelu | Tak | Nie | Tak | Tak | Tak | |||||
Wirtualizacja sieci | Tak | Tak | Tak, korzysta z linuksowych bridży, VDE lub Open vSwitch | Tak | Tak | Tak | Nie | |||
System gościa | Linux, Windows (od XP), BSD, | Dowolny Linux, Windows lub BSD | Linux (kernel gospodarza) | Windows (systemy klienckie od XP, serwerowe od Windows 2000), SUSE od wersji 10 SP3, Red Hat od wersji 5.2 | Dowolny, z wyjątkiem PC-BSD 1.3, Novell Netware 6.5 oraz BeOS R5. | Linux (Kernel gospodarza) |
W budowie systemów operacyjnych (pamięć wirtualna, technologia mikrojądra, wirtualny system plików VFS (ang. Virtual File System), wirtualny system operacyjny):
W sieciach komputerowych, w systemach serwerów sieciowych (VPN – Virtual Private Network, VPS – Virtual Private Server):
W partycjonowaniu, skupianiu, rozszczepianiu i łączeniu zasobów:
w dzieleniu pracy i dostępu procesora do pamięci (zobacz: ISA – Instruction Set Architecture):
i poprzez uaktywnienie wirtualnego trybu pracy procesora (a tryb jest związany m.in. z dostępem procesora do pamięci), pracy chronionej przez system operacyjny i oprogramowanie obsługujące V86 – Virtual 8086, VDS – Virtual DMA Specification, VCPI – Virtual Control Program Interface lub DPMI – DOS Protected Mode Interface:
W sprzęcie fizycznym – w mikroprocesorach:
Ten artykuł należy dopracować |
Różnice pomiędzy wirtualizacją serwera a wirtualizacją desktopu dla każdego użytkownika mogą być niejasne i niezauważalne w momencie, kiedy nie zna się różnic pomiędzy tymi rodzajami wirtualizacji. Mogą zostać zwirtualizowane również technologie, także lista urządzeń, zasobów czy technologii staje się dość długa: dane, desktopy, serwery, sieci, a także systemy operacyjne. Zdefiniuję tutaj technologie wirtualizacji, czyli serwerów oraz desktopów, co wyjaśni różnice między nimi.
Wirtualizację serwerów definiuje się jako dzielenie, inaczej partycjonowanie, fizycznego serwera na dużo mniejsze serwery wirtualne. W tym przypadku zasoby sprzętowe danego serwera są niewidoczne albo ukrywane dla danych użytkowników. Zasoby fizycznego serwera za pomocą oprogramowania są podzielone pomiędzy kilka środowisk wirtualnych. Jednym z typowych i powszechnych zastosowań wirtualizacji serwera są tak zwane serwery www (World Wide Web). Jak również popularnym dostarczaniem niedrogich usług hostingowych są wirtualne serwery internetowe. Zamiast wykorzystywać do tego kilka osobnych komputerów wiele wirtualnych serwerów obcuje na jednym serwerze fizycznym w postaci wirtualnych maszyn.
Wirtualny serwer można utworzyć na kilka sposobów, poniżej przedstawię te reprezentatywne:
Wirtualizacja danego serwera daje dużo korzyści. Każdej z wirtualnych maszyn pozwala pracować na macierzystym systemie operacyjnym, jak również mogą być one wyłączane oraz uruchamiane niezależnie od siebie. Zwirtualizowane serwery redukują także koszty, czyli ograniczają ilość niezbędnego hardware, jak również dana wirtualizacja w pełni korzysta z zasobów komputera co znacznie obniża koszty operacyjne (czyli zmniejszenie kosztów obsługi za pomocą użycia mniejszej ilości fizycznych serwerów). Wirtualizacja serwerów jest również ważna dla centrów danych ponieważ pozwala na dobre wykorzystanie miejsca na danych nośnikach przenośnych oraz zmniejsza zużycie energii.
Wirtualizacja desktopów (nazywana również wirtualizacją klienta) jest kwalifikowana jako technologia, która ma na celu odizolowanie środowiska (oprogramowania i systemu) fizycznej jednostki PC od komputera osobistego. Dana technologia wirtualizuje komputery osobiste w taki sposób, aby były udostępniane zwykłym użytkownikom za pomocą sieci. Odbiorcy używają wirtualnego desktopu w taki sam sposób jakby korzystali ze stacjonarnego komputera. Zaletą takiej wirtualizacji jest możliwość zdalnego połączenia oraz zalogowania się do własnego desktopu z każdego miejsca. Takim typowym wykorzystaniem wirtualizacji są centra danych, gdzie przechowuje się i hostuje spore ilości spersonalizowanych desktopów. Jedną z popularnych metod wirtualizacji desktopów jest VDI (Virtual Desktop Infrastucture/Interface). Ta wirtualizacja korzysta z hardware’u, jak i software’u. VDI hostuje środowisko wirtualne w wirtualnej maszynie (VM – Virtual Machine), która uruchomiona jest na scentralizowanym lub zdalnym serwerze.
Dominacją zwirtualizowanych desktopów nad wolno stojącymi, tradycyjnymi jest to, że nie potrzebują one swojego hardware’u, software’u czy systemu operacyjnego. Używanie wirtualizacji desktopów zmniejsza również koszt wdrażania aplikacji oraz obniża czas w momencie braku dostępu do zasobu, na przykład sprzętu.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.