next up previous contents
Next: Najważniejsze informacje związane z Up: Pamięć Wirtualna w Linuksie Previous: Odwzorowanie wirtualnej przestrzeni adresowej   Spis rzeczy

Stronicowanie

Linux używa trzypoziomowego mechanizmu stronicowania nawet jeżeli w architekturze, na której pracuje brakuje odpowiedniego wspomagania. Jest to potrzebne do obsługi architektur pozwalających na adresowanie więcej niż 4GB pamięci np. 64 bitowych. Linux będzie używał stronicowania wyższego niż 1 rzędu nawet jeżeli sprzęt, na którym pracuje nie wspomaga stronicowania wcale. x86 obsługuje stronicowanie dwupoziomowe stąd środkowa tablica stron jest jednoelementowa. Przejście do innej architektury wymaga modyfikacji (uzupełnienia) kodu jądra.

Rozmiar strony (i ramki) na x86 wynosi 4kb. Pojedynczy katalog stron zajmuje jedną stronę (1024 adresy 32 bitowe). Adres liniowy składa się z dwóch dziesiątek bitów (indeks w głównej tablicy stron i indeks we wskazanej tablicy stron) i dodatkowych 12 bitów określających przesunięcie w ramce.

Wszystkie procesy współdzielą tablice stron jądra i mają swoje tablice stron dla przedziału 0...3GB-1 . Stąd tablice stron procesu są poprawne w trybie jądra co ułatwia przejście między trybem użytkownika, a trybem jądra (procesy mogłyby mieć zupełnie osobne odwzorowanie pamięci od pamięci jądra).

Ponieważ strony jądra zajmują uprzywilejowany segment, proces w trybie użytkownika nie może sięgnąć do adresów powyżej 3GB, te adresy są dostępne tylko w trybie jądra. Podczas pracy procesu odwołania do przestrzeni adresowej trybu użytkownika powodują, że jądro przydziela ramki i odwzorowuje je w przestrzeń adresową procesu dokonując odpowiednich zmian w tablicach stron procesu. Dla procesu ramka jest przydzielana logicznie (tzn. zmiany dokonywane są w strukturach, ale nie od razu przydziela się ramkę fizyczną), jądro dostaje ramkę fizyczną od razu.

Fizyczna strona przydzielona dla procesu posiada co najmniej dwa wirtualne odwzorowania: jedno w przestrzeni jądra (3GB+fizyczny adres strony) i jedno pod jakimś adresem mniejszym od 3GB w wirtualnej przestrzeni adresowej procesu. Takie strony mogą mieć jeszcze dodatkowe odwzorowania: np. kilka procesów uruchamiających ten sam program współdzieli kod programu przez odwzorowanie tych samych fizycznych stron we właściwych dla nich tablicach stron.



Subsections
next up previous contents
Next: Najważniejsze informacje związane z Up: Pamięć Wirtualna w Linuksie Previous: Odwzorowanie wirtualnej przestrzeni adresowej   Spis rzeczy
Jarek Babel 2002-12-10