Pamięć wirtualna Jan Tuziemski Źródło części materiałów: os-book.com
Pamięć wirtualna Na poprzednich wykładach omówiono sposoby zarządzania pamięcią Są one potrzebne ponieważ wykonywane rozkazy procesów muszą być umieszczone w pamięci fizycznej
Pamięć wirtualna Nakłada to ograniczenia na rozmiar wykonywanych procesów Rzeczywiste procesy nie wykorzystują w pełni przydzielonej im pamięci Moduły obsługi błędów Zmienne nie są wykorzystane w pełni Pewne części procesów są wykorzystywana rzadko
Pamięć wirtualna Wykonywanie procesu częściowo znajdującego się w pamięci jest korzystne: Brak ograniczeń ze względu na rozmiar pamięci fizycznej Więcej dostępnego miejsca w pamięci fizycznej dla innych użytkowników Mniejsza liczba operacji ładowanie/wymiany procesów z pamięci operacyjnej
Pamięć wirtualna Pamięć wirtualna: odseparowanie pamięci logicznej od pamięci fizycznej. Umożliwia utworzenie pamięci wirtualnej o większym rozmiarze niż pamięć fizyczna.
Przykładowy schemat Pamięć wirtualna
Pamięć wirtualna Główne sposoby realizacji Stronicowanie na żądanie Segmentacja na żądanie
Stronicowanie na żądanie Proces (zbiór stron) przebywa w pamięci pomocniczej (np. dysk) Do pamięci wprowadzane są jedynie potrzebne strony (a nie wszystkie strony procesu) Jest to procedura leniwej wymiany nazywana również procedurą stronicującą ang. pager (wymianie podlegają wyłącznie potrzebne strony procesu)
Stronicowanie na żądanie Przykładowy schemat
Pojęcia podstawowe Do pamięci ładowane są jedynie strony niezbędne Należy odróżnić strony procesu przebywające w pamięci i na dysku W tym celu stosuje się bit poprawności (poprawne - strona w pamięci operacyjnej niepoprawne strona na dysku lub poza logiczną przestrzenią procesu)
Pojęcia podstawowe Przykładowy schemat
Pojęcia podstawowe Jeżeli proces korzysta tylko ze stron umieszczonych w pamięci (poprawnych), wtedy jego wykonanie przebiega tak jakby cały znajdował się w pamięci Użycie strony nieznajdującej się w pamięci uaktywnia pułapkę braku strony
Pułapka braku strony Postępowanie związane z brakiem strony: 1. Określenie czy odwołanie do pamięci było dozwolone czy nie (np. blok kontrolny procesu) 2. Jeżeli nie to proces jest zakończany. 3. Jeżeli tak to strona jest sprowadzana do pamięci 4. Wyszukana zostaje wolna ramka (np. z listy wolnych ramek)
Pułapka braku strony 4. Następuje zamówienie przeczytania z dysku potrzebnej strony do nowo przydzielonej ramki 5. Modyfikacja tablicy stron (bitu poprawności) 6. Wznowienie wykonanie przerwanego rozkazu
Pułapka braku strony Przykładowy schemat
Pułapka braku strony Dzięki przechowaniu stanu procesu jego wznowienie jest możliwe dokładnie w tym samym miejscu i stanie, w którym nastąpiło jego przerwanie Za wczytywanie stron odpowiedzialny jest OS
Pułapka braku strony W skrajnym przypadku żadna ze stron procesu nie jest ładowana do pamięci Oznacza to konieczność sekwencyjnego ładowania stron Ten sposób określa się czystym stronicowaniem na żądanie
Pułapka braku strony Teoretycznie możliwe jest by do wykonania rozkazu potrzebne było kilka nowych stron Taka konieczność pociągałaby za sobą obniżenie sprawności systemu Empiryczna analiza pokazuje, że do takich sytuacji dochodzi rzadko (mówi się o lokalność odniesień)
Rozwiązanie sprzętowe W jego skład wchodzi: Tablica stron z wektorem bitów poprawności lub bitów ochrony Pamięć pomocnicza przechowująca strony nie będące w pamięci fizycznej, nazywana urządzeniem wymiany a fragment dysku obszarem wymiany
Sprawność stronicowania na żądanie Stronicowanie na żądanie może prowadzić do spowolnienia systemu Efektywny czas dostępu do pamięci Czas dostępu do pamięci 200ns Obsługa pułapki barku strony 24ms (czyli 120,000 razy dłużej niż normalny czas dostępu) Na ten czas składa się wiele elementów, dominuje czas przełączania strony (czytanie z dysku)
Sprawność stronicowania na żądanie p oznacza prawdopodobieństwo braku strony (1-p)* 200ns +p*24 ms Załóżmy p=0,001 Otrzymujemy ok 45000ns czyli 225 krotny wzrost czasu dostępu W wydajności kluczową rolę odgrywa p, musi być na bardzo niskim poziomie
Zastępowanie stron By wykorzystać pamięć w najefektywniejszy sposób ładuje się do niej wiele procesów, których część stron pozostaje w pamięci dodatkowej Pamięć fizyczna nie jest przeznaczona wyłącznie do obsługi procesów
Zastępowanie stron Jak należy postąpić jeżeli wystąpi pułapka braku strony, a w pamięci fizycznej nie będzie wolnego miejsca?
Zastępowanie stron 1. Zwolnić pamięć wykorzystywaną do obsługi operacji I/O (złożone zagadnienie) 2. Umieszczenie procesu żądającego więce pamięci w kolejce oczekujących procesów 3. Zupełna wymiana pewnego procesu z pamięci, pozwalająca odzyskać zasoby 4. Wyszukanie strony w pamięci, która nie jest aktualnie używana i przeniesienie jej na dysk. Nazywane zastępowaniem stron. Najczęściej stosowana metoda.
Zastępowanie stron Przykładowy schemat
Zastępowanie stron schemat podstawowy Procedura 1. Lokalizacja potrzebnej ramki na dysku 2. Znalezienie wolnej ramki w pamięci Użycie znalezionej ramki Jeżeli nie ma wolnej ramki, wykonuje się algorytm poszukiwania ramki ofiary Ramka ofiara zapisywana jest na dysk, tablica stron i ramek jest zmieniana 3. Wczytanie potrzebnej strony do świeżo zwolnionej ramki. 4. Wznowienie działania procesu
Zastępowanie strony schemat podstawowy Przykładowy schemat
Zastępowanie strony W przypadku dwukrotnego braku wolnych ramek potrzebne jest dwukrotne przesyłanie strony. By zmniejszyć całkowitą liczbę przesyłanych stron można zastosować bit modyfikacji (zabrudzenia) Informuje on o tym czy dana strona była modyfikowana od ostatniego przeczytania z dysku. Jeżeli strona nie była modyfikowana, można ponownie nie zapisywać jej na dysku.
Realizacja stronicowania na żądanie W celu realizacji stronicowania należy opracować: Algorytm przydziału ramek Algorytm zastępowania stron Optymalizacja obu algorytmów polega na minimalizowaniu częstości braku stron.
Realizacja stronicowania na żądanie Algorytm ocenia się na podstawie wykonania go na pewnym ciągu odniesień do pamięci i zsumowaniu liczby braków stron Powszechne sposoby generowania ciągu odniesień: Wygenerowany losowo (np. według pewnego rozkładu charakteryzującego system) Specjalnie dobranych ciągów, pokazujących cechy charakterystyczne algorytmów (artykuły naukowe) Zapisywanie odwołań do pamięci rzeczywistego systemu operacyjnego
Realizacja stronicowania na żądanie Zapisywanie odwołań do pamięci rzeczywistego systemu operacyjnego Powoduje powstanie olbrzymiej ilości danych (miliony adresów na sekundę) Ilość danych można ograniczyć w oparciu o obserwacje: Ważny jest tylko numer strony, a nie odległość na stronie Jeżeli po odwołaniu do strony s następuje ponowne odwołanie do tej samej strony to nie ma możliwości wystąpienia błędu braku strony
Realizacja stronicowania na żądanie Przykład Rozmiar strony 100b Sekwencja odwołań: 0100, 0432, 0101, 0612, 0634, 0688, 0132, 0038, 0420 Wywołanie stron 1, 4, 1, 6, 1, 0, 4
Realizacja stronicowania na żądanie Liczba braku stron dla ciągu zależy od liczby dostępnych ramek Jeżeli dostępne są 3 ramki to ciąg 1, 4, 1, 0, 1, 6, 4 spowoduje 4 braki stron
Realizacja stronicowania na żądanie W dalszym ciągu będziemy korzystać z ciągu odniesienia: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,1 z trzema ramkami
Realizacja stronicowania na żądanie Zastępowanie metodą FIFO: Najstarsza strona w pamięci zostaje zastąpiona Łączna liczba braków: 15
Zastępowanie metodą FIFO Łatwy do zaprogramowania Wydajność niekoniecznie zadowalająca: Najstarsza strona w pamięci może być często używana Może to prowadzić do spadku wydajności
Zastępowanie metodą FIFO Wydajność niekoniecznie zadowalająca: Dla ciągu 1,2,3,4,1,2,5,1,2,3,4,5 występuje anomalia Belady ego (wykres): wzrost liczby braku stron ze wzrostem dostępności ramek
Optymalne zastępowanie stron Najniższy współczynnik barku stron ze wszystkich algorytmów Nazywany algorytmem OPT lub MIN Zasada działania: zastępowanie tej strony, która najdłużej nie będzie używana 9 braków
Optymalne zastępowanie stron Wada: wymaga wiedzy o przyszłych elementach ciągu odniesień Używany jest w studiach porównawczych gdzie zapewnia wartość referencyjną
Metoda LRU Przybliżenie algorytmu OPT Poprzednie algorytmy: Algorytm FIFO sprawdza czas sprowadzenia do pamięci Algorytm sprawdza czas do chwili użycia Zasada działania: zastąpienie strony która nie była użyta od najdłuższego czasu
Metoda LRU Schemat działania (12 braków) Porównanie z algorytmem OPT
Metoda LRU Sposoby implementacji: Licznik: każde odwołanie do pamięci zwiększa licznik jego aktualna wartość jest zapisywana w tablicy stron, dla strony do której następuje odwołanie Poszukuje się strony, dla której wartość licznika jest minimalna Problemy: przekroczenie zakresu licznika
Metoda LRU Sposoby implementacji: Stos: Ostatnio użyta strona umieszczana jest na górze stosu Strona najmniej używana będzie znajdować się na spodzie Implementacja zazwyczaj przy pomocy list dwukierunkowych (przyspiesza przesuwanie elementów ze środa stosu)
Przybliżona metoda LRU Pełna implementacja LRU wymaga wsparcia sprzętowego, które często nie jest dostępne Wiele systemów zapewnia się ograniczające wsparcie Najczęściej jest to bit odniesienia Wynosi 0 gdy nie było odwołań do strony i 1 w w przeciwnym wypadku Pozwala na odróżnienie stron nieużywanych od używanych od ostatniego zerowania bitów referencji w tablicy stron
Algorytm dodatkowych bitów odniesienia Każda strona zawiera 8-bitowy ciąg informujący o historii W regularnych okresach czasu dochodzi do zapisanie bitu referencji na lewej pozycji Pozostały ciąg jest przesuwany o jedno miejsce w prawo, ostatni bit jest tracony
Algorytm dodatkowych bitów odniesienia W każdej chwili czasu najdawniej używanej stronie odpowiada bajt o najmniejszej wartości Strona z rejestrem 1100101 była używana mniejszą ilość czasu temu niż 0000101 Ilość przechowywanych bitów i długość okresu uaktualniania może być dopasowywana
Algorytm drugiej szansy Jest to algorytm FIFO z dodatkowym odwołaniem do bitu odniesienia Jeżeli najstarsza strona w pamięci nie była ostatnio używana (bit odniesieni=0) strona jest usuwana Jeżeli najstarsza strona w pamięci była ostatnio używana (bit odniesieni=1) strona dostaje drugą szansę
Algorytm drugiej szansy Realizacja: kolejka cykliczna Wskaźnik na następną ofiarę Jeżeli bit odniesienia ofiary = 1, zostaje wyzerowany i wskaźnik przesuwa się dalej
Algorytm drugiej szansy
Ulepszony algorytm ostatniej szansy Korzysta z bitu odniesienia i bitu modyfikacji: (0,0) strona nie używana i nie zmieniona najlepsza do zastąpienia (0,1) ostatnio nie używana ale zmieniona wymaga zapisu na dysk (1,0) ostatnio używana ale nie zmieniona prawdopodobnie będzie potrzebna (1,1) ostatnio używana i zmieniona prawdopodobnie będzie potrzebna Ostatecznie do sprawdzenia 4 klasy
Zastępowanie stron oparte o zliczanie Na podstawie licznika odniesień do każdej ze stron: Zastępowanie stron najrzadziej używanych Zastępowanie stron najczęściej używanych
Buforowanie stron Algorytmy uzupełniające algorytmy zastępowania stron: Pula wolnych ramek: przy błędzie braku strony strona z pamięci ładowana jest do wolnej ramki a osobny algorytm usuwa stronę-ofiarę
Buforowanie stron Algorytmy uzupełniające algorytmy zastępowania stron: W momentach bezczynności zapisywanie zmienionych stron na dysk gdy zajdzie potrzeba ich usunięcia jest większa szansa, że nie trzeba będzie powtarzać tej czynności
Buforowanie stron Algorytmy uzupełniające algorytmy zastępowania stron: Utrzymywanie puli wolnych ramek i historii stron, które były w nich zapisane. Przy wczytywaniu strony z pamięci sprawdza się czy ramka, w której poprzednio znajdowała się strona została nadpisana. Jeżeli nie, nie ma potrzeby ładowania strony z pamięci.
Przydział ramek Jak rozdzielać ramki między procesy? Przydział minimalny: istnieje minimalna liczba ramek, która musi zostać przydzielona procesowi by mógł być wykonywany (zależne od architektury systemu) Przydział równy: przydzielanie każdemu procesowi określonej liczby ramek Przydział proporcjonalny: przydzielanie liczby ramek w zależności od rozmiaru/zapotrzebowania procesu
Przydział ramek Zastępowanie lokalne i globalne: Globalne: proces może otrzymać ramkę ze zbioru wszystkich ramek Lokalne: proces może otrzymać ramkę z puli ramek dla niego przeznaczonych Pomimo problemów (proces może wciąż odbierać ramki innym procesom), korzystniejszy jest wybór przydzielania globalnego
Szamotanie Występuje wówczas gdy w danym procesie wciąż wykazuje brak strony. Może prowadzić do tego, że więcej czasu upłynie na stronicowanie niż wykonywanie procesu Może prowadzić do zmniejszonego wykorzystania procesora
Szamotanie Wraz ze wzrostem występowania szamotania, planista przydziału procesora zwiększa liczbę procesów do wykonania, co powoduje wzrost szamotania
Szamotanie Unikanie szamotania: należy przydzielić procesowi odpowiednią liczbę ramek W modelu strefowym zakłada się, że liczba ramek potrzebna procesowi zmienia się strefowo
Szamotanie
Szamotanie W celu uniknięcia szamotania, w każdej strefie należy przydzielić odpowiednią liczbę ramek Liczbę ramek w strefie określa się albo za pomocą modelu zbioru roboczego albo na podstawie częstości braków stron