Opis translacji stron

July 7th, 2008

Architektura x86 udostępnia translację 32 bitowych adresów wirtualnych w 32 bitowe adresy fizyczne (ale większe np. 36 lub 40 bitowe adresy są także dostępne tylko że w specjalnym trybie). Architektura x86-64 rozszerza te możliwości o translację 64 bitowych adresów wirtualnych w 52 bitowe adresy fizyczne, ale procesory obsługują także mniejsze adresy wirtualne i fizyczne.

Adresy wirtualne są tłumaczone poprzez tzw hierarchiczną translację tablic, tworzonych i zarządzanych przez system. Każda tablica zawiera zestaw wpisów które wskazują na następną, niższą w hierarchii translacji tablicę. Pojedyncza tablica na danym poziomie może zwierać setki wpisów z których każdy wskazuje na unikalną tablicę na niższym poziomie. To samo obowiązuje z te leżące poniżej w hierarchii. Najniżej położone tablice wskazują na tłumaczone strony fizyczne.

Na poniższym diagramie mamy przedstawiony schemat takiej translacji w trybie long . Stronicowanie w trybie Legacy opiera się w części także na nim. Jak na diagramie widać, wirtualne adresy są podzielone na pola z których każde służy za offset do tablicy translacji. Kompletny łańcuch translacyjny tworzony jest ze wszystkich wpisów w tablicach, wskazujących na pola adresów wirtualnych. Najniżej położone (lowest order) bity adresów wirtualnych są używane jako bajtowe offsety do stron fizycznych.
Translacja stron typu Legacy oferuje różnorodne metody przy zamianie adresów wirtualnych na fizyczne. Są dostępne 3 wielkości fizycznych stron : 4 KB, 2MB, 4MB. Adresy wirtualne są 32 bitowe, a fizyczne w zależności od tego jaka wielkość adresu fizycznego jest dostępna. Architektura x86-64 rozoszerza translacje typu Legacy dodając wsparcie dla max 64 bitowych adresów wirtualnych, mogących być przetłumaczonych na max 52 bitowe adresy fizyczne.

Obecnie architektura x86-64 definiuje mechanizm dla translacji 48 w 52 bitowe adresy. Zaś ten tłumaczący w pełne 64 bitowe adresy wirtualne jest zarezerwowany i zostanie niebawem opisany w specyfikacji x86-64.

Tłumaczenie stron oraz jego zabezpieczenia

July 3rd, 2008

Mechanizm translacji stron znany z x86 (lub prościej mechanizm stronicowania) pozwala oprogramowaniu systemowemu tworzyć oddzielne przestrzenie adresowe dla każdego procesu czy aplikacji. Są to tzw. przestrzenie adresów wirtualnych. Oprogramowanie systemowe używa mechanizmu stronicowania – selektywnego mapowania stron pamięci fizycznej do przestrzeni adresów wirtualnych używając zestawu hierarchicznych tablic tłumaczących adresy (address-translation) znanych także jako tablice stron (page tables).

Mechanizm stronicowania i tablice stron są używane, aby dostarczyć każdemu procesowi jego własny prywatny obszar w pamięci fizycznej, by mógł w nim przechowywać swój kod i dane. Procesy mogą być chronione między sobą poprzez ich izolację w przestrzeni adresów wirtualnych. Dany proces nie może dostać się do tego obszaru pamięci fizycznej, która nie jest mu przyznana przez system.

Mapowanie pamięci fizycznej pozwala na jej podział pomiędzy aplikacje i procesy. Strony pamięci fizycznej mogą być konfigurowane przez tzw. tablice stron w celu udostępnienia ich np tylko do odczytu. To zapobiega błędom mogącym powstać przy współdzieleniu stron między aplikacjami i zapewnia ich integralność.

Współdzielone mapowanie jest zazwyczaj używane do udostępniana popularnych bibliotek, potrzebnych wielu aplikacjom. Dla każdej aplikacji jej wymagającej, jest mapowana kopia tylko do odczytu w jej przestrzeni adresów wirtualnych, ale w pamięci fizycznej jest tylko 1 (oryginalna) kopia
tejże biblioteki. Dzięki temu możliwe jest skopiowanie kernela sytemu operacyjnego, czy też różnych sterowników do wirtualnej przestrzeni adresowej wybranej aplikacji. Aplikacjom dostarcza się efektywny dostęp do usług systemowych bez czasochłonnego przełączania przestrzeni adresowych.

Obszar adresów pamięciowych przeznaczony tylko dla systemu musi być zabezpieczony przed dostępem dla innych aplikacji. System więc używa tablic stron do jego ochrony przez ich oznaczenie jako supervisor pages, które są dostępne tylko dla niego. Dodatkowo, system może używać translacji stron do mapowania wielu dużych obszarów adresów wirtualnych w dużo mniejsze obszary pamięci fizycznej. Każda aplikacja może używać całej 32 lub 64 bitowej przestrzeni wirtualnych adresów. System aktywnie mapuje najczęściej używane strony pamięci wirtualnej na dostępną pulę stron pamięci fizycznej. Najrzadziej używane strony są zrzucane na dysk do pliku wymiany. Ten proces nazywamy pamięcią wirtualną zależną od stronicowania (demand-paged virtual memory).

Translacja w trybie LONG

July 1st, 2008

Wymaga ona użycia rozszerzeń adresu fizycznego (PAE). Przed jej uaktywnieniem, bit CR4.PAE musi być = 1. Jeśli tego nie zrobimy, spowodujemy generację wyjątku ochrony.

Struktury stronicowania PAE wspierają mapowanie 64 bit adresów wirtualnych w 52 bit adresy fizyczne. PAE rozszerza rozmiar PDE (wpisów katalogu strony) i PTE (wpisów tablicy strony) z 32 do 64 bitów, pozwalając na zwiększenie rozmiaru adresów fizycznych.

Architektura x86-64 udoskonala PDPE (wpis wskaźnika tablicy strony) przez wcześniejsze zdefiniowanie bitów dostępu służących do kontroli. Nowa tablica translacyjna dodawana w tłumaczeniu PAE, nazywana jest stroną mapującą poziomu 4ego. (PML4). Tablica ta poprzedza tablicę PDP w hierarchii.