Przewidywanie błędów braku strony
Celem zadania jest pokazanie wpływu jaki ma zmiana mechanizmu
błędów braku i ochrony strony na funkcjonowanie systemu.
Zadaniem studenta jest takie zmodyfikowanie jądra systemu Linux,
aby rozszerzyć je o funkcję heurystycznego przewidywania błędów
braku strony. U założeń zadania leży chęć przyspieszenia systemu,
lecz być może okaże się, że większość programów systemowych nie
zachowuje się zgodnie oczekiwaniem i przyspieszenie okaże się
nieznaczące.
Omawianie zagadnienia należy rozpocząć od zauważenia następujących
faktów:
- błędy braku strony są generowane przez procesor w sytuacji kiedy
nie jest możliwe odwołanie się do żądanego obszaru pamięci. W systemie
operacyjnym Linux takie zachowanie jest wykorzystywane do
implementowania mechanizmów pamięci wirtualnej i ochrony procesów.
Dokładny opis tego mechanizmu wraz z przykładami zastosowań można
znaleźć tutaj.
- brak lub naruszenie ochrony strony powoduje powstanie sytuacji
wyjątkowej i wygenerowanie przerwania
- wykonanie procedury obsługi przerwania wiąże się z pewnym
narzutem czasowym potrzebnym na zapamiętanie stanu maszyny,
zmianę kontekstu, wykonanie procedury, ponowną zmianę kontekstu
i odtworzenie sytuacji sprzed wykonania przerwania
- każdy błąd strony wiąże się z koniecznością przeszukiwania
struktur systemowych w poszukiwaniu obszaru pamięci odpowiadającego
miejscu wystąpienia błędu. Co prawda struktury są zorganizowane
jako drzewo AVL, ale jego przeszukanie także zabiera czas. Gdyby
udało się wykonywać to szukanie nie dla każdego błędu strony,
możnaby w ten sposób zaoszczędzić sporo czasu.
- operacje wykonywane w odpowiedzi na błąd strony (t.j. wczytanie
strony z dysku, przydział nowej strony, etc.) mają pewne narzuty
czasowe (początkowe i końcowe), które możnaby ograniczyć gdyby
kilka takich operacji połączyć w jedną.
Analiza tych informacji podsuwa pomysł aby starać się ograniczać
ilość generowanych błędów strony. Środki służące temu nie mogą
być jednak zbyt kosztowne obliczeniowo, gdyż zamiast przyspieszenia
powodowałyby spowolnienie całego systemu.
Studenci powinni zmienić mechanizm obsługi błędów braku strony
zgodnie ze wskazówkami zawartymi w sformułowaniu
zadania. Oczekuje się od nich stworzenia prostego systemu wykrywającego
kolejne odwołania do poszczególnych stron pamięci oraz generującego sztuczne
błędy strony.
Rozwiązania powinny cechować się prostotą, w szczególności narzut
związany ze sprawdzaniem czy ciąg jest rosnący nie powinny zajmować więcej
niż 5-8 instrukcji języka C na liczbach całkowitych, w przeciwnym razie
można się spodziewać pewnego spowolnienia działania całego systemu.
Przewidywany czas na wykonanie projektu: 2 godziny.
Autor: Jarosław Kowalski