2012-03-22 7 views
18

Rozumiem, że tabele stron w tle eliminują potrzebę emulowania pamięci fizycznej wewnątrz maszyny wirtualnej.Czym dokładnie są tabele stron w tle (w przypadku maszyn wirtualnych)?

tj.

zamiast: os gość -> VMM + Pamięć wirtualna fizyczna -> system operacyjny hosta -> Wyposażenie gospodarz

to po prostu: os gość -> VMM -> system operacyjny hosta -> Wyposażenie gospodarz

Tabele stron cienia umożliwiają procesowi prawidłowy dostęp do pamięci urządzenia hosta. Nie rozumiem też, jak działają błędy stron (lub ponieważ cała pamięć fizyczna jest obsługiwana przez hosta, host zajmuje się błędami stron, zamianą itd.).

(przez pracę domową mam na myśli uczę się do testu i musimy zrozumieć tę koncepcję).

Odpowiedz

51

Tablice stron cienia są używane przez hipernadzorcę do śledzenia stanu, w którym gość "myśli", że powinny to być tabele stron. Gość nie może uzyskać dostępu do tabel stron sprzętowych, ponieważ wtedy zasadniczo miałby kontrolę nad maszyną. Hiperwizor zachowuje więc "rzeczywiste" odwzorowania (gość wirtualny -> host fizyczny) w sprzęcie, gdy odpowiedni gość wykonuje, i zachowuje reprezentację tabel stron, które gość uważa za "w cieniu" lub przynajmniej tak lubię o tym myśleć.

Należy zauważyć, że w ten sposób unika się etapu tłumaczenia GVA-> GPA.

Jeśli chodzi o wady stronę iść, nic się nie zmienia od tego sprzętowego punktu widzenia (pamiętaj, że hypervisor czyni go tak tabele strona wykorzystywane przez sprzęt zawierać GVA-> Odwzorowania HPA), usterka strona będzie po prostu generować wyjątek i przekierowanie do odpowiedniej procedury obsługi wyjątków. Jeśli jednak wystąpi błąd strony podczas pracy maszyny wirtualnej, ten wyjątek może zostać "przekazany" do hipernadzorcy, który następnie może go odpowiednio obsłużyć.

Hiperwizor musi budować te tabele stron w tle, ponieważ widzi błędy strony generowane przez gościa. Kiedy gość zapisuje mapowanie w jednej ze swoich tabel stron, hiperwizor nie będzie wiedział od razu, więc tabele stron z cieniami nie będą natychmiast "zsynchronizowane" z tym, co gość zamierza. Więc hypervisor będzie budować tabele strona cień, na przykład, w następujący sposób: pisze

  • gość odwzorowanie dla VA 0xdeadbeef się, że to tablice stron (miejsce w pamięci), ale pamiętaj, że to mapowanie nie jest używane przez sprzęt. dostęp
  • gości 0xdeadbeef, co powoduje błąd strony, ponieważ tabele prawdziwa strona nie została zaktualizowana, aby dodać mapowanie
  • Błąd strony jest przekazywany do hypervisor
  • hypervisor patrzy na gości stronie stoły i ogłoszeń są inni z tabel stron tytułowych, mówi "hej, nie utworzyłem jeszcze prawdziwego mapowania dla 0xdeadbeef"
  • Dlatego aktualizuje swoje tabele stron cienia i tworzy odpowiednie mapowanie HPA dla sprzętu, który ma być używany.

poprzednim przypadku jest nazywana cień strona winy ponieważ jest to spowodowane wyłącznie przez wprowadzenie wirtualizacji pamięci. Tak więc obsługa błędu strony zatrzyma się w hiperwizorze, a system operacyjny gościa nie będzie miał pojęcia, że ​​wystąpił.Pamiętaj, że gość może również generować oryginalne błędy stron z powodu mapowań, których jeszcze nie próbował utworzyć, a hiperwizor przesyła je z powrotem do gościa. Zdaj sobie również sprawę z tego, że cały ten proces powoduje, że każda strona błędu występująca podczas wykonywania gościa musi spowodować wyjście do VMM, aby tabele stron cienia mogły pozostać świeże. Jest to kosztowne i jest jednym z powodów, dla których wprowadzono obsługę sprzętu do wirtualizacji pamięci. (here jest jeden szybki wstęp do zagnieżdżone lub rozszerzone tabele strona)

dobre referencje na to this book

+2

nie zdawałem sobie sprawy, aż dopiero teraz, że '0xdeadbeef' jest rzeczą poza moją klasą OS. – DIMMSum

2

Gdy gość pisze mapowanie w jednym ze swoich tablic stron, hypervisor nie będą wiedzieć od razu, więc tabele stron z cieniami nie będą natychmiast "zsynchronizowane" z zamierzeniami gościa.

Nie dokładnie. Tabele stron gościa są tylko do odczytu. Ilekroć w tabeli strony gościa jest aktualizacja (np. Nowe mapowanie), przechwytuje ona hipernadzorcę, a hiperwizor aktualizuje odpowiednio tabelę stron ukrytych, aby była "zsynchronizowana" z gościem.

Referencje: