osdev.labedz.org

Tryb wirtualny

Procesor Intel386 umożliwia uruchamianie programów przeznaczonych dla układów 8086, 8088, 80186 lub 80188 w środowisku trybu chronionego. Programy te uruchamiane są jako część zadania V86 (ang. Virtual 8086) i wykorzystują sprzętową obsługę wielzadaniowości do class="wybrany"starczaną przez tryb chroniony - może być wykonywanych jednocześnie wiele procesów V86 wraz ze zwykłymi procesami w trybie chronionym.

Przeznaczeniem procesów V86 jest stworzenie wirtualnego procesora wykonującego program napisany dla układu 8086. Kompletna 'maszyna wirtualna' składa się zarówno mechanizmów sprzętowych dostarczanych przez układ procesora, ale także oprogramowania systemowego. Tak więc emulacja jest wynikiem współpracy pomiędzy oprzyrządowaniem a oprogramowaniem:

  • sprzęt dostarcza zestaw wirtualnych rejestrów (poprzez TSS), wirtualną przestrzeń adresową (pierwszy megabajt liniowej przestrzeni adresowej zadania) i bezpośrednio wykonuje wszystkie instrukcje, które je wykorzystują
  • oprogramowanie kontroluje interfejsy zewnętrzne 'wirtualnej maszyny' (wejścia/wyjścia, przerwania i wyjątki). Jest to część składowa 'zewnętrznego' systemu operacyjnego w którym te zadania się wykonują. W przypadku operacji wejścia/wyjścia, system może wybrać czy emulować daną operację w sposób programowy, a obsługą portu zająć się w sposób dla niego standardowy, czy też pozwolić na bezpośrednie wykonanie instrukcji.

Oprogramowanie które umożliwia implementację wirtualne maszyny 8086 nazywane są często kontrolerami V86 (ang. V86 monitor).

Zadanie V86 składa się częściowo z programu do wykonania (8086), oraz częściowo z programu w naturalnym trybie pracy 80386, który dostarcza kontroler V86. Musi ono być reprezentowane przez segment stanu zadania 80386 (nie przez 80286 TSS). Procesor wchodzi w tryb V86 w celu wykonania programu 8086, a potem wraca to trybu chronionego w celu wykonania procedur kontroli lub innego zadania i386.

Żeby uruchomić tryb V86, program potrzebuje kontrolera V86, oraz procedur obsługi systemu operacyjnego. Kontroler jest to część kodu, który wykonuje się z najwyższym poziomem uprzywilejowania i zawiera podstawowe procedury inicjacji oraz obsługi wyjątku.

Istnieją dwa sposoby implementacji systemu operacyjnego dla procesora 8086:

Żeby uruchomić tryb V86, program potrzebuje kontrolera V86, oraz procedur obsługi systemu operacyjnego. Kontroler jest to część kodu, który wykonuje się z najwyższym poziomem uprzywilejowania i zawiera podstawowe procedury inicjacji oraz obsługi wyjątku.

  • system operacyjny może być uruchomiony jak część programu 8086. Te rozwiązanie jest stosowane z dwóch powodów:
    • aplikacja 8086 może modyfikować system operacyjny
    • projektowanie i implementacja oddzielnego systemu operacyjnego specjalnie dla trybu 8086 jest kosztowne
  • System operacyjny jest emulowany, bądź też zaimplementowany w kontrolerze V86. Te rozwiązanie stosowane jest z powodu:
    • funkcje systemu operacyjnego 8086 mogą być dostępne dla wielu zadań V86
    • funkcje systemu operacyjnego 8086 mogą być stosunkowo łatwo emulowane przez wywołania systemowe nadrzędnego systemu operacyjnego.