Pola wpisów w tablicy translacji strony
July 11th, 2008Wpisy w tablicy translacji strony zawierają kontrolę oraz pola informacyjne, używane w zarządzaniu środowiskiem pamięci wirtualnej. Większość pól jest podobna wśród wszystkich wpisów używanych w translacji stron w każdym trybie i zajmują te same miejsca bitowe. Jednakże niektóre pola są położone gdzie indziej, co zależy od poziomu w hierarchii translacji stron a także może mieć inne rozmiary zależące od rozmiaru strony fizycznej, wielkości adresu fizycznego, i trybu w jakim są używane. Jakkolwiek pola te mogą różnić względem ustawienia poszczególnych bitów czy ich wielkości, ich znaczenie pozostaje spójne we wszystkich poziomach hierarchicznego tłumaczenia strony oraz we wszystkich trybach operacyjnych.
Definicje pól
Przedstawione sekcje opisują każde pole poprzez wpisy w tablicy translacji strony.
Pole bazowego adresu tablicy translacji. Pola bazowego adresu w tablicy tłumaczenia wskazują na adres fizyczny następnego, niżej położonej tablicy w hierarchii translacji. Tablica struktur danych strony są przyporządkowane 4KB rozmiarom co powoduje, że tylko bity adresu powyżej 11 są przechowywane w polu bazowym adresu w tablicy translacji. Bity 0-11 są zerami. Rozmiar tych pól zależy od trybu:
- W normalnym (non-PAE) stronicowaniu (CR4.PAE=0) to pole określa 32-bit fizyczny adres
- W stronicowaniu PAE (CR4.PAE=1) to pole zawiera 52-bit fizyczny adres
52-bity korespondują z maksymalnym rozmiarem fizycznego adresu dopuszczalnego przez architekturę x86-64. Jeśli procesor ma zaimplementowane wsparcie na więcej niż pełny 52-bit fizyczny adres, oprogramowanie musi wyczyścić niezaimplementowane bity adresów bazowych w tablicach translacyjnych wyższego rzędu. Dla przykładu, jeśli procesor ma zaimplementowane wsparcie dla 40-bit fizycznych adresów, oprogramowanie musi wyczyścić bity 51-40 kiedy będzie zapisywana pole bazowego adresu tablicy translacji we wpisie strony struktur danych.
Pole adresu bazowego strony fizycznej. Pole bazowe adresu bazowego strony fizycznej wskazuje na adres bazowy tłumaczonej strony. To pole znajduje się tylko na najniższym poziomie hierarchii tłumaczenia stron. Rozmiar pola zleży od trybu:
- w normalnym (non_PAE) stronicowaniu (CR4.PAE=0), to pole określa 32-bitowy adres bazowy strony fizycznej.
- w stronicowaniu PAE (CR4.PAE=1) to pole określa 52-bitowy adres bazowy strony fizycznej.
Strony fizyczne mogą być 4kB, 2MB lub 4MB i zawsze dostosowane są adresowo do rozmiaru strony fizycznej. Dla przykładu 2-Mbyte strona fizyczna jest zawsze ustawione na 2-MB granicę adresowania (rozmiaru adresu). Z powodu tej zależności, mniej znaczące bity adresu są zerami czyli:
- 4-Kbyte strona, bity 11-0 przybierają 0
- 2-Mbyte strona, bity 20-0 przybierają 0
- 4-Mbyte strona, bity 21-0 przybierają 0
Present (P) Bit. Bit 0. Ten bit wskazuje czy tablica tłumaczenia strony lub fizyczna strona jest załadowana do fizycznej pamięci. Kiedy bit P jest wyczyszczony do 0, tablica lub fizyczna strona jest nie załadowana do fizycznej pamięci. Kiedy bit P jest ustawiony na 1 tablica lub fizyczna strona jest załadowana do fizycznej pamięci.
Oprogramowanie czyści ten bit do 0 wskazując że strona tablicy lub fizyczna strona nie jest załadowana do fizycznej pamięci. Wyjątek – błąd strony (#PF) zdarza się jeśli nastąpi próba dostępu do tablicy lub strony kiedy bit P jest 0. Systemowe oprogramowanie odpowiada za załadowanie brakującej tablicy lub strony w pamięci i ustawienie bitu P na 1.
Kiedy bit P jest 0, wskazując na nieobecną stronę, wszystkie pozostałe bity we wpisie struktury danych strony, są dostępne dla oprogramowania.
Read/Write (R/W) Bit. Bit1. Ten bit kontroluje dostęp do odczytu/zapisu wszystkich fizycznych stron mapowanych przez tablicę wpisów. Dla przykładu w mapie strony poziomu 4, bit R/W kontroluje dostęp do odczytu/zapisu do wszystkich 128M (512×512x512) stron fizycznych poprzez niżej położone tablice tłumaczeń. Kiedy bit R/W jest wyczyszczony do 0, dostęp jest ograniczony do odczytu. Kiedy bit jest ustawiony na 1, odczyt i zapis jest dozwolony.
User/Supervisor (U/S) Bit. Bit 2. Ten bit kontroluje dostęp użytkownika (CPL 3) do wszystkich fizycznych stron mapowanych przez tablicę wpisów. Dla przykładu 4o dla poziomowej mapy strony bit U/S kontroluje dostęp do wszystkich 128M (512×512x512) stron fizycznych poprzez tablice niższego poziomu. Kiedy bit U/S jest wyczyszczony do 0 dostęp jest tylko dla supervisora (CPL 0, 1, 2). Kiedy bit U/S jest ustawiony na 1, user i supervisor mają dostęp.
Page-Level Writethrough (PWT) Bit. Bit 3. Ten bit wskazuje czy tablica tłumaczenia strony lub fizyczna strona na którą wskazuje wpis ma ustawione cache’owanie typu writethrough czy też writeback. Kiedy bit PWT jest wyczyszczony na 0 tablica lub fizyczna strona używa cache’owania typu writeback. Kiedy bit PWT jest ustawiony na 1 tablica lub fizyczna strona używa writethrough.
Page-Level Cache Disable (PCD) Bit. Bit 4. Ten bit wskazuje czy tablica tłumaczenia strony lub fizyczna strona na którą wskazuje wpis jest cache’owalna. Kiedy bit PCD jest wyczyszczony do 0, tablica lub fizyczna strona są cache’owalne. Kiedy bit PCD jest ustawiony na 1 tablica lub fizyczna strona nie są cache’owalne.
Accessed (A) Bit. Bit 5. Ten bit wskazuje czy tablica tłumaczenia strony lub fizyczna strona na którą wskazuje wpis jest była używana. Bit A zostaje ustawiony na 1 gdy procesor po raz pierwszy czyta lub zapisuje coś do tablicy strony lub strony fizycznej. Bit A nigdy nie jest czyszczony przez procesor. W zamian oprogramowanie musi czyścić ten bit do 0 kiedy potrzebuje obliczyć częstotliwość dostępu do tablicy lub strony fizycznej.
Dirty (D) Bit. Bit 6. Ten bit jest obecny tylko w najniższym poziomie hierarchii translacji stron. Ten bit wskazuje czy tablica tłumaczenia strony lub fizyczna strona na którą wskazuje wpis jest była zapisywana. Bit D jest ustawiany na 1 przez procesor przy pierwszym zapisie. Bit D nie jest nigdy czyszczony przez procesor. W zamian oprogramowanie musi czyścić ten bit do 0 kiedy potrzebuje obliczyć częstotliwość dostępu do tablicy lub strony fizycznej.
Page Size (PS) Bit. Bit 7. ten bit jest obecny tylko we wpisach katalogu strony. Określa najniższy poziom w hierarchii translacji stron i wielkość strony fizycznej. Kiedy bit PS jest wyczyszczony do 0 najniższym poziomem w hierarchii translacji stron jest wpis w tablicy strony a strona fizyczna ma wielkość 4Kbyte. Kiedy bit PS jest ustawiony na 1 najniższym poziomem w hierarchii translacji stron jest wpis w katalogu strony. Wielkość fizycznej strony jest zdeterminowana przez:
- jeśli CR4.PAE=0 i CR4.PSE=1 wielkość fizycznej strony 4Mbytes
- jeśli CR4.PAE=1, wielkość fizycznej strony wynosi 2Mbytes
Global Page (G) bit. Bit 8. Ten bit jest tylko obecny na najniższym poziomie hierarchii translacji stron. Wskazuje on czy fizyczna strona jest globalną stroną. Wpis TBL dla globalnej stronie (G=1) nie jest uznawany za nieważny kiedy CR3 zostaje załadowane także przez instrukcję MOV CRn, lub podczas przełączania zadania. Używanie bitu G wymaga ustawienia bitu zastosowania strony globalnej w CR4 (CR4.PGE=1).
Available to Software (AVL) bit. Te bity są nieinterpretowane przez procesor i są dostępne do użycia przez oprogramowanie systemowe.
Page-Attribute Table (PAT) Bit. Ten bit jest obecny tylko na najniższym poziomie w hierarchii translacji stron :
- jeśli najniższym poziomem jest PTE (PDE.PS=0), PAT zajmuje bit 7
- jeśli najniższym poziomem jest PDE (PDE.PS=1), PAT zajmuje bit 12
Bit PAT jest starszym bitem w 3-bitowym indeksie w rejestrze PAT. Inne dwa bity używane w formowaniu indeksu to PCD i PWT. Nie wszystkie procesory wspierają bit PAT poprzez implementację w rejestrach PAT.
No Execute (NX) Bit. Bit 63. Ten bit istnieje tylko we wpisach tablic translacyjnych, przy czym wyjątkiem jest, że w trybie legacy PDPE nie zawiera go. Ten bit jest nie wspierany przez stronicowanie non-PAE.
Bit NX może być tylko ustawiony kiedy dostępne jest „nie-wykonywalne” zabezpieczenie strony poprzez ustawienie EFER.EXE na 1. Jeśli EFER.NXE=0 bit NX jest traktowany jako rezerwowy. W tym wypadku nastąpi wyjątek błędu strony (#PF) jeśli bit NX nie jest wyczyszczony na 0.
Ten bit kontroluje zdolność do uruchamiania kodu dla wszystkich fizycznych stron mapowanych przez wpisy w tablicy. Dla przykładu, dla mapy strony poziomu 4 bit NX kontroluje zdolność do uruchomienia kodu dla wszystkich 128M (512×512x512) fizycznych stron które są mapowane przez tablice translacyjne niższego poziomu. Kiedy bit NX jest wyczyszczony do 0, kod może być uruchamiany w zmapowanej stronie fizycznej. Kiedy bit NX jest ustawiony na 1 kod nie może być uruchomiony.
Reserved Bits. Oprogramowanie powinno czyścić wszystkie zarezerwowane bitów do 0. Jeśli procesor działa w trybie Long lub jeśli rozszerzenia wielkości strony i fizycznych adresów są włączone w trybie legacy, zostanie wygenerowany wyjątek błędu strony (#PF) jeśli tylko bity zarezerwowane nie zostaną ustawione na 0.