Zbigniew S. Szewczak Podstawy Systemów Operacyjnych Wykład 10 Pamięć wirtualna. Toruń, 2003
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
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)
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ą Początkowo bit poprawności ustawiany jest na 0 dla wszystkich pozycji Nr ramki bit poprawności Przykład 1 Μ 1 1 1 0 0 0 tablica stron
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) Procedura obsługi braku strony: System opercyjny sprawdza wewnętrzną tablicę oraz decyduje że : jeśli odwołanie niedozwolone - kończy proces jeśli odwołanie dozwolone tylko zabrakło strony w pamięci to sprowadza tę stronę
Brak strony (c.d.) Procedura obsługi braku strony (c.d.): System znajduje wolną ramkę na liście wolnych ramek System wczytuje stronę z dysku do wolnej ramki System wstawia bit 1 w tablicy stron System wykonuje przerwany rozkaz Czyste stronicowanie na żądanie (ang. pure demand paging): Nigdy nie sprowadzaj strony do pamięci wcześniej niż jest to niezbędne
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 - mili (m); 10^3 - kilo (k) 10^-6 - micro (µ); 10^6 - Mega (M) 10^-9 - nano (n); 10^9 - Giga (G) 10^-12 - pico (p); 10^12 - Tera (T) 10^-15 - femto (f); 10^15 - Peta (P) 10^-18 - atto (a); 10^18 - Exa (E) 10^-21 - zepto (z); 10^21 - Zetta (Z) 10^-24 - 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ę kopiowania przy zapisie (ang. copy-on-write) odwzorowania 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ę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). Zlokalizowanie potrzebnej strony na dysku 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 Wczytanie potrzebnej strony Wznowienie procesu
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 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 9 braków stron 3 3 2 4 1 1 5 4 4 ramki 2 2 1 5 3 3 2 10 braków stron 4 4 3
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ólczynnik braków stron
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 page faults 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ą
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 Nie jest dotknięty anomalią Belady ego Odwracalność 1 2 3 7 12 page faults 0 1 2 0 1 2 0 3 4 0 3 4 0 2 4 3 2 0 3 2 1 3 2 1 0 2 1 0 7 1 2 3
Algorytm LRU - przykład Ciąg odniesień: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 Zastępujemy najdawniej używaną stronę 1 5 2 3 5 4 4 3
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
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
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 P i 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ę szamoce 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
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
Model zbioru roboczego Założenie: procesy mają charakter strefowy D - 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 D jednostkach czasu za małe D nie obejmie całego zbioru roboczego za duże D to będzie zachodzić na kilka stref programu nieskończone D - 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 D=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
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
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 (c.d.) W2K 4GB pamięci dla procesu w tym 2GB - W2K, 2*64KB - pointers stany stron dostępne - nieużywane przez dany proces zarezerwowane - ciągły zbiór stron nie wliczany do quoty zanim użyty (np. przy zapisie do pamięci) powierzone (ang. commited) - np. strony w chwili zapisywania do pliku na dysku Solaris 2 wartość progowa (ang. threshold) wolnej pamięci zwana lostfree poniżej której proces zwany pageout zaczyna stronicowanie (1/64 pamięci fizycznej); pageout weryfikuje pamięć 4 razy na sekundę
Stronnicowanie 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 Atlas - 512 48b słów Honeywell-Multics - 1024 36b słów IBM 370/XA/ESA - 4KB VAX - 512B IBM AS/400-512B DEC Alpha - 8KB MIPS - 4KB UltraSPARC - 8KB do 4MB Pentium - 4KB lub 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 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 (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
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)