Previous | Up |
Wstęp
Tym, czego potrzebuje wielu współczesnych użytkowników komputerów jest bez wątpienia możliwość jednoczesnego korzystania na jednym
komputerze z aplikacji napisanych z myślą o różnych systemach operacyjnych.
Wyobraźmy sobie na przykład, że pracujemy pod Linuksem i mamy potrzebę skorzystania z aplikacji napisanej pod Windowsa. Najbardziej
oczywistym sposobem rozwiązania tego problemu jest zrestartowanie komputera i ponowne jego uruchomienie pod innym systemem
operacyjnym - Windowsem. Jest to jednak niezbyt wygodne.
W prezentacji tej przedstawimy zdecydowanie wygodniejsze rozwiązania tego problemu oraz niezbędne do tego narzędzia.
Trzy podstawowe techniki to:
1. Czysta emulacja
2. Emulacja OS/API
3. Wirtualizacja
1. Czysta emulacja
Jest to zduplikowanie funkcji jednego systemu w innym, dzięki czemu ów drugi system zachowuje się tak jak pierwszy.
Czysta emulacja używana jest gdy potrzebujemy uruchomić system operacyjny oraz aplikacje oparte na architekturze x86 na platformie
nie będącej x86. Używając przenośni można powiedzieć, że tworzymy architekturę x86 za pomocą samego software'u.
2. Emulacja OS/API
Ponieważ zazwyczaj aplikacje działają w innej przestrzeni niż sam system operacyjny, a komunikacja między nimi rozwiązana jest za pomocą
zbioru API (Application Programming Interface), alternatywną metodą na uruchomienie aplikacji zaprojektowanych dla innego systemu
operacyjnego jest przejęcie i zaemulowanie samych poleceń API przy użyciu istniejącego systemu operacyjnego.
Używając tej techniki aplikacje mogą być uruchamiane w ten sam sposób jak na macierzystym systemie operacyjnym, zatem jedną z korzyści jest
ich wysoka wydajność.
Od kiedy API są emulowane, pierwotny system operacyjny, dla którego została napisana dana aplikacja, nie jest potrzebny. Niewątpliwą zaletą
takiej sytuacji jest fakt, że nie potrzebujemy już kupować licencji na ten system.
Niestety ta strategia emulacji jest możliwa tylko dla systemów działających na architekturze x86, dla których jest zaimplementowana emulacja
API.
3. Wirtualizacja
Zastanówmy się, dlaczego nie można uruchomić dwóch systemów operacyjnych na tym samym komputerze.
Po pierwsze, akcesoria takie jak karty graficzne, kontrolery dysków itp. nie dają się sterować różnym systemom operacyjnym naraz. Ogólnie,
sprzęt jest zaprojektowany tak, by być obsługiwanym wyłącznie przez jeden sterownik.
Dodatkowo, cechy procesora IA32 są konfigurowane i używane tylko przez jeden system operacyjny, włączając w to mechanizmy zabezpieczeń,
mechanizmy segmentacji itp.
Inne skierowane na aplikacje cechy i instrukcje nie są problemem i potencjalnie mogą być używane.
Większość instrukcji może być z powodzeniem wykonywana na różnych systemach operacyjnych, a jedynie niektóre mniejsze obszary nie są
kompatybilne. Przez to ogólną strategią wirtualizacji jest stwarzanie zdolności do wykonywania jak największej ilości kompatybilnych
instrukcji na rzeczywistym procesorze. Wówczas należy wykryć instrukcje niekompatybilne i emulować ich spodziewane zachowanie. Jest to więc
technika swego rodzaju pół-emulacji.
Architektura procesora x86 nie daje możliwości do naturalnego wykrywania wszystkich przypadków użycia instrukcji, które chcemy wirtualizować.
Używa się więc pewnych technik programowych tak, by wykrywać pozostałe przypadki. Jako, że z całą pewnością nie można spowodować tego, by oba
systemy operacyjne zarządzały tym samym urządzeniem I/O, należy więc programowo emulować dany zestaw urządzeń peryferyjnych, którymi może
sterować zwirtualizowany system operacyjny.
Korzyści z wirtualizacji to m.in.:
Źródła :
http://www.floobydust.com/virtualization/lawton_1999.txt
Previous | Up |