Błąd strony - Page fault

W informatyce błąd strony (czasami nazywany PF lub twardym błędem ) jest wyjątkiem, który jednostka zarządzania pamięcią (MMU) zgłasza, gdy proces uzyskuje dostęp do strony pamięci bez odpowiednich przygotowań. Dostęp do strony wymaga dodania mapowania do wirtualnej przestrzeni adresowej procesu . Poza tym rzeczywista zawartość strony może wymagać załadowania z magazynu zapasowego, takiego jak dysk . MMU wykrywa błąd strony, ale jądro systemu operacyjnego obsługuje wyjątek, udostępniając wymaganą stronę w pamięci fizycznej lub odmawiając nielegalnego dostępu do pamięci.

Błędy prawidłowych stron są powszechne i konieczne do zwiększenia ilości pamięci dostępnej dla programów w dowolnym systemie operacyjnym wykorzystującym pamięć wirtualną , takim jak Windows , macOS i jądro systemu Linux .

Rodzaje

Mniejszy

Jeśli strona jest załadowana do pamięci w momencie generowania błędu, ale nie jest oznaczona w jednostce zarządzania pamięcią jako załadowana do pamięci, nazywa się to błędem strony drugorzędnej lub miękkiej strony. Program obsługi błędów strony w systemie operacyjnym musi jedynie sprawić, by wpis dla tej strony w jednostce zarządzania pamięcią wskazywał stronę w pamięci i wskazywał, że strona jest załadowana do pamięci; nie musi wczytywać strony do pamięci. Może się tak zdarzyć, jeśli pamięć jest współdzielona przez różne programy, a strona jest już przeniesiona do pamięci dla innych programów.

Strona mogła również zostać usunięta z zestawu roboczego procesu, ale jeszcze nie zapisana na dysku lub skasowana, na przykład w systemach operacyjnych korzystających z buforowania stron pomocniczych. Na przykład, HP OpenVMS może usunąć stronę, której nie trzeba zapisywać na dysku (jeśli na przykład pozostała niezmieniona od czasu ostatniego odczytu z dysku) i umieścić ją na liście bezpłatnych stron, jeśli zestaw roboczy jest uważany za zbyt duży. Jednak zawartość strony nie jest nadpisywana, dopóki strona nie zostanie przypisana w innym miejscu, co oznacza, że ​​jest nadal dostępna, jeśli odwołuje się do niej oryginalny proces przed przydzieleniem. Ponieważ te błędy nie wiążą się z opóźnieniem dysku, są szybsze i tańsze niż główne błędy stron.

Poważny

Jest to mechanizm używany przez system operacyjny do zwiększania ilości pamięci programu dostępnej na żądanie. System operacyjny opóźnia ładowanie części programu z dysku, dopóki program nie spróbuje go użyć i zostanie wygenerowany błąd strony. Jeśli strona nie jest załadowana do pamięci w momencie wystąpienia błędu, nazywa się to poważnym lub twardym błędem strony. Program obsługi błędów strony w systemie operacyjnym musi znaleźć wolną lokalizację: wolną stronę w pamięci lub niewolną stronę w pamięci. Ten ostatni może być używany przez inny proces, w którym to przypadku system operacyjny musi zapisać dane na tej stronie (jeśli nie zostały zapisane od czasu ostatniej modyfikacji) i oznaczyć tę stronę jako niezaładowaną do pamięci w swoim procesie tabela stron . Po udostępnieniu miejsca system operacyjny może wczytać dane nowej strony do pamięci, dodać wpis do swojej lokalizacji w jednostce zarządzania pamięcią i wskazać, że strona jest załadowana. W związku z tym poważne błędy są droższe niż drobne błędy i zwiększają opóźnienie dostępu do pamięci masowej podczas wykonywania przerwanego programu.

Nieważny

Jeśli błąd strony występuje w odniesieniu do adresu, który nie jest częścią wirtualnej przestrzeni adresowej , co oznacza, że ​​w pamięci nie może być odpowiadającej mu strony, jest to nazywane błędem nieprawidłowej strony. Program obsługi błędów strony w systemie operacyjnym zazwyczaj przekazuje błąd segmentacji do naruszającego procesu, wskazując, że dostęp był nieprawidłowy; zwykle skutkuje to nieprawidłowym zakończeniem kodu, który spowodował nieprawidłowe odwołanie. NULL jest zwykle przedstawiane jako wskaźnik do adresu 0 przestrzeni adresowej; wiele systemów operacyjnych konfiguruje MMU, aby wskazać, że strona zawierająca ten adres nie znajduje się w pamięci i nie zawiera tej strony w wirtualnej przestrzeni adresowej, więc próby odczytu lub zapisu pamięci, do której odwołuje się pusty wskaźnik, otrzymują nieprawidłowe błąd strony.

Nieprawidłowe warunki

Nielegalny dostęp i błędy nieprawidłowej strony mogą skutkować błędem segmentacji lub błędem magistrali , co może skutkować awarią aplikacji lub systemu operacyjnego . Błędy oprogramowania są często przyczyną tych problemów, ale błędy pamięci sprzętowej, takie jak te spowodowane przetaktowaniem , mogą uszkodzić wskaźniki i spowodować awarię zdrowych kodów.

Systemy operacyjne udostępniają różne mechanizmy zgłaszania błędów stron. System Microsoft Windows używa strukturalnej obsługi wyjątków do zgłaszania błędów nieprawidłowej strony jako wyjątków naruszeń dostępu . Systemy typu UNIX zazwyczaj używają sygnałów , takich jak SIGSEGV , do zgłaszania tych błędów do programów. Jeśli program otrzymujący błąd nie obsłuży go, system operacyjny wykonuje domyślną akcję, zazwyczaj polegającą na zakończeniu uruchomionego procesu, który spowodował stan błędu, i powiadomieniu użytkownika o nieprawidłowym działaniu programu. Windows często zgłasza takie awarie bez wchodzenia w szczegóły. Doświadczony użytkownik może pobrać szczegółowe informacje za pomocą WinDbg i minizrzutu tworzonego przez system Windows podczas awarii. Systemy operacyjne typu UNIX zgłaszają te warunki za pomocą komunikatów o błędach, takich jak „naruszenie segmentacji” lub „błąd magistrali”, i mogą generować zrzut pamięci .

Wpływ na wydajność

Błędy stron obniżają wydajność systemu i mogą powodować zaśmiecanie . Poważne błędy stron na konwencjonalnych komputerach korzystających z dysków twardych mogą mieć znaczący wpływ na ich wydajność, ponieważ przeciętny dysk twardy ma średnie opóźnienie obrotowe 3 ms, czas wyszukiwania 5 ms i czas przesyłania 0,05 ms na stronę . Dlatego całkowity czas stronicowania wynosi blisko 8 ms (= 8000 μs). Jeśli czas dostępu do pamięci wynosi 0,2 μs, błąd strony spowalnia operację około 40 000 razy.

Optymalizacja wydajności programów lub systemów operacyjnych często wiąże się ze zmniejszeniem liczby błędów stron. Optymalizacja skupia się na dwóch głównych aspektach: zmniejszeniu ogólnego zużycia pamięci i poprawie lokalizacji pamięci . Aby zmniejszyć liczbę błędów strony, programiści muszą użyć odpowiedniego algorytmu zastępowania stron, który maksymalizuje liczbę odwiedzin strony. Zaproponowano wiele, takich jak implementacja algorytmów heurystycznych w celu zmniejszenia częstości występowania błędów stron.

Większa pamięć fizyczna zmniejsza również liczbę błędów stron.

Zobacz też

Uwagi

Bibliografia

  • John L. Hennessy, David A. Patterson, Architektura komputerowa, podejście ilościowe ( ISBN  1-55860-724-2 )
  • Tanenbaum, Andrew S. Systemy operacyjne: projektowanie i implementacja (wydanie drugie) . New Jersey: Prentice-Hall 1997.
  • Podręcznik programisty oprogramowania architektury Intel — tom 3: Programowanie systemu

Zewnętrzne linki