Kryteria Popka-Goldberga
![]() | Ten artykuł od 2010-04 wymaga zweryfikowania podanych informacji. Należy podać wiarygodne źródła w formie przypisów bibliograficznych. Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte. Sprawdź w źródłach: Encyklopedia PWN • Google Books • Google Scholar • Federacja Bibliotek Cyfrowych • BazHum • BazTech • RCIN • Internet Archive (texts / inlibrary) Po wyeliminowaniu niedoskonałości należy usunąć szablon {{Dopracować}} z tego artykułu. |
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
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
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
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.