Rozdział 6.3



Stronicowanie w trybie chronionym



Stronicowanie polega na podziale przestrzeni 32 bitowych adresów liniowych na jednostki zwane stronami.

Adres liniowy bajta można zinterpretować jako parę liczb:

Numer strony (20 bitów) Przesunięcie na stronie (12 bitów)

Adresowanie bajta na stronie odbywa się zatem za pomocą 12 najmniej znaczących bitów adresu liniowego.

W procesorach firmy INTEL mechanizm translacji adresów liniowych na fizyczne przy stronicowaniu jest dwupoziomowy. Zbiór 1M wszystkich stron jest podzielony na 1K grup stron po 1K stron w każdej grupie. Każda grupa stron ma swoją tablicę stron (TS) składającą się z 1K wierszy, z których każdy opisuje jedną stronę. Będziemy go nazywać opisem strony. Objętość TS wynosi zatem 1K*4B=4KB czyli jedną stronę. Strony z TS tworzą osobną grupę stron, która ma swoją tablicę wyższego poziomu zwaną katalogiem tablic stron (KTS). Opis strony w KTS i w TS jest taki sam, 4 bajtowy i zawiera numer ramki strony i atrybuty ramki strony:

Pole numeru ramki strony służy do przechowania numeru ramki, w której aktualnie dana strona znajduje się w pamięci fizycznej, będzie więc wykorzystane przy tworzeniu adresu fizycznego tej strony. Adres taki tworzymy łącząc numer ramki z indeksem na stronie pobranym z adresu liniowego.

Pole atrybutów stron (12 bitów) zawiera między innymi następujące użyteczne pola:
  • Pole dostępne dla programu (3 bity),
  • D (ang. dirty) - bit informujący czy strona była zmieniana,
  • A (ang. accessed) - bit informujący czy strona była używana
  • Bit wyłączania zapamiętywania strony w pamięci podręcznej,
  • Bit jednoczesnego zapamiętywania strony w pamięci podręcznej i pamięci głównej,
  • U/S (ang. user/supervisor) - bit poziomu ochrony (użytkowy/ systemowy)
  • Bit: tylko odczytywanie / dozwolone zapisywanie
  • P (ang. present) - strona obecna w pamięci fizycznej (1 bit)
Translacja adresu zaczyna się od zlokalizowania KTS w pamięci fizycznej. Do tego celu używamy 32 bitowego rejestru sterującego CR3. Jego 20 bitów zawiera numer ramki strony, gdzie znajduje się KTS:

Numer ramki strony z KTS (20 bitów) Inne (12 bitów)

Załóżmy, że adres liniowy podlegający translacji składa się z następujących 3 części:

Indeks KTS (bity 31-22) Indeks TS (bity 21-12) Indeks na stronie (bity 11-0)


Schemat działania stronnicowania w trybie chronionym znajduje się tutaj

Algorytm przebiega według następujących kroków:
  1. Z rejestru CR3 odczytuje się numer ramki strony, na której znajduje się KTS (np. 1). Numer ten określa lokalizację KTS w pamięci fizycznej.
  2. Za pomocą indeksu do KTS (zawartym w adresie liniowym) (np. 9) dociera się w znalezionej KTS do opisu TS (tablicy stron). Z opisu tego odczytuje się numer ramki strony, na której znajduje się TS (np. 3).
  3. Za pomocą indeksu do TS (zawartego w adresie liniowym) (np. 7) dociera się w znalezionej ramce zawierającej TS do opisu strony docelowej. Z tego opisu odczytuje się numer ramki strony docelowej (np. 10).
  4. Za pomocą indeksu na stronie (zawartego w adresie liniowym) (np. 15) dociera się w znalezionej ramce strony docelowej do poszukiwanego bajta.


Powrót do rozdziału 6
Powrót do strony głównej