Zbigniew S. Szewczak Podstawy Systemów Operacyjnych
Transkrypt
Zbigniew S. Szewczak Podstawy Systemów Operacyjnych
Zbigniew S. Szewczak Podstawy Systemów Operacyjnych Wykład 10 Pamięć wirtualna. Toruń, 2004 Odrabianie wykładów ☛czwartek, 1.04.2004, S7, g. 12.00 za 19.05 √ ☛czwartek, 15.04.2004, S7, g. 12.00 za 12.05 Pamięć wirtualna ☛Podstawy ☛Stronicowanie na żądanie ☛Sprawność stronicowania na żądanie ☛Zastępowanie stron ☛Algorytmy zastępowania stron ☛Przydział ramek ☛Szamotanie ☛Inne rozważania ☛Segmentacja na żądanie Podstawy ☛Wykonywane rozkazy muszą rezydować w pamięci, jednak cały program nie musi ☛programy często zawierają fragmenty obsługi sytuacji wyjątkowych ☛tablice, listy mają zwykle nadmiar przydzielonej pamieci ☛pewne możliwości programu są rzadko stosowane ☛Zalety programu częściowo rezydującego ☛brak ograniczeń na pamięć ☛więcej programów: lepsze wykorzystanie procesora ☛mniejsza liczba operacji we/wy dla załadowania programu więc program wykonuje się szybciej Podstawy (c.d.) ☛Pamięć wirtualna (ang. virtual memory ) – pozwala na odseparowanie pamięci logicznej użytkownika od pamięci fizycznej ☛Można jedynie część programu załadować do pamięci w celu wykonania ☛Logiczna przestrzeń adresowa procesu może dlatego być znacznie większa niż fizyczna przestrzeń adresowa ☛Potrzeba wymiany stron między dyskiem a pamięcią ☛Pamięć wirtualną można zaimplementować jako: ☛Stronicowanie na żądanie (ang. demand paging) ☛Segmentacja na żądanie (ang. demand segmentation) np.OS/2 Pamięć wirtualna i fizyczna strona 0 strona 1 ... strona 2 strona n pamięć wirtualna odwzorowanie pamięci pamięć fizyczna Stronicowanie na żądanie ☛Nigdy nie dokonuje się wymiany strony w pamięci jeśli nie jest to konieczne - procedura leniwej wymiany (ang. lazy swapper) ☛Mniej operacji we/wy ☛Mniej pamięci ☛Szybsza reakcja ☛Więcej użytkowników ☛Jeśli strona jest potrzebna ⇒ odwołaj się ☛niepoprawne odwołanie ⇒ abort ☛brak strony w pamięci ⇒ sprowadź z stronę do pamięci ☛Zgodność z Zasadą lokalności odniesień Stronicowanie na żądanie (c.d.) ☛Proces jest traktowany jako ciąg stron ☛Procedura wymiany dotyczy całego procesu ☛Procedura stronicująca (ang. pager) dotyczy poszczególnych stron procesu ☛Gdy proces ma zostać wprowadzony do pamięci, wówczas procedura stronicująca zgaduje jakie strony będą w użyciu przed ponownym załadowaniem na dysk (ang. swap space) ☛Nigdy nie dokonuje się wymiana całego procesu dlatego używamy określenia stronicowanie (ang. page) zamiast wymiana (ang. swap) Przesyłanie do obszaru ciąłego swap out program A swap in program B pamięć operacyjna 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Bit poprawności ☛Z każdą pozycją w tablicy stron stowarzyszony jest bit poprawności (ang. valid-invalid bit): 1 ⇒ w pamięci, 0 ⇒ poza pamięcią (dozwolona lub nie) ☛Początkowo bit poprawności ustawiany jest na 0 (lub i) dla wszystkich pozycji Nr ramki bit poprawności ☛Przykład 1 1 1 1 0 Μ 0 0 tablica stron Tablica stron z brakami stron 0 1 numer bit ramki poprawności 2 0 A 0 1 B 1 2 C 2 v 3 i 4 v 5 3 i 6 4 i 7 C v 8 F 4 6 A C 3 D 4 E 5 5 F 6 i 9 6 G 7 i 10 7 H pamięć logiczna 9 F 11 tablica stron 12 13 pamięć fizyczna A B D E Brak strony ☛ Implementacja bitu poprawności wymaga wsparcia ze strony sprzętu ☛Jeśli wystąpi odwołanie do strony z bitem 0, sprzęt stronicujący spowoduje przejście do systemu operacyjnego: błąd zwany brakiem strony (ang. page-fault) ☛Czyste stronicowanie na żądanie (ang. pure demand paging): Nigdy nie sprowadzaj strony do pamięci wcześniej niż jest to niezbędne Procedura obsługi braku strony ☛1. System operacyjny sprawdza wewnętrzną tablicę oraz decyduje, że: ☛2. jeśli odwołanie niedozwolone - kończy proces ☛2. jeśli odwołanie dozwolone tylko zabrakło strony w pamięci to sprowadza tę stronę ☛3. System ramek ☛4. System ☛5. System ☛6. System znajduje wolną ramkę na liście wolnych wczytuje stronę z dysku do wolnej ramki wstawia bit 1 (lub v) w tablicy stron wykonuje przerwany rozkaz Etapy obsługi braku strony 3 system operacyjny strona w pamięci pomocniczej 2 odniesienie pułapka 1 umieść M i pamięć fizyczna 6 wznowienie wykonywania tablica stron 5 odnowienie tablicy stron 4 sprowadzenie brakujacej strony Co się stanie gdy zabraknie wolnej ramki? ☛Zastąpienie strony - szukamy strony w pamięci która nie jest używana i zapisujemy na dyska ☛wydajność – potrzebny jest taki algorytm, który zminimalizuje liczbę braków strony ☛Pewne strony mogą być sprowadzane do pamięci po kilka razy ☛Może się okazać, że kilka stron w pamięci jest potrzebnych do wykonania jednego rozkazu ☛MVC (przenieś znaki), EX (wykonaj) ☛sposób adresowania - np. pośrednie, autoincrement (PDP-11) ☛Wn. Sposób zastąpienia strony zależy od architektury komputera Sprawność stronicowania na żądanie ☛Prawdopodobieństwo braku strony p ☛jeśli p=0 to brak braku stron ☛jeśli p=1 to każde odwołanie generuje brak strony ☛ Efektywny czas dostępu (EAT) ☛EAT = (1-p) * cd + p* czas obsługi strony ☛cd - czas dostępu do pamięci (10 do 200 ns) ☛czas obsługi strony ☛obsługa przerwania wywołanego brakiem strony (1 do 100 µs) ☛czytanie strony ☛wznowienie procesu(1 do 100 µs) Prefiksy metryczne ☛10^-3 ☛10^-6 ☛10^-9 ☛10^-12 ☛10^-15 ☛10^-18 ☛10^-21 ☛10^-24 - mili (m); 10^3 - kilo (k) micro (µ); 10^6 - Mega (M) nano (n); 10^9 - Giga (G) pico (p); 10^12 - Tera (T) femto (f); 10^15 - Peta (P) atto (a); 10^18 - Exa (E) zepto (z); 10^21 - Zetta (Z) yocto (y); 10^24 - Yotta (Y) Przykłady wykorzystania ☛1.7 yg - masa protonu ☛1 as - czas przejścia światła przez atom ☛1 pg - masa bakterii ☛1 µL - kropelka wody ☛1 Ms - 11,6 dni ☛0,3 Gm - sekunda świetlna ☛9,5 Pm - rok świetlny ☛1 ZL - objętość Pacyfiku ☛1 YL - pojemność Ziemii Czas obsługi braku strony ☛Przejście do systemu operacyjnego ☛Przechowanie kontekstu ☛Określenie, że przerwanie to brak strony ☛Określenie dopuszczalności i położenia strony ☛Czytanie z dysku do wolnej ramki ☛Przydzielenie procesora w trakcie transferu ☛Przerwanie we/wy po transferze strony ☛Odebranie sterowania i przełączenie kontekstu ☛Skorygowanie tablicy stron ☛Czekanie na przydział procesora i wznowienie Stronicowanie na żądanie przykład ☛cd = 100 ns ☛czytanie strony z dysku twardego ☛opóźnienie (ang. latency) - 8ms ☛przeszukiwanie (ang. seek) - 15ms ☛przesyłanie (ang. transfer) - 1ms ☛Czytanie strony = 25 ms = 25000000ns EAT = (1 – p) *(100) + p *(25000000) =100 + 24999900*p ns ☛Wn. EAT jest proporcjonalny do p (page-fault rate) dlatego rozsądnym jest utrzymywanie małego prawdopodobieństwa p braku strony Tworzenie procesu ☛Podczas tworzenia procesu pamięć wirtualna pozwala na realizację technik poprawiajacych wydajność systemu ☛kopiowanie przy zapisie (ang. copy-on-write) ☛odwzorowanie plików do pamięci (ang. memory-mapped files) ☛ Kopiowanie przy zapisie ☛Kopiowanie przy zapisie umożliwia procesowi potomnemu jak i rodzicowi dzielenie tych samych stron w pamięci ☛Jeśli któryś z nich modyfikuje stronę to jest ona kopiowana ☛Kopiowanie przy zapisie poprawia wydajność tworzenia procesów np. Linux, W2K, Solaris 2 ☛Wolne strony są alokowane z puli wyzerowanych stron (ang. zero-fill-on-demand) ☛vfork - rodzic jest zawieszony i potomek używa jego przestrzeni adresowej, np. funkcja systemowa exec Odwzorowanie plików do pamięci ☛We/wy na pliki odwzorowane w pamięci to dostęp do bloków danych dyskowych wymapowanych na strony ☛Plik jest początkowo czytany jako żądanie strony ☛Blok danych o wielkości strony zostaje wczytany ☛Operacje we/wy na pliku to we/wy na pamięci ☛Uproszczenie dostępu do pliku, bez wywołań systemowych read(), write() ☛Wiele procesów może korzystać z pliku dzieląc strony w pamięci ☛Solaris 2 Zastępownie stron - dzielenie stron pliku 1 2 3 4 5 6 1 2 3 4 5 6 3 6 1 5 pamięć wirtualna procesu A pamięć wirtualna procesu B 4 2 pamięć fizyczna 1 2 3 4 plik na dysku 5 6 Zapotrzebowanie na zastąpienie strony - brak wolnej ramki PC 0 H 1 umieść M 2 J 3 M pamięć logiczna użytkownika 1 ramka bit poprawności 3 v 4 v 0 5 v 1 i tablica stron użytkownika 1 ramka A 1 B 2 D 2 v E 7 v 3 pamięć logiczna użytkownika 2 2 D 3 H bit 4 poprawności 5 v 6 0 i tablica stron użytkownika 2 monitor B umieść M J 6 A 7 E pamięć fizyczna M Zastępowanie stron ☛Ochrona przed nadprzydziałem (ang. overallocation) pamięci przez dodanie do obsługi braku strony możliwości zastąpienia strony (ang. page replacement). ☛1. Zlokalizowanie potrzebnej strony na dysku ☛2. Odnalezienie wolnej ramki ☛jeśli ramka istnieje - zostaje użyta ☛w przeciwnym razie typowanie ramki ofiary (ang. victim) ☛ramka ofiara zapisana na dysk; zmiana w tablicy stron ☛3. Wczytanie potrzebnej strony ☛4. Wznowienie procesu Zastępowanie strony bit poprawności ramka o i f v tablica stron 2 4 strona ofiara swap out zmiana na invavlid 1 f reset tablicy stron dla nowej strony ofiara 3 strona potrzebna swap in pamięć fizyczna Zastępowanie stron (c.d.) ☛Gdy nie ma wolnych ramek - potrzebne jest dwukrotne przesyłanie stron a w konsekwencji wydłużenie efektywnego czasu dostępu ☛Zastosowanie bitu modyfikacji (zabrudzenia) (ang. modify (dirty) bit ) do zredukowania czasu dostępu - tylko strony zmodyfikowane są zapisywane na dysk Zastępowanie stron (c.d.) ☛Zastępowanie stron jest podstawą stronicowania na żądanie i dopełnia rozdzielenie pamięci logicznej od fizycznej ☛Z pomocą tego mechanizmu otrzymujemy wielką pamięć wirtualną używając mniejszej pamięci fizycznej ☛Dwa główne problemy ☛algorytm przydziału ramek (ang. frame-allocation algorithm) ☛algorytm zastępowania stron (ang. page-replacement algorithm) Algorytmy zastępowania stron ☛Minimalizacja częstości braków stron (ang. pagefault rate) ☛Algorytm ocenia się na podstawie wykonania go na pewnym ciągu odniesień (ang. reference string) do pamięci i zsumowaniu liczby braków stron w tym ciągu ☛Dla zilustrowania algorytmów zastępowania stron będziemy używać pamięci z trzema wolymi ramkami oraz następujacego ciągu odniesień 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1. Algorytm zastępowania FIFO ☛Algorytm FIFO (ang. First-In-First-Out) stowarzysza z każdą ze stron czas kiedy została ona sprowadzona do pamięci ☛Jeśli trzeba zastąpić stronę to zastępowana jest najstarsza ze stron ☛Implementuje się za pomocą kolejek FIFO (IPC System V, POSIX) ☛Dla ciągu odniesień z trzema ramkami mamy 15 braków stron (w tym trzy początkowe braki stron) Algorytm FIFO - przykład ☛Ciąg odniesień: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 ☛3 ramki (3 strony mogą być w pamięci w w tym samym czasie) 1 1 4 5 2 2 1 3 3 3 2 4 9 braków stron 1 1 5 4 ☛4 ramki 2 2 1 5 3 3 2 4 4 3 10 braków stron Anomalia Belady’ego ☛Anomalia Belady’ego (ang. Belady’s anomaly) odzwierciedla fakt, że w niektórych algorytmach zastępowania stron współczynnik braków stron może wzrastać ze wzrostem wolnych ramek (mimo, że intuicja zdaje się sugerować, że zwiekszenie pamięci procesu powinno polepszyć jego działanie) ☛Poszukiwanie optymalnego algorytmu zastępowania stron, który cechuje najniższy współczynnik braków stron Krzywa braków stron (FIFO) liczba braków stron 16 14 12 10 8 6 4 2 0 1 2 3 4 liczba ramek 5 6 7 Algorytm optymalny ☛Zastąp tę stronę, która najdłużej nie będzie używana; nazywany OPT lub MIN ☛Przykład 3 ramek 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 1 7 2 2 2 2 2 7 2 0 0 0 4 0 0 0 3 1 1 3 3 3 1 1 9 braków stron ☛Nie ma anomalii Belady’ego Algorytm optymalny (c.d.) ☛Bardzo trudny do realizacji bo wymaga wiedzy o przyszłej postaci ciągu odniesień (podobnie jak przy planowaniu procesora metodą SJF) ☛Używany głównie w studiach porównawczych ☛wiedza o tym, że jakiś algorytm odbiega od optymalnego o 12,3% a średnio jest od niego gorszy o 4,7% może okazać się cenną ☛inna sprawa to wartość wartości średniej Algorytm LRU ☛Zastąp tę stronę, która najdawniej była użyta (ang. Least Recently Used) ☛Przykład 3 ramek 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 1 7 2 2 4 4 4 0 1 1 1 1 2 0 0 0 0 0 3 3 3 0 0 2 3 1 1 3 3 2 2 2 2 2 7 3 12 braków stron ☛Nie jest dotknięty anomalią Belady’ego ☛Odwracalność Algorytm LRU a FIFO - przykład ☛Ciąg odniesień: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 ☛Zastępujemy najdawniej używaną stronę 5 1 2 3 5 4 3 4 Algorytm LRU (c.d.) ☛Dwie implementacje ☛Liczniki - do każdej pozycji w tablicy stron dołączamy rejestr czasu użycia, do procesora zaś dodajemy zegar logiczny lub licznik. Wskazania zegara są zwiększane wraz z każdym odniesieniem do pamięci. Ilekroć występuje odniesienie do pamięci, tylekroć zawartość rejestru zegara jest kopiowana do rejestru czasu użycia należącego do danej strony w tablicy stron ☛Stos - przy każdym odwołaniu do strony jej numer wyjmuje się ze stosu i umieszcza na szczycie - najlepsza implementacja to dwukierunkowa lista ze wskaźnikami do czoła i do końca ☛najwyżej 6 zmian wskaźników ☛nie jest potrzebne przeszukiwanie listy Przykład - LRU i użycie stosu 4 7 0 7 1 0 1 2 2 7 1 2 0 1 7 0 4 4 1 2 7 1 2 Algorytmy stosowe ☛Algorytm stosowy (ang. stack algorithm) to taki algorytm dla którego zbiór stron w pamięci w przypadku n ramek jest podzbiorem zbioru stron w pamięci w przypadku n+1 ramek ☛Przykład: LRU ☛Własności: klasa algorytmów stosowych nie jest dotknięta anomalią Belady’ego Algorytmy przybliżające LRU ☛Bit odniesienia (ang. reference bit) ☛Z każdą stroną stowarzyszamy na początku bit 0 ☛Czytanie lub pisanie na stronie ustawia bit na 1 ☛Zastąp stronę stronę jeśli ma bit 0 ☛nie można poznać porządku użycia stron ☛Algorytm drugiej szansy (ang. second chance) ☛Algorytm FIFO (wymaga zegara) ☛Gdy strona (FIFO) ma bit odniesienia = 1 to strona dostaje drugą szansę na pobyt w pamięci: ☛bit odniesienia = 0 i czas przybycia = bieżący ☛zostawia się stronę w pamięci ☛zastępuje się następną w porządku FIFO stronę według powyższych zasad ... ... ... ... Zegarowy algorytm drugiej szansy następna ofiara bity odniesienia strona Ulepszony algorytm drugiej szansy ☛(x,y) - x - bit odniesienia, y- bit modyfikacji ☛4 klasy (od najniższej) ☛(0,0) - nie używana ostatnio i nie zmieniana: najlepsza ofiara ☛(0,1) - nie używana ostatnio ale zmieniona: gorsza ofiara bo wymaga zapisu na dysk ☛(1,0) - używana ostatnio i czysta: może być wkrótce użyta ☛(1,1) - używana ostatnio i zmieniana - najgorsza ofiara, prawdopodobnie będzie zaraz użyta ☛Algorytm drugiej szansy ale zastępujemy pierwszą napotkaną stronę z najniższej niepustej klasy (x,y) Algorytmy zliczające ☛Wprowadzamy liczniki odwołań do każdej ze stron ☛Algorytm LFU (ang. least frequently used) zastąp stronę najrzadziej używaną ☛Algorytm MFU (ang. most frequently used) uzasadnia się tym, że strona z najmniejszą wartością licznika została prawdopodobnie dopiero co sprowadzona i będzie jeszcze używana ☛Implementacja kosztowana i nie przybliżają dobrze algorytmu OPT Algorytmy buforowania stron ☛Zanim usunie się z pamięci ramkę ofiarę wczytuje się nową stronę do którejś z wolnych ramek ☛Nie trzeba czekać na zakończenie zapisywania strony ofiary aby wznowić proces ☛Z chwilą zapisania do swapu ramki ofiary dołączana jest ona do listy wolnych ramek ☛Rozwinięcie tej idei: lista zmodyfikowanych stron ☛gdy urządzenie stronicujące jest wolne (ang. idle) zmodyfikowna strona jest zapisywana na dysk ☛Lista wolnych stron wraz listą odwiedzających stron ☛VAX/VMS - ramka ofiara (FIFO) może być użyta Przydział ramek ☛Każdy proces wymaga minimalnej liczby ramek ☛Przykład: IBM 370 – 6 ramek potrzebnych do wykonania rozkazu typu SS MVC: ☛rozkaz długośći 6 bajtów może zajmować 2 strony ☛dane wejściowe (256 znaków) mogą zajmować 2 strony ☛obszar na który przesyłamy może zajmować 2 strony ☛gdy MVC jest argumentem rozkazu EXECUTE jeszcze 2! ☛Dwa główne schematy przydziału ☛przydział stały (ang. fixed allocation) ☛przydział priorytetowy (ang. priority allocation) MVC - Move Characters ☛MVC D1(L,B1), D2(B2) ☛prześlij pole danych o długości L z pod adresu wyznaczonego przez zawartość rejestru B2 powiększonego o przesunięcie D2 pod adres (B1)+D1 ☛Przykład ☛L=08, B1=x’B’, D1=001,B2=x’B’,D2=000 ☛MVC 1(8,11), 0(11) - format Assemblera ☛D207B001B000 - format maszynowy ☛rejestr 11 zawiera x’358’; pod adresem 358 mamy: 00F1F2F3F4F5F6F7F8F9 ☛po wykonaniu MVC mamy pod adresem 358 : 000000000000000000 EX - Execute ☛EX R1, D2(X2,B2) ☛do bitów 8-15 rozkazu z pod adresu (X2)+(B2)+D2 są dodawane logicznie bity 24-31 rejestru R1 i tak zmodyfikowany rozkaz jest wykonywany ☛Przykład ☛pod adresem 3820 mamy D2FFB001B000; R11=x’358’, pod adresem 358 mamy 00F1F2F3F4F5F6F7F8F9 ☛R1=3, X2=0, B2=x’A’, D2=000, R10 = x’00003820’ ☛EX 1,0(0,10) - format Assemblera ☛4410A000 - format maszynowy ☛po wykonaniu EX mamy pod adresem 358: 0000000000F5F6F7F8 Przydział stały ☛Przydział równy (ang. equal allocation) - np. jeśli mamy 100 ramek i 5 procesów, to każdy proces może dostać 20 ramek ☛Przydział proporcjonalny (ang. proportional allocation) - każdemu procesowi przydziela się dostępną pamięć proporcjonalnie do jego rozmiaru Przydział proporcjonalny ☛Przykład ☛s(i) rozmiar pamięci wirtualnej procesu P(i) ☛S = s(1)+s(2)+....+s(n) ☛m - całkowita liczba ramek ☛procesowi P(i) przydzielamy a(i)~ m*(s(i)/S) ramek ☛m=64, n=2, s(1)=10, s(2)=127 ☛a(1)= 64*(10/137) ~ 5 ramek ☛a(2)= 64*(127/137) ~ 59 ramek Przydział priorytetowy ☛Zastosowanie metody przydziału proporcjonalnego, w którym liczba ramek zależy nie od względnych rozmiarów procesu, lecz od priorytetów procesów albo od kombinacji rozmiaru i priorytetu ☛Jeśli proces Pi generuje błąd braku strony ☛wybierz do zastąpienia jedną z jego ramek ☛wybierz do zastąpienia ramkę procesu o niższym priorytecie Porównanie przydziału globalnego i lokalnego ☛Zastępowanie globalne (ang. global replacement) – umożliwia procesom wybór ramki ze zbioru wszystkich ramek, nawet gdy ramka jest w danej chwili przydzielona do innego procesu: jeden proces może zabrać ramkę drugiemu procesowi ☛Zastępowanie lokalne (ang. local replacement) – wybór ograniczony do zbioru ramek przydzielonych do danego procesu ☛Lepszą przepustowość systemu daje globalne zastępowanie lokalne ma mniejszy zakres Szamotanie ☛Jeśli proces nie ma “wystarczająco dość” ramek to współczynnik braków stron jest znaczny. Powoduje to: ☛słabe wykorzystanie CPU ☛system operacyjny reaguje: trzeba zwiększyć wieloprogramowość i podnieść wykorzystanie CPU ☛nowy procesy z kolejki procesów gotowych staje się aktywnym ☛Szamotanie (ang. trashing) - proces się szamocze jeśli spędza więcej czasu na stronicowaniu niż na wykonaniu Przyczyna szamotania ☛System operacyjny nadzoruje wykorzystanie jednostki centralnej ☛Jeśli jest ono za małe planista przydziału procesora zwiększa stopień wieloprogramowości ☛Strony zastępowane są według globalnego algorytmu bez brania po uwagę do jakich procesów należą ☛Procesom zaczyna brakować stron ☛Procesy ustawiają się w kolejce do urządzenia stronicującego ☛Planista opróżnia kolejkę procesów gotowych Powstrzymanie szamotania ☛Zmniejszenie stopnia wieloprogramowości ☛Lokalny (lub priorytetowy) algorytm zastępowania ☛jeśli proces zaczyna się szamotać nie może on kraść ramek innemu procesowi bo może on też zacząć się szamotać ☛Trzeba dostarczyć procesowi potrzebne ramki ☛Należy zabezpieczyć się przed możliwością wystapienia braku ramek Szamotanie - diagram wykorzystanie procesora szamotanie stopień wieloprogramowości Model strefowy a chaos ☛Model strefowy (ang. locality model) zakłada, że w trakcie wykonania przechodzi się z jednej strefy programu do innej, gdzie przez strefę programu rozumie się zbiór stron pozostajacych we wspólnym użyciu ☛Ogólnie ujmując, program składa się z wielu różnych stref, które mogą na siebie zachodzić ☛Strefy programu są określne przez jego strukturę oraz strukturę jego danych ☛Model strefowy neguje losowość programów ☛System operacyjny nie radzi sobie z chaosem Zasada lokalności odniesień Model zbioru roboczego ☛Założenie: procesy mają charakter strefowy ☛∆ - parametr do definiowania okna roboczego (ang. working-set window) oznaczający ustaloną liczbę ostatnich odniesień do stron ☛WS(i) - zbiór roboczy (ang. working-set) procesu P(i) - całkowita liczba odniesień do stron w ostatnich ∆ jednostkach czasu ☛za małe ∆ nie obejmie całego zbioru roboczego ☛za duże ∆ to będzie zachodzić na kilka stref programu ☛nieskończone ∆ - wszystkie strony użyte przez proces ☛Szamotanie jeśli WS(1)+..+WS(n) > #(pamięć) - należy zawiesić w takiej sytuacji jakiś proces Utrzymanie śladu zbioru roboczego ☛Trudno jest utrzymać ślad zbioru roboczego ☛Model zbioru roboczego można przybliżać z pomocą zegara generującego przerwania w stałych odstępach czasu oraz bitu odniesienia ☛Przykład ∆ = 10000 ☛przerwania zegarowe co 5000 odniesień ☛dwa bity przechowywane w pamięci dla każdej strony ☛po wystąpieniu przerwania zegara kopiuje się i zeruje wartości bitów odniesień wszystkich stron ☛jeśli wystąpi brak strony to badamy bit odniesienia i dwa bity w pamięci: conajmiej jeden ustawiony bit określa zbiór roboczy Utrzymanie śladu zbioru roboczego - przykład (c.d.) ☛Wada: nie można powiedzieć, w którym miejscu przydziału 5000 odniesień wystąpiło dane odniesienie ☛Można zwiekszyć historię odniesień (t.j. ilość bitów z 2 do 10) i liczbę przerwań ( np. co 1000 odniesień) ☛Wada: zwiększony koszt obsługi Model zbioru roboczego - przykład ślad odwołań do stron ...2615777751623412344434344413234443444... ∆ WS(t 1 )= { 1,2,5,6,7 } ∆ t1 t2 WS(t 2 )= { 3,4 } Częstość braków stron ☛Metodą mierzenia szamotania jest mierzenie częstości braków stron (ang. page-fault frequency - PFF) ☛ustala się górną i dolną granicę pożądanego poziomu braków stron ☛jeśli proces przekracza górną granicę do dostaje dodatkową ramkę ☛jeśli częstość występowania braków stron spada poniżej dolnej granicy to usuwa się ramkę z procesu, którego ten objaw dotyczy Częstość braków stron - wykres liczba braków stron zwiększ ilość ramek ograniczenie górne ograniczenie dolne liczba ramek zmniejsz ilość ramek Przykłady implementacji pamięci wirtualnej - WNT ☛stronicowanie na żądanie ☛clustering - każdy proces ma przypisany minimalny i maksymalny zbiór roboczy: jeśli proces ma zbiór roboczy bliski maksymalnemu i złapie błąd strony musi zgodnie z lokalną polityką zastępowania wyznaczyć ramkę ofiarę; jeśli proces ma zbiór roboczy bliski minimalnemu może dostać ramkę z globalnej listy wolnych ramek ☛Konkretny sposób wyboru strony do usunięcia ze zbioru roboczego jest zależny od typu procesora Przykłady implementacji pamięci wirtualnej - W2K ☛4GB pamięci dla procesu w tym 2GB - W2K, 2*64KB - pointers ☛stany stron ☛dostępne - nieużywane przez dany proces ☛powierzone (ang. commited) - np. strony w chwili zapisywania do pliku na dysku ☛zarezerwowane - ciągły zbiór stron nie wliczany do quoty zanim użyty (np. przy zapisie do pamięci) Przykłady implementacji pamięci wirtualnej - Solaris 2 ☛ wartość progowa (ang. threshold) wolnej pamięci zwana lotsfree (zwykle 1/64 pamięci fizycznej) poniżej której proces pageout zaczyna podkradanie stron i wymianę ☛ pageout weryfikuje pamięć 4 razy na sekundę ☛ jeśli liczba wolnych ramek < lostfree to pageout wykonuje algorytm (podobny do zegarowego algorytmu drugiej szansy) ☛ zerowanie bitu odniesienia wszystkich ramek ☛ sprawdzenie (po pewnym czasie) bitów odniesienia i zwrot wolnych ramek ☛ jeśli liczba wolnych ramek < desfree to pageout startuje 100 razy na sekundę aby utrzymać desfree ☛ jeśli pageout nie jest w stanie utrzymać desfree przez 30 sekund to zaczyna się swapowanie stron ☛ jeśli system nie jest w stanie utrzymać ilości wolnej pamięci na poziomie minfree to pageout jest wołany przy każdym żądaniu nowej strony ☛ rozpoznawanie stron bibliotek dzielonych Stronicowanie wstępne ☛Stronicowanie wstępne (ang. prepaging) jednorazowe wprowadzenie do pamięci wszystkich potrzebnych stron procesu zapobiega wysokiej aktywności stronicowania we wstępnej fazie procesu ☛W systemach implementujących model zbioru roboczego dla każdego procesu przechowuje się listę stron jego zbioru roboczego ☛Przełączenie kontekstu: zapamiętanie listy stron (np. w przypadku I/O) oraz wczytanie stron z tej listy przed restartem Rozmiar strony ☛Rozmiary stron są potęgami 2: od 4096 (2^12) do 4194304 (2^22) bajtów ☛Wybór rozmiaru strony ☛minimalizacja fragmentacji wewnętrznej - małe strony ☛małe strony - wzrasta wielkość tablicy stron ☛duże strony - minimalizacja czasu operacji we/wy ☛małe strony - lepsza lokalizacja Rozmiar strony (c.d.) ☛Obserwuje się tendencję do wybierania większych stron ☛Intel 80386 - 4KB; Motorola 68030 - od 256B do 32KB ☛Wzrost szybkości procesorów i pojemności pamięci jest szybszy niż wzrost szybkości dysków ☛Z punktu widzenia wydajności systemu braki stron są kosztowne ☛Większy rozmiar strony = większa fragmentacja wewnętrzna Przykładowe rozmiary stron ☛Altlas 512 48b słów ☛Honeywell-Multics 1024 36b słów ☛IBM 370/XA i 370/ESA 4kB ☛VAX 512B ☛IBM AS/400 512B ☛DEC Alpha 8kB ☛MIPS 4kB - 16MB ☛UltraSPARC 8kB - 4MB ☛Pentium 4kB - 4MB ☛PowerPC 4kB Współczynnik trafień dla TLB ☛Współczynnik trafień dla TLB (ang. TLB reach) odnosi się do ilości pamięci dostępnej za pomocą TLB (tzn. liczby pozycji w TLB razy rozmiar strony) ☛Najlepiej mieć zbiór roboczy w TLB ☛Jak zwiększyć współczynnik trafień TLB? ☛powiększyć rozmiar strony ☛wiele rozmiarów stron (UltraSPARC - 8KB, 64KB, 512KB, 4MB) ☛Konieczność obsługi TLB (musi zawierać rozmiar strony) przez system operacyjny w przypadku wielu rozmiarów stron Odwrócona tablica stron ☛ Odwrócona tablica stron nie zawiera pełnych informacji o logicznej przestrzeni adresowej procesu potrzebnych przy stronicowaniu ☛ W stronicowaniu na żądanie wprowadza się zewnętrzną tablicę stron procesu (położenia stron wirtualnych) do której odwołanie następuje w przypadku braku strony ☛ Zewnętrzne tablice stron podlegają również stronicowaniu ☛ Zarządca pamięci wirtualnej może spowodować kolejny brak strony wprowadzając potrzebną zewnętrzną tablicę stron aby zlokalizować stronę wirtualną na dysku Struktura programu ☛Struktura programu zerowania tablicy ☛int A[][] = new int[128][128]; ☛Strona długości 128 słów ☛System operacyjny alokuje mniej niż 128 ramek ☛Program 1: for (int j = 0; j < A.length; j++ ) for (int i = 0; i < A.length; i++ ) A[i][ j] = 0; 128 x 128 braków stron (A w pamięci jest wierszami) Struktura programu (c.d.) ☛Struktura programu zerowania tablicy ☛int A[][] = new int[128][128]; ☛Strona długości 128 słów ☛System operacyjny alokuje mniej niż 128 ramek ☛Program 2: for (int i = 0; i < A.length; i++ ) for (int j = 0; j < A.length; j++ ) A[i][ j] = 0; 128 braków stron (A w pamięci jest wierszami) We/wy a ramki ☛Proces wysyła zamówienie na we/wy i ustawia się w kolejce do urządzenia we/wy ☛Procesor zostaje przydzielony innym procesom ☛Zaczynają występować braki stron ☛W wyniku działania algorytmu globalnego zastępowania stron jeden z procesów zastępuje stronę zawierającą bufor we/wy procesu czekającego w kolejce we/wy ☛Zamówienie na we/wy zaczyna być realizowane do ramki innego procesu We/wy a ramki - diagram bufor przewijak taśmy We/wy a ramki (c.d.) ☛Zakaz wykonywania operacji we/wy wprost do pamięci użytkownika ☛duże nakłady przy kopiowaniu ☛Blokowanie stron w pamięci ☛każda ramka ma bit blokowania ☛stron zablokowanych nie wolno zastępować ☛strona jest odblokowywana po zakończeniu operacji we/wy ☛pula wolnych stron jest zbyt mała? ☛proces próbuje zablokować zbyt wiele stron? Segmentacja na żądanie ☛Jeśli występuje niedostatek sprzętu do realizacji pamięci wirtualnej stosuje się segmentację na żądanie (ang. demand segmentation) ☛OS/2 zamiast stronami przydziela pamięć segmentami opisanymi za pomocą deskryptorów segmentów (ang. segment descriptors) ☛Deskryptor segmentu zawiera bit poprawności wskazujący dla każdego segmentu czy znajduje się on w danej chwili w pamięci ☛Jeśli segment jest w pamięci głównej, kontynuacja ☛W przeciwnym razie przerwanie brak segmentu Konfigurowanie pamięci wirtualnej ☛AIX - schedtune, vmtune ☛FreeBSD - sysctl, /etc/sysctl.conf ☛HP-UX - lotsfree, desfree, minfree ☛wolna pamięć > lotsfree - wstrzymanie podkradania stron ☛desfree < wolna pamięć < lotsfree - podkradanie stron ☛minfree < wolna pamięć < desfree - likwidacja szamotania ☛Linux - /proc/sys/vm ☛Solaris - kstat ☛kstat -m unix -n system_pages | grep ‘free’ ☛True64 - sysconfig Podsumowanie (1) ☛Potrzeba wykonania procesów których logiczna przestrzeń adresowa jest większa niż dostępna fizyczna przestrzeń adresowa ☛Można użyć nakładek ale jest to bardzo trudne ☛Pamięć wirtualna umożliwia wykonywanie bardzo dużych procesów zwalniając jednocześnie programistę od kłopotów związanych z brakiem pamięci Podsumowanie (2) ☛Czyste stronicowanie na żądanie (ang. pure demand paging) polega na nie sprowadzaniu strony do pamięci dopóty, dopóki nie ma do niej odniesienia ☛Potrzebne są algorytmy zastępownia stron w pamięci ☛FIFO - anomalia Belady’ego ☛optymalne zastępowanie OPT - wymaga wiedzy o przyszłości ☛Algorytm LRU przybliża OPT ale jest trudny w realizacji ☛Większość algorytmów oparta o algorytm drugiej szansy Podsumowanie (3) ☛Polityka przydziału ramek uzupełnia algorytm zastępowania stron ☛przydział stały lub dynamiczny ☛Proces powinien mieć przydzieloną liczbę ramek wystarczającą dla bieżącego zbioru roboczego, w przeciwnym razie nastąpi szamotanie ☛Rozważenia wymaga również: ☛rozmiar strony ☛blokowanie stron w pamięci (np. dla operacji we/wy)