Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji we współczesnych systemach operacyjnych Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Celem wykładu jest omówienie mechanizmów zarządzania pamięcią we współczesnych systemach operacyjnych.
Jednostka zarządzania pamięcią w architekturze IA-32 Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Plan wykładu Jednostka zarządzania pamięcią w architekturze IA-32 Zarządzanie pamięcią w systemie Windows 2000/XP Zarządzenie pamięcią w systemie Linux Treść wykładu obejmuje przedstawienie ... Zarządzanie pamięcią jest w dużej części zdeterminowane przez architekturę komputera, głównie procesora (MMU uczestniczy w transformacji adresów) i dlatego przyjęte rozwiązania w systemach operacyjnych zależą od platformy sprzętowej, na której są realizowane. Wykład rozpoczyna się więc od przedstawienia najważniejszych elementów zarządzania pamięcią w architekturze IA-32.
Zarządzanie pamięcią w architekturze IA-32 Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Zarządzanie pamięcią w architekturze IA-32 Fizyczna przestrzeń adresowa — 4 GB (w nowszych procesorach 64 GB, dzięki 4-bitowemu rozszerzeniu) Segmentacja lub stronicowanie (2-poziomowe, od Pentium II również 1-poziomowe) przestrzeni logicznej Stronicowanie 2-poziomowe poziom 1: katalog stron — 1024 wpisy 32-bitowe poziom 2: tablica stron — 1024 wpisy 32-bitowe rozmiar strony — 4 KB Stronicowanie 1-poziomowe rozmiar strony — 4 MB Wielkość fizycznej przestrzeni adresowej wynika z faktu, że podstawą adresowania pamięci jest 32-bitowy adres liniowy, a 232 = 4 GB. Odwzorowanie adresu logicznego na fizyczny może zostać przeprowadzone przez mechanizm segmentacji lub stronicowania, przy czym każdy z tych mechanizmów można wyłączyć (we wczesnych architekturach 32-bitowych możliwe było tylko wyłączenie stronicowania). W efekcie można uzyskać następujące podejścia do organizacji pamięci: wyłączona zarówno segmentacja jak i stronicowanie — brak oddzielenia logicznej przestrzeni adresowej od fizycznej, adres logiczny jest tożsamy z fizycznym, włączone tylko stronicowanie — pamięć stronicowana, włączona tylko segmentacja — pamięć segmentowana, włączona zarówno segmentacja, jak i stronicowanie — pamięć segmentowana, a następnie stronicowana. W Pentium II wprowadzono możliwość określenia rozmiaru strony. O możliwości takiej decyduje odpowiedni bit w rejestrze sterowania, a sam rozmiar strony zależy od bitu PS (page size) we wpisie w katalogu stron. Jeśli bit rozmiaru strony wskazuje na stronę 4 MB, stosowane jest stronicowanie niskopoziomowe.
Schemat adresowania w architekturze Intel IA-32 — segmentacja Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Schemat adresowania w architekturze Intel IA-32 — segmentacja tablica segmentów s granica baza błąd adres liniowy + d p o N T Przy wyłączonym stronicowaniu adres liniowy jest zarazem adresem fizycznym. selektor adres adres logiczny
Schemat adresowania w archit. Intel IA-32 — stronicowanie Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Schemat adresowania w archit. Intel IA-32 — stronicowanie katalog stron d tablica stron ramka pamięci p o d p o
lokalizacja tablicy segmentów lokalna/globalna Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Selektor segmentu 15 3 2 1 indeks TI RPL pierścień ochrony lokalizacja tablicy segmentów lokalna/globalna indeks w tablicy segmentów
indeks w katalogu stron Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Adres liniowy 31 22 21 12 11 katalog strona offset adres na stronie indeks w tablicy stron indeks w katalogu stron
do wykorzystania przez system Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Wpis w katalogu stron 31 11 9 8 7 6 5 4 3 2 1 adres ramki (bity 31 12) AVL PS A PCD PWT US RW P do wykorzystania przez system rozmiar strony/ramki bit odniesienia dostępność do zapisu i odczytu adresami ramki z tablicą stron bit poprawności (obecności)
do wykorzystania przez system Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Wpis w tablicy stron 31 11 9 8 7 6 5 4 3 2 1 adres ramki (bity 31 12) AVL D A PCD PWT US RW P do wykorzystania przez system bit modyfikacji bit odniesienia dostępność do zapisu i odczytu adresami ramki z tablicą stron bit poprawności (obecności)
bit poprawności (obecności) Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Deskryptor segmentu 31 24 22 20 19 16 15 14 13 12 11 8 7 baza (31 24) G D/B AVL granica (19 16) P DPL S rodzaj baza (23 16) baza (bity 15 0) granica (bity 15 0) bit granulacji rodzaj zawartości bit poprawności (obecności)
Zarządzanie pamięcią w systemie Windows 2000/XP Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Zarządzanie pamięcią w systemie Windows 2000/XP
Układ przestrzeni adresowej Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Układ przestrzeni adresowej prywatna część procesu 2 GB tablica stron 4 GB
64KB (0 – FFFF) — obszar niedostępny Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Obraz pamięci procesu 64KB (0 – FFFF) — obszar niedostępny 2GB–192 KB (10000 – 7FFEFFFF) — przestrzeń adresowa procesu 4KB (7FFDE000 – 7FFDEFFF) — blok środowiska wątku dla pierwszego wątku 4KB (7FFDF000 – 7FFDFFFF) — blok środowiska procesu 4KB (7FFE0000 – 7FFE0FFF) — współużytkowana strona danych użytkownika 60KB (7FFE1000 – 7FFEFFFF) — obszar niedostępny 64KB (7FFF0000 – 7FFFFFFF) — obszar niedostępny
Stronicowanie jest 2-poziomowe (architektura IA-32) Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Adresowanie pamięci Zarządzanie pamięcią opiera się na stronicowaniu z wymianą stron pomiędzy pamięcią główną a dyskiem (plikami, w tym plikiem wymiany). Stronicowanie jest 2-poziomowe (architektura IA-32) 32-bitowy adres logiczny składa się z: indeksu katalogu stron (PDE) — 10 bitów indeksu tabeli stron (PTE) — 10 bitów indeksu bajtów — 12 bitów rozmiar strony 4KB. Każdy proces ma własny katalog stron oraz adresowane za jego pośrednictwem tablice stron.
Struktury danych na potrzeby stronicowania Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Struktury danych na potrzeby stronicowania Katalog stron Tablica stron Tablica stron pliku stronicowania — opis strony w pliku stronicowania Baza ramek stron — informacje o wszystkich ramkach, na potrzeby zarządcy VM Zarówno katalog stron, jak i tablica stron czytane są przez MMU. Ich struktura jest zatem całkowicie zdeterminowana przez architekturę procesora (jednostki zarządzania pamięcią).
Zarządzanie stronami procesu Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Zarządzanie stronami procesu Stan strony (wirtualnej) procesu: wolna (ang. free) — strona nie jest używana, zatwierdzona (ang. committed) — dla strony jest zdefiniowane (potencjalne) odwzorowanie na zasoby pamięci systemu, zarezerwowana (ang. reserved) — strona nie jest używana i nie może zostać użyta aż do momentu usunięcia rezerwacji. Po utworzeniu procesu żadnej jego strony nie ma w pamięci fizycznej. Sukcesywne ich sprowadzanie następuje w wyniku błędów strony przy próbie dostępu. Strona wolna oznacza, że odpowiadający jej zakres adresów w przestrzeni wirtualnej procesu nie jest używany. Odniesienie do takiej strony kończy się błędem krytycznym, którego skutkiem jest zakończenie procesu.
Przykład odwzorowania stron procesu na zasoby pamięci Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Przykład odwzorowania stron procesu na zasoby pamięci plik wym. proc. A proc. B dane dane stos stos bibliot. bib.dll bibliot. prog. prB.exe prA.exe
minimum zbioru roboczego — 20 – 50 ramek Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Wymiana stron Algorytm wymiany oparty jest na zbiorze roboczym (stronicowanie dynamiczne, zastępowanie lokalne) Zbiór roboczy każdego procesu ma swoje dolne i górne ograniczenie określane odpowiednio jako: minimum zbioru roboczego — 20 – 50 ramek maksimum zbioru roboczego — 45 – 345 ramek. Początkowa liczba ramek wynosi 30, ale zmienia się w zależności od częstości generowania błędów strony i aktualna liczba ramek może wykraczać poza ograniczenie dla zbioru roboczego. Algorytm sprowadzania wykorzystuje wstępne stronicowanie statyczne (do 8 stron) oparte na lokalności przestrzennej (zbliżonych numerach stron).
Zarządzanie ramkami pamięci fizycznej Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Zarządzanie ramkami pamięci fizycznej zapis strony zmodyfikowana (ang. modified) czuwająca (ang. standby) miękki błąd strony poprawna (w zbiorze roboczym) potrzebna ramka dla sprowadz. strony dealok. pamięci usunięcie strony ze zbioru rob. potrzebna dodatkowa ramka Opisane stany dotyczą właściwie ramki, ale w 3 górnych przypadkach zdeterminowane są stanem znajdującej się w ramce strony. Ramki ze stronami poprawnymi (aktywnymi, pozostającymi w zbiorze roboczym procesu) są traktowane jako zasób przydzielony procesowi (lub procesom w przypadku współdzielenia pamięci). Pozostałe ramki są zasobem do dyspozycji systemu (odpowiedniego zarządcy). Z każdym ze stanów strony/ramki poza zbiorem roboczym (zmodyfikowana, czuwająca, wolna i wyzerowana) wiąże się odpowiednia lista. Stan ramki wolna może być ulotny, jeśli jest ona „podkradana”, czyli strona w stanie czuwająca jest zastępowana stroną sprowadzaną. Wątek balans set manager (uruchamiany co 1 sek.) sprawdza, czy jest wystarczająco dużo wolnych ramek. Jeśli jest ich za mało, uruchamia wątek working set manager, który ustala najpierw kolejność procesów (począwszy od dużych i bezczynnych, a skończywszy na małych aktywnych), a następnie zwalnia ich ramki (dołącza strony do listy zmodyfikowanych lub przygotowanych). Co 4 sekundy wątek swapper thread usuwa z pamięci procesy, których wszystkie wątki były bezczynne przez ustaloną liczbę sekund. Wszystkie strony tych procesów trafiają albo na listę stron zmodyfikowanych albo przygotowanych. Strony zmodyfikowane zapisywane są na dysk przez wątek mapped page writer albo modified page writer, zależnie od tego czy ramka zawiera odwzorowanie pliku zwykłego w pamięci, czy też jest to strona przechowywana pliku wymiany. Rozróżnienie wiąże się z możliwością doprowadzenia do zakleszczenia. Wątek zero page thread wypełnia wolne ramki zerami. Ramki takie przydzielane są np. na potrzeby powiększającego się stosu. Wyzerowanie uniemożliwia odczyt wcześniejszej zawartości. Nie ma natomiast konieczności zerowania w przypadku przydziału ramki na potrzeby sprowadzanej strony, gdyż nowa zawartość nadpisuje dotychczasową. wyzerowana (ang. zeroed) wolna (ang. free) zakończ. proc. zerowanie ramki
Zaadresowanie nie zatwierdzonej strony — błąd krytyczny. Błąd strony Zaadresowanie nie zatwierdzonej strony — błąd krytyczny. Potrzeba powiększenia stosu — konieczne jest przydzielenie wyzerowanej ramki. Naruszenie ochrony — błąd krytyczny. Próba zapisu strony współdzielonej dostępnej tylko do odczytu — jeśli strona ma być kopiowana przy zapisie konieczne jest utworzenie kopii. Zaadresowanie zatwierdzonej strony, nie odwzorowanej aktualnie w przestrzeni adresowej procesu (nieważnej) — typowy błąd strony.
Zarządzanie zbiorem roboczym Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Zarządzanie zbiorem roboczym W przypadku wystąpienia błędu strony: jeśli liczba przydzielonych ramek jest mniejsza do minimum zbioru roboczego, na potrzeby sprowadzanej strony przydzielana jest dodatkowa ramka, jeśli liczba przydzielonych ramek jest większa niż maksimum zbioru roboczego, proces nie otrzymuje następnej ramki (następuje wymiana ramek, traci ramkę zanim otrzyma nową ze sprowadzoną stroną), jeśli liczba przydzielonych ramek mieści się w zakresie ograniczenia, decyzja (wymiana lub przydział dodatkowej ramki) zależy od dostępności wolnych ramek pamięci fizycznej. Gdy liczba wolnych ramek jest duża, proces dostaje dodatkowe ramki nawet, gdy ich liczba przekracza górne ograniczenie rozmiaru zbioru roboczego.
Wybór ramek (stron) procesu do zwolnienia Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Wybór ramki ofiary Wybór procesu — ustalenie kolejności procesów, którym będą odbierane ramki (duże i długo bezczynne w pierwszej kolejności, pierwszoplanowy na końcu) Ustalenie liczby odbieranych ramek — zależnie od rozmiary pamięci, zajętości pamięci, bieżącej wielkości zbioru roboczego w stosunku do minimum i maksimum Wybór ramek (stron) procesu do zwolnienia w systemie jednoprocesorowym usuwany są strony najdłużej nieużywane ( algorytm postarzania), w systemie wieloprocesorowym stosowany jest algorytm FIFO. Usuwanie stron oznacza usuwanie ich ze zbioru roboczego procesu. Zasadnicza część tego algorytmu jest zatem odpowiedzialna za zarządzanie zbiorem roboczym.
Jeśli bit odniesienie jest skasowany, wiek strony zwiększany jest o 1. Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Postarzanie stron Za wybór ramki ofiary odpowiedzialny jest wątek systemowy working set manager uruchamiany przez balans set manager w przypadku małej liczby wolnych ramek. Wątek working set manager przegląda strony pamięci znajdujące się w zbiorach roboczych kolejnych procesów między innymi w celu ustalenia wieku strony wg. zasady: Jeśli bit odniesienie jest ustawiony, jest on kasowany a wiek strony jest zerowany. Jeśli bit odniesienie jest skasowany, wiek strony zwiększany jest o 1.
Zarządzanie pamięcią w systemie Linux Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Zarządzanie pamięcią w systemie Linux
Informacje podstawowe Wykorzystywane jest stronicowanie 3-poziomowe: PGD — główny katalog stron PMD — pośredni katalog stron (nie używany w IA-32) PT — tablica stron Jądro na stałe rezyduje w pamięci dynamiczne ładowane są tylko pewne moduły (związane najczęściej z obsługą urządzeń wejścia-wyjścia) Wymiana pomiędzy pamięcią pierwszego i drugiego rzędu stron dotyczy tylko stron procesów użytkownika.
Układ przestrzeni adresowej Systemy operacyjne Zarządzanie pamięcią — przykłady realizacji Układ przestrzeni adresowej prywatna część procesu 3 GB tablica stron i inne dane jądra 4 GB
zwiększany o 3, gdy bit odniesienia jest ustawiony, Postarzanie stron Dla każdej strony utrzymywana jest 8-bitowa wartość modelująca intensywność odniesień do strony, zwana wiekiem strony. Strony są okresowo przeglądane i w zależności od wartości bitu odniesienia wiek jest zwiększany o 3, gdy bit odniesienia jest ustawiony, zmniejszany do połowy (dzielony przez 2), gdy bit odniesienia jest skasowany. Jako ofiara wybierana jest strona, dla której wiek ma wartość najmniejszą