Jednostka zarządzania pamięcią
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/MMU_principle.png/325px-MMU_principle.png)
Jednostka zarządzania pamięcią (skr. MMU od ang. memory management unit) – zestaw układów realizujących dostęp do pamięci fizycznej żądanej przez CPU. Wśród zadań tych układów znajdują się funkcje translacji pamięci wirtualnej do pamięci fizycznej, ochronę pamięci, obsługę pamięci podręcznej, zarządzanie szynami danych oraz, w prostszych (szczególnie 8-bitowych) systemach, przełączanie banków pamięci.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/MC68451_p1160081.jpg/220px-MC68451_p1160081.jpg)
Charakterystyka
Obecne układy MMU dzielą przestrzeń logiczną (wirtualną) pamięci na strony, których rozmiar wynosi 2N, zazwyczaj kilka kilobajtów. Młodsze N bitów adresu (przesunięcie - ang. offset) pozostaje niezmienione, podczas gdy starsze bity adresu określają numer (logiczny) strony pamięci. MMU tłumaczy adresy logiczne (wirtualne) na adresy fizyczne za pomocą asocjacyjnej pamięci podręcznej nazywanej TLB — ang. translation lookaside buffer. Jeżeli TLB nie posiada odpowiedniego przypisania (rozmiar pamięci TLB jest ograniczony) uruchamiane są wolniejsze, sprzętowe mechanizmy procesora przeszukujące struktury danych znajdujące się w pamięci, co wymaga niekiedy pomocy ze strony oprogramowania (systemu operacyjnego). Pozycje w tych strukturach nazywają się wpisami (elementami) tablicy stron pamięci (PTEs - ang. page table entries), a cała struktura nazywana jest tablicą stron pamięci (ang. page table). Kompletny adres w pamięci fizycznej jest ustalany poprzez dodanie bitów przesunięcia do przetłumaczonego numeru strony.
Wpisy w TLB lub PTE mogą także przechowywać informację o tym, czy dostęp do strony odbył się w trybie zapisu (ang. dirty bit) czy w trybie odczytu (ang. accessed bit - bit pomocny algorytmom wymiatania pamięci), bity uprawnień do operacji na stronie pamięci (prawa dla trybu nadzorcy lub trybu użytkownika) lub informację o tym, czy strona może być przeniesiona do pamięci wymiany.
Jeżeli w strukturach TLB lub PTE nie znajduje się odpowiedni opis aktualnie wykorzystywanej logicznej strony pamięci lub znajdujący się wpis zabrania dostępu w danym trybie, MMU sygnalizuje CPU wyjątek związany z błędnym dostępem do strony pamięci, tzw. page fault[1]. System operacyjny może wtedy podjąć akcje związane z wyjątkiem, np. uzupełnić wpisy w tablicy stron lub w TLB, ew. przerwać proces, którego działanie spowodowało wystąpienie wyjątku[2].
Przykłady
MMU jest zrealizowany wyłącznie w trybie chronionym (począwszy od 80286). Zasadniczo dostępne są dwa mechanizmy oferujące ochronę pamięci: segmentacja (począwszy od 80286) i stronicowanie (począwszy od 80386), z czego segmentacji się nie stosuje w nowoczesnych systemach operacyjnych poza szczególnymi przypadkami (wymagana ciągła kontrola nad rejestrami segmentowymi obniżająca wydajność procesora)[potrzebny przypis]. Włączone stronicowanie nie powoduje mniejszej prędkości przetwarzania instrukcji (np. sprawdzanie czy możliwy jest zapis pod dany adres jest wykonywane w czasie przetwarzania instrukcji). Stronicowanie wymaga użycia dodatkowej pamięci przechowującej informacje o 4-kilobajtowych stronach pamięci. Wymagane jest maksymalnie do 4 kB na katalog stron (ang. page table) oraz do 4 kB na tablicę katalogów (ang. page directory). W przypadku naruszenia praw ochrony generowany jest wyjątek przed wykonaniem "nielegalnej" instrukcji. Nad katalogiem stron i tablicą katalogów czuwa system operacyjny. MMU procesora Pentium zostało rozszerzone o możliwość stosowania stron o wielkości 4 MB.
MMU jest realizowany za pomocą rejestrów procesora: 16 rejestrów segmentowych SR0-SR15, 16 rejestrów BAT (8 rejestrów dla adresów instrukcji IBATL0-IBATL3 i IBATU0-IBATU3, 8 rejestrów BAT dla adresów danych DBATL0-DBATL3 i DBATU0-DBATU3) i jednego rejestru SDR1. Dostępne są trzy mechanizmy translacji adresów: translacja 4-kilobajtowymi stronami (wykorzystuje rejestry segmentowe SR0-SR15), translacja blokami o zmiennej wielkości od 128 kB do 256 MB (wykorzystuje rejestry BAT) oraz adresowanie w trybie rzeczywistym (translacja wyłączona). Translacja stronami i translacja blokami rozpoczyna się jednocześnie, jednakże translacja blokami jest uprzywilejowana w stosunku do translacji stronami. Jeśli 15 starszych bitów adresu efektywnego (oznaczenie EA0-EA14, ang. effective address) zostanie dopasowane do któregoś z rejestrów IBATU albo DBATU, to dalsza translacja stronami jest anulowana. Wówczas adres fizyczny początku bloku pobierany jest z odpowiedniego rejestru IBATL albo DBATL. Wielkość bloku jest zakodowana za pomocą 11 bitów rejestru IBATU albo DBATU i może wynosić: 128 kB, 256 kB, ..., 64 MB, 128 MB, 256 MB. Ochrona danego bloku jest określona za pomocą dwóch bitów PP: 00 brak dostępu, x1 tylko odczyt, 10 dozwolony odczyt i zapis. Gdy nastąpi złamanie praw, generowany jest wyjątek w zależności od typu żądania (dostęp do instrukcji albo danych). W przypadku translacji stronami 4 najstarsze bity adresu efektywnego (EA0-EA3) wybierają jeden z 16 rejestrów segmentowych (32 bity). Z wybranego rejestru segmentowego pobierane są 24 bity, z którego wylicza się 24+28=52 bitowy adres wirtualny. Następnie adres wirtualny służy do znalezienia adresu fizycznego na dwa sposoby: albo za pomocą TLB (szybszy dostęp, adres fizyczny dostępny w pamięci podręcznej) albo poprzez przeszukiwanie tablicy stron.
Czuwanie nad zawartością TLB (TLB jest opcjonalne) oraz tablicą stron jest zadaniem systemu operacyjnego. Dostęp do TLB jest możliwy tylko gdy procesor pracuje w trybie nadzorcy czyli gdy MSR[PR]=0 (ang. supervisor mode). System operacyjny powinien zapewniać spójność między TLB i tablicą stron. Jeśli odpowiednia kopia PTE nie występuje w TLB, to procesor szuka PTE w tablicy stron utworzonej przez system operacyjny. Tablica składa się z 8-bajtowych PTE (zawierających 20-bitowe fizyczne adresy). Wielkość tablicy stron jest zapisana w rejestrze SDR1 i może wynosić 64 kB, 128 kB, ..., 16 MB, 32 MB. Szukanie PTE w tablicy stron jest dwustopniowe: wykorzystuje dwie różne tablice mieszające i wymaga łącznie przejrzenia 16 PTE z tablicy stron. W pierwszym stopniu funkcją mieszającą jest operacja XOR. Funkcje mieszające zapewniają wysokie prawdopodobieństwo znalezienia PTE, w przypadku nie trafienia generowany jest wyjątek (ang. page fault). Taki mechanizm zapewnia efektywne szukanie PTE w tablicy stron (bez przeglądania całej tablicy stron, która może mieć maksymalnie 2^22=4194304 PTE). Jeśli właściwy PTE zostanie odnaleziony już w czasie pierwszego przeszukiwania (przeszukiwanie 8 PTE), to drugi stopień nie jest wykonywany.