Previous Up

 Next


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

 Next