Trójpoziomowe adresowanie

Adres do komórki pamięci jest w Linuxie czteroczęściowy. Część pierwsza zawiera indeks odwołujący się do głównego katalogu stron (PGD), część druga zawiera indeks odwołujący się do pośredniego katalogu stron (PMD) wskazywanego przez pole w PGD, część trzecia zawiera indeks do tablicy stron (PTE) wskazywanej przez PMD. Część ostatnia jest offsetem w ramce wskazywanej przez PTE. Wszytkim, którzy nic nie zrozumieli proponuję przyjrzeć się rysunkowi 2, a potem przeczytać ten akapit jeszcze raz!

Rysunek: Model adresowania pośredniego w Linuxie.

Wszystkie tablice adresów pośrednich mają ustalony rozmiar w zależności od platformy sprzętowej na którą zrealizowane jest jądro. I tak na i386 tablica PGD ma rozmiar 1024 pozycji, tablica PMD nie istnieje (ma symulowany rozmiar równy 1), tablica PTE ma 1024 pozycji, a strona ma rozmiar ustalony stałą PAGE_SIZE na 4096B. Stąd na i386 daje się zaadresować 1024*1*1024*4096B = 4GB pamięci wirtualnej. Z kolei na procesorach Alpha wszystkie trzy tablice mają po 1024 pozycji, a PAGE_SIZE = 8192B, czyli można tam zaadresować 8192GB pamięci.

W dalszej części opis będzie poświęcony realizacji pamięci wirtualnej na procesory i386, a więc zostajemy przy 4GB na pamięć wirtualną. W szczególności pisząc o pamięci procesu, będę miał zawsze na myśli jego pamięć wirtualną.


Tomasz Szymko 27 listopada 2001