Kryteria Popka-Goldberga
Kryteria Popka-Goldberga – kryteria właściwego funkcjonowania maszyny wirtualnej oraz kryteria możliwości zbudowania takowej na zadanej architekturze komputera przedstawione w 1974 roku przez Geralda J. Popka i Roberta P. Goldberga.
Warunki
[edytuj | edytuj kod]Maszyna wirtualna w myśli Popka i Goldberga by być skuteczna musi spełniać trzy warunki:
- Odpowiedniość – program działający na maszynie wirtualnej musi zachowywać się w dokładnie taki sam sposób, jak na rzeczywistym sprzęcie;
- Kontrola zasobów – wirtualna maszyna musi w pełni kontrolować wszystkie zasoby, które są wirtualizowane;
- Wydajność – większa część instrukcji musi być wykonywana bez udziału maszyny wirtualnej;
Zbiory instrukcji
[edytuj | edytuj kod]W systemie operacyjnym wyróżniamy trzy zbiory instrukcji dostępnych na danej architekturze:
- Instrukcje uprzywilejowane – ich efektem jest przerwanie lub wywołanie systemowe w trybie użytkownika lub ich brak w trybie jądra;
- Instrukcja wrażliwe ze względu na kontrolę – w trakcie wykonywania mogą zmienić konfigurację zasobów systemowych;
- Instrukcje wrażliwe ze względu na wykonanie – ich działanie jest zależne od konfiguracji systemu;
Warto pamiętać, że nie są ani rozłączne, ani nie sumują się do zbioru wszystkich instrukcji architektury.
Twierdzenie
[edytuj | edytuj kod]Z tą wiedzą możemy poznać twierdzenie przedstawione przez Popka i Goldberga:
Dla każdego standardowego komputera trzeciej generacji wirtualna maszyna może zostać skonstruowana, jeśli zbiór instrukcji wrażliwych jest podzbiorem zbioru instrukcji uprzywilejowanych.
Z tegoż twierdzenia wynika tyle, iż każda operacja, która mogła spowodować niepoprawne działanie maszyny wirtualnej, powoduje przerwanie lub wywołanie systemowe, dzięki czemu maszyna może podjąć odpowiednie kroki. Cała reszta instrukcji nieuprzywilejowanych jest przekazywana po prostu do fizycznego sprzętu, aby uzyskać odpowiednią wydajność.
Okazuje się jednak, że można zbudować maszynę wirtualizującą architekturę nie spełniającą założeń twierdzenia, choć zwykle powoduje to utratę wydajności lub nakłada inne ograniczenia. Przykładami są parawirtualizacja oraz dynamiczna rekompilacja z wykrywaniem wrażliwych instrukcji.