Czysta emulacja na przykładzie bochsa

Wprowadzenie

Jako przykład narzędzia do pełnej emulacji warto wymienić Bochs. Jest to uniwersalny program, mogący w pełni modelować sprzęt architektury X86 (386, 486, Pentium, Pentium Pro). Technika pełnej emulacji niemal całkowicie uniezależnia go od platformy sprzętowej, dzięki czemu może być instalowany na różnorodnych typach hostów (x86, PPC, Alpha, Sun, MIPS, ...). Pozwala na obsługę standardowych urządzeń (klawiatura, mysz, monitor, karta graficzna, karta sieciowa, pamięć itp.), umożliwia uruchamianie standardowych systemów operacyjnych (Windows, Linux, DOS) na wymodelowanym sprzęcie.

Nazwa symuluje angielskie "box", co miało odzwierciedlać tradycyjne wyobrażenie ideału wirtualizacji jako pudełka, które może być niezmienione umieszczane w dowolnym innym i odwrotnie.



Tak wygląda Bochs emulujący Windows, uruchomiony w linuksie - jak widać komunikacja Internetowa nie sprawia w tym wypadku najmniejszych problemów
Widoczne logo Bochsa bazuje na tym samym skojarzeniu co jego nazwa


Twórcą programu jest Kevin Lawton. Bochs został napisany w języku C++. Prace rozpoczęto w 1994 roku. Początkowo Bochs funkcjonował jako program komercyjny, w roku 2000, po odkupieniu przez Mandrake stał się narzędziem ogólnodostępnym. Od tego czasu rozwija się dynamicznie wypuszczając raz po raz kolejne wersje (1.2. - czerwiec 2001, 1.3. - grudzień 2001, 1.4. - marzec 2002, 2.0. - grudzień 2002, 2.1. - styczeń 2004, 2.2. - wkrótce).

Zasada działania

Bochs jako narzędzie czystej emulacji stosuje pełne oprogramowanie instrukcji charakterystycznych dla sprzętu hosta, wykorzystywanych w modelowanym systemie. Podczas wykonywania danej czynności na poziomie uruchamianego systemu, Bochs tłumaczy ją na język hosta, przekazuje polecenie do systemu operacyjnego hosta, następnie, po wykonaniu przez host danej akcji, odbiera wynik i przekazuje użytkownikowi (np. podczas wczytywania znaków z klawiatury, Bochs emuluje funkcję charakterystyczną dla sterownika klawiatury w systemie hosta i odbiera od niego odpowiedź, podczas korzystania z monitora, drukarki lub karty sieciowej - przeciwnie, emuluje właściwe dla hosta polecenie przesłania informacji dla danego sterownika systemu hosta). Oczywiście dla każdego typu hosta modelowanie przebiega na nieco innych zasadach, przez co z niektórymi systemami Bochs współpracuje lepiej, dla innych pewne możliwości (np. korzystanie z karty sieciowej) może być ograniczone.

Zalety i wady

Pełność - każda instrukcja hosta ma swój odpowiednik w Bochsie, dzięki czemu modelowane środowisko możliwie wiernie odpowiada oryginałowi, co jest ważne w pracy nad badaniem poszczególnych systemów

Uniwersalność dostosowania do hosta - Bochs może być uruchomiony na wielu różnych nietypowych platformach, dla niektórych z nich trudno byłoby znaleźć inne odpowiednie narzędzie do wirtualizacji

Uniwersalność modelowania systemu - Bochs może emulować dowolny w zasadzie sprzęt architektury typu x86 w sposób umożliwiający zainstalowanie tam dowolnego zgodnego z nim systemu operacyjnego; ma to znaczenie dla nieużywanych już architektur i mniej rozpowszechnionych systemów operacyjnych

Tempo działania - ponieważ modelowanie jednej instrukcji modelowanego środowiska wymaga użycia wielu instrukcji do komunikacji z hostem, należy oczekiwać, że modelowany system będzie działał wolniej niż analogiczny uruchamiany bezpośrednio

Funkcjonalność

- Architektura: 386, 486, Pentium; Pentium Pro w wersji 2.1. jeszcze w ograniczonym zakresie, - w następnej jednak planuje się go znacznie rozszerzyć

- Współdziałanie ze sterownikami: myszy, CDROM, Sound Blaster

- Klawiatura - możliwe nawet zdefiniowanie modelu innego niż standardowa USA

- Obsługa różnorodnych łączy (szeregowe, równoległe, PCI, USB jeszcze w fazie dopracowywania)

- Obsługa dżojstika tylko dla Windows i linuksa

- adresowanie 16- lub 32-bitowe

- Modelowanie współbieżności - Bochs może emulować system zawierający nawet do 15 procesorów wirtualnych, natomiast: nie jest możliwa współpraca z więcej niż jednym procesorem hosta (niestety, uruchomienie go na sprzęcie wieloprocesorowym nie przyśpieszy działania)

- opcja debuggera - można śledzić kolejno wykonanie każdej instrukcji systemowej, co stanowi kolosalne ułatwienie w zakresie poznawania różnorodnych systemów operacyjnych


Bochs korzysta z przechowywanych obrazów systemów plików. W ten sposób emulowany jest twardy dysk i stacje dyskietek. Obrazy sa konfigurowane w pliku "bochsfs" - plik konfiguracyjny zapisywany podczas instalacji. Możliwe jest odłączanie i dołączanie obrazów systemów plików odpowiadającym dyskietkom w trakcie działania programu. Również dodatkową funkcjonalnością jest możliwość całkowitej konfiguracji w trakcie działania programu (!)

Przykłady działania



Klasyczna emulacja Windows 2000


Przy okazji opis interfejsu:

- przyciski 1 - 3 (od lewej) - odłączanie i dołączanie obrazów stacji dyskietek i CDROM (w danym momencie dołączony tylko obraz dyskietki w stacji A)
- przycisk 4 - włączanie i wyłączanie obsługi myszy wewnątrz emulowanego środowiska (w danym momencie wyłączona - kliknięcie widocznego przycisku "Start" nie przyniesie efektu)
- przycisk 5 - włączanie i wyłączanie obsługi skrótów z klawiatury
- przycisk 6 - kopiowanie zawartości okna do schowka (działa tylko podczas emulowania środowiska w trybie tekstowym, w danym wypadku nie zadziała)
- przycisk 9 - konfiguracja podczas działania programu
- przyciski 10 - 11 - resetowanie i wyłączanie Bochsa




Kolejna emulacja Windows tym razem uruchamiana w środowisku linuksa

Możliwe zastosowania

Ogólne symulowanie danego środowiska związanego z architekturą x86, ze względu na ograniczone tempo działania, do uruchamiania aplikacji, w których jest ono sprawą kluczową (czyli zdecydowanej większości) lepiej stosować narzędzia reprezentujące dwie pozostałe grupy. Wskazane jest za to zastosowanie podczas modelowania systemów opartych na starszych architekturach (np. 386) oraz podczas pracy z nietypowym środowiskiem hosta (innym niż x86). Ponadto pełność odwzorowania instrukcji modelowanego środowiska umożliwia np. testowanie własnoręcznie napisanego systemu operacyjnego (opcja debugowania, niemożliwa bez znajomości odpowiedników każdej instrukcji).





Na koniec ostatnie - zastosowanie autorskie podane przez Kevina Lawtona - twórcę Bochsa
(jak twierdził postacie poruszały się "majestatycznie")