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
nie zdawałem sobie sprawy, aż dopiero teraz, że '0xdeadbeef' jest rzeczą poza moją klasą OS. – DIMMSum