Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. II     Windows Server 2008     Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. IV

Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. III Udostępnij na: Facebook

Windows 2000/XP/2003/Vista/2008

Autor: Jacek Światowiak

Opublikowano: 13 grudnia 2007

Zawartość strony
W poprzedniej części  W poprzedniej części
Mechanizm stronicowania  Mechanizm stronicowania
Stronicowanie domyślne  Stronicowanie domyślne
Rola rejestru CR2  Rola rejestru CR2
Proces tłumaczenia adresu liniowego na fizyczny  Proces tłumaczenia adresu liniowego na fizyczny
Rola Rejestru CR3  Rola Rejestru CR3
Zaawansowane tryby stronicowania  Zaawansowane tryby stronicowania
Pamięć wirtualna  Pamięć wirtualna
Płaskie modele adresowania pamięci  Płaskie modele adresowania pamięci
Flat model  Flat model
Flat Protected model  Flat Protected model
Flat Protected Multisegment Model  Flat Protected Multisegment Model
Przeczytaj pozostałe części tego artykułu  Przeczytaj pozostałe części tego artykułu

W poprzedniej części

Omówiono mechanizm segmentacji i tworzenia adresu liniowego. Przedstawiono role selektorów i deskryptorów segmentów danych i kodu.

 Do początku strony Do początku strony

Mechanizm stronicowania

Podobnie jak segmentacja, stronicowanie posługuje się w procesie translacji tablicami systemowymi zawartymi w pamięci. Stronicowanie jest procesem całkowicie niezależnym od segmentacji i przeznaczonym do realizacji innych zadań związanych z dostępem i zarządzaniem pamięcią.

 Do początku strony Do początku strony

Stronicowanie domyślne

Zarówno liniowa jak i fizyczna przestrzeń adresowa obejmuje ciągły obszar 4 GB. Stronicowanie polega na wyróżnieniu w obu tych przestrzeniach bloków pamięci – tzw. stron (ang. pages) – o określonej wielkości każda, rozmieszczonych sekwencyjnie począwszy od adresu 0 i przyporządkowaniu stronom w przestrzeni liniowej - stron fizycznych.

Zaproponowano wielkość strony o wartości 4 KB każda. (4 KB to 2^12 bajtów).

Zatem 2^32 /2^12 = 2^20 = 1 MB stron (1 048 576 stron). Położenie 4 KB strony da się jednoznacznie określić za pomocą jej 20–bitowego adresu. Dokonując translacji adresu liniowego na fizyczny mamy 20-bitowy numer strony oraz 12 bitową resztę niepodlegającą translacji (adres wewnątrz strony).

Uwaga

Ze względu na konieczność wykorzystywania dodatkowych informacji, każde pole w tablicy numerów stron ma wymiar 32 bitów (4 bajtów) a nie 20 bitów, jak wynika za wyliczeń powyższych, zatem tablica translacji z wyliczeń musiałaby zajmować ciągły obszar 4 MB.Jest to nie do zaakceptowania.

 

Projektanci w firmie INTEL zauważyli ten problem i zastosowano inne podejście. Zrealizowano dwupoziomową strukturę tablic translacji. Są dwa rodzaje tablic:

- katalogi tablic stron PDE (ang. Page Directories Entries) – każdy element katalogu wskazuje na właściwą tablicę stron

- tablice stron PTE (ang. Page Tables Entries) – zawierające numery stron w fizycznej przestrzeni adresowej

Całkowita ilość stron = 1024 elementy w PDE * 1024 elementy w PTE.

Rys. 3.1. Format elementu katalogu tablic stron PDE (dla strony o wielkości 4 KB).

Rys. 3.1. Format elementu katalogu tablic stron PDE (dla strony o wielkości 4 KB).

 

Rys. 3.2. Format elementu tablicy stron PTE (dla strony o wielkości 4 KB).

Rys. 3.2. Format elementu tablicy stron PTE (dla strony o wielkości 4 KB).

 

  • AVL - (ang. Available to software) – pole dostępne dla programu

  • D - (ang. Dirty) – strona zmieniona,

    • D = 0 – oznacza, iż od czasu utworzenia strony w pamięci, nie dokonano żadnej zmiany w tabeli strony,
    • D = 1 - oznacza, iż od czasu utworzenia strony w pamięci, dokonano jednej lub więcej zmian w tabeli strony,
  • A - (ang. Accessed) – strona użyta

    • Procesor ustawia ten bit na wartość =1 jeżeli, jakikolwiek program dokona jakiejkolwiek operacji na danej stronie (read albo write). Procesor sam nigdy nie zeruje tego bitu, zajmuje się tym system operacyjny.
  • U/S - (ang. User/Supervisor) – poziom ochrony użytkowy/systemowy

    • U/S = 0 – oznacza, iż strona może być dostępna dla programów działających w trybie ochrony 0, 1 lub 2
    • U/S = 1 – oznacza, iż strona jest dostępna dla wszystkich programów
  • R/W - (ang. Read/Write) – tylko odczyt lub oczyt i zapis

    • R/W = 1 – strona w trybie do zapisu i odczytu
  • P - (ang. Present) – strona obecna

    • P=1 oznacza, iż strona jest w pamięci operacyjnej,
    • P=0 oznacza, iż strona znajduje się na urządzeniu pamięci masowej (wówczas bity od 1 do 31 mogą być wykorzystane przez system operacyjny, w dostępie do urządzenia pamięci masowej). W takim przypadku zachodzi wyjątek (zdarzenie, błąd) o nazwie Page Fault (#PF).

 Do początku strony Do początku strony

Rola rejestru CR2

Adres brakującej strony w pamięci RAM jest zatrzaskiwany w rejestrze CR2. Oznacza to, iż brakującej strony trzeba szukać w pamięci wirtualnej (w pliku SWAP).

Rys. 3.3. Format Rejestru CR2.

Rys. 3.3. Format Rejestru CR2.

 

 Do początku strony Do początku strony

Proces tłumaczenia adresu liniowego na fizyczny

Proces tłumaczenia adresu liniowego na fizyczny polega na kolejnym określeniu:

  1. położeniu właściwej tablicy stron (na podstawie katalogu stron),
  2. położeniu docelowej strony (na podstawie tablicy stron),
  3. położeniu danych na stronie (12 mniej znaczących bitów adresu),

Zatem adres liniowy można podzielić na trzy pola:

  1. bity 31…22 – wskazują na element katalogu zawierający numer strony, na której zapisano tablicę stron,
  2. bity 21…12 – wskazują na element tablicy stron zawierający numer docelowej strony,
  3. bity 11…0 – stanowią adres na 4-KB stronie,

Rys. 3.4. Dwupoziomowa struktura tablic translacji w domyślnym mechanizmie stronicowania.

Rys. 3.4. Dwupoziomowa struktura tablic translacji w domyślnym mechanizmie stronicowania.

 

Uwaga

Przedstawione wyżej podejście z wykorzystaniem struktury dwupoziomowej powoduje, mimo iż wielkość pamięci potrzebnej na taką organizację wzrosła z 4 MB na 4MB+4KB (na stronę przeznaczona na katalog stron); to przestrzeń ta nie musi być już przestrzenią ciągłą. Dodatkowo nie jest konieczne wykorzystywanie wszystkich stron pamięci a tylko tylu, ile jest wykorzystywanych w systemie.

 

 Do początku strony Do początku strony

Rola Rejestru CR3

Podobnie jak w przypadku segmentacji, również przy stronicowaniu wykorzystywany jest specjalny rejestr do wskazania położenia tablic systemowych w pamięci. Rolę tą pełni rejestr specjalny CR3.

Rys. 3.5. Format rejestru sterującego CR3 dla 80386.

Rys. 3.5. Format rejestru sterującego CR3 dla 80386.

 

Rys. 3.6. Format rejestru sterującego CR3 dla i486 i późniejszych.

Rys. 3.6. Format rejestru sterującego CR3 dla i486 i późniejszych.

 

PCD - (ang. Page Ciche Disable) – wyłączenie zapamiętywania strony w pamięci podręcznej cache L2

PWT - (ang. Page Write/Through) – jednoczesne zapisywanie strony w pamięci zewnętrznej jak i w pamięci cache

Uwaga

Aby włączyć stronicowanie w procesorze i386 i wyższym należy ustawić dwa bity PG i PE w rejestrze CRO. Automatycznie oznacza to, iż stronicowanie jest dostępne wyłącznie w trybie Protected Mode.

 

 Do początku strony Do początku strony

Zaawansowane tryby stronicowania

Od modelu Pentium w stosunku do pierwotnej wersji stronicowania dodano nowe tryby. Kontrolowanie stronicowania jest realizowane za pomocą flag w rejestrach kontrolnych procesora:

  • PG (ang. Paging) – bit 31 w rejestrze CR0
  • PSE (ang. Page Size Extension) – bit 4 w rejestrze CR4 (od modelu Pentium) – tryb ten zwany jest również jako PSE-36 bit extension.
  • PAE (ang. Physical Address Extension) – bit 5 w rejestrze CR4 (od modelu Pentium)

Rys. 3.7. Zawartość rejestru CR4 w procesorach Pentium.

Rys. 3.7. Zawartość rejestru CR4 w procesorach Pentium.

 

Stronicowanie musi być załączone dla obsługi pamięci wirtualnej oraz trybu virtual-8086.

Tryb PSE (zwany również PSE-36) umożliwia zwiększenie efektywności stronicowania poprzez zwiększenie rozmiaru obsługiwanej strony z 4 KB na 4 MB (lub 2 MB jeżeli dodatkowo włączono tryb PAE).

Tryb PAE umożliwia obsługę dodatkowych linii adresowych procesora od modelu Pentium Pro (adresowanie 36-bitowe). Ten tryb adresowania jest dostępny wyłącznie, gdy stronicowanie jest włączone. Tryb ten dodaje do dwupoziomowego stronicowania z wykorzystaniem tabeli stron i katalogu tabeli stron, trzeci poziom logicznego adresowania o nazwie wskaźnik katalogu stron.

Dla procesorów z rozszerzeniem 64-bitowym PAE teoretycznie umożliwia dostęp do całej przestrzeni adresowej w zależności od posiadanych przez procesor fizycznych linii adresowych (zagadnienie to zostanie doprecyzowane w następnej części dotyczącej trybu EM-64T).

PSE-36 umożliwia alternatywny sposób adresowania pamięci fizycznej powyżej 4 GB. Mechanizm stronicowania korzysta wówczas z trybu Page Size Extension Mode i modyfikuje katalog stron pamięci PDE aby uzyskać dostęp do pamięci powyżej adresu FFFF FFFFh.

Poniżej przedstawiamy tabelę z listą wszystkich dostępnych trybów stronicowania, zarówno z jak i bez PAE czy PSE.

Tabela 4. Tabela dostępnych trybów stronicowania (PSE i PAE) dla trybu IA-32
Rejestr C0 flaga PG Rejestr CR4 flaga PAE Rejestr CR4 flaga PSE Element PDE flaga PS Flaga PSE-36 Wielkość strony Wielkość przestrzeni fizycznej
0 X X X X - Stronicowanie wyłączone
1 0 0 X X 4 KB 32-bitowe
1 0 1 0 X 4 KB 32-bitowe
1 0 1 1 0 4 MB 32-bitowe
1 0 1 1 1 4 MB 36-bitowe
1 1 X 0 X 4 KB 36-bitowe
1 1 X 1 X 2 MB 36-bitowe

 

 Do początku strony Do początku strony

Pamięć wirtualna

Realizacja pamięci wirtualnej odbywa się poprzez uzupełnienie pamięci operacyjnej przez pamięć masową, najczęściej zrealizowaną w postaci pamięci dyskowej (dysk twardy).

Pamięć ta służy do przechowywania nie wykorzystywanych w danej chwili elementów pamięci operacyjnej RAM (stron). W celu zwolnienia pamięci RAM dokonuje się przeniesienia części pamięci RAM (odpowiadające stronom) przez proces zwany swap-out. Proces odwrotny – przeniesie zasobów z dysku twardego do pamięci RAM w celu ich wykorzystania – nosi nazwę swap-in. Zarządzanie mechanizmem swap’owania odbywa się całkowicie bez udziału programisty – zajmuje się tym sam system operacyjny.

Rys. 3.8. Realizacja pamięci wirtualnej poprzez stronicowanie i swapowanie.

Rys. 3.8. Realizacja pamięci wirtualnej poprzez stronicowanie i swapowanie.

 

 Do początku strony Do początku strony

Płaskie modele adresowania pamięci

W procesorach z rodziny IA-32 (Intel Architecture – zgodne z i386) występują dwa typy płaskiego adresowania:

- Flat Model

- Flat Protected Model

Oraz zmodyfikowany tryb Flat Protected model zwany:

- Flat Protected Multisegment Model

 Do początku strony Do początku strony

Flat model

Rys. 3.9. Architektura płaskiego modelu adresowania.

Rys. 3.9. Architektura płaskiego modelu adresowania.

 

Aby przejść w tryb płaskiego modelu adresowania, trzeba zdefiniować przynajmniej dwa deskryptory segmentów. Jeden opisujący segment kodu, drugi danych. Oba te segmenty są mapowane na tą samą liniową przestrzeń adresową. Oba mają adres bazowy ustawiony na 0000 0000h i wielkość segmentu na 4 GB.

Pamięć kodu (ROM) jest zlokalizowana w górnej części przestrzeni adresowej, gdyż procesor rozpoczyna wykonywanie kodu od adresu FFFF FFF0h.

Pamięć danych (RAM) jest zlokalizowana w dolnej części przestrzeni adresowej, gdyż rejestr DS (odpowiadający za segment danych) jest w momencie startu lub reset’u inicjowany wartością zero.

Uwaga

Teoretycznie segmentacji wyłączyć nie można – nie ma takiego trybu pracy. Ale można wykorzystać płaski (ang. Flat Model) 32-bitowy tryb adresowania. Jeżeli wszystkie segmenty zostaną zdefiniowane w GDT jako read/write. Zaczną się od adresu 0000 0000h i będą miały długość określona na 4 GB – segmentacja zostanie de facto wyłączona.

 

 Do początku strony Do początku strony

Flat Protected model

Ten model adresowania wykorzystywany jest między innymi w momencie startu systemów z rodziny Windows 2k/XP/2k3.

Rys. 3.10. Architektura płaskiego modelu adresowania z protekcją.

Rys. 3.10. Architektura płaskiego modelu adresowania z protekcją.

 

Model płaski z protekcją, jest bardzo podobny do modelu płaskiego. Z jednym wyjątkiem: wielkość segmentów musi się zmieścić w fizycznej dostępnej pamięci operacyjnej, gdyż inaczej będzie generowany wyjątek (#GP General Protection Fault). Model ten zapewnia minimalny poziom ochrony uruchamianych zadań.

Dodanie mechanizmu stronicowania umożliwia odizolowanie danych i kodu wykonywanego z uprawnieniami Administratora (Level 0) od danych i kodu wykonywanego z uprawnieniami użytkownika (Level 3). Pojęcie uprawnień na poziomie procesora zostanie omówione oddzielnie. Realizowane jest to poprzez inicjację minimum 4 segmentów z wykorzystaniem 4 rejestrów segmentowych. Identycznie jak w modelu płaskim, każdy z segmentów ma ustawiony adres bazowy na wartość zero i wielkość w zależności od ilości pamięci fizycznej.

Oczywiście można również wykorzystać architekturę wielosegmentową.

 Do początku strony Do początku strony

Flat Protected Multisegment Model

Rys. 3.11. Architektura wielosegmentowa.

Rys. 3.11. Architektura wielosegmentowa.

 

W następnej części artykułu omówimy inne metody stronicowania – tryby PAE, PSE-36 oraz tryby dla procesorów z rozszerzeniem 64-bitowym – EM-64T.

 Do początku strony Do początku strony

Przeczytaj pozostałe części tego artykułu


Jacek Światowiak Jacek Światowiak (MCT, MCSE, MCSE+M, MCSE+S, MCTS, MCP)
Absolwent Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej. Obecnie zatrudniony w Altkom Akademia S.A. jako Trener Technologii Microsoft. Posiada bogate doświadczenie w zakresie wdrażania różnych technologii informatycznych. Od 2002 roku wykładowca Technologii i Protokołów Sieciowych na Podyplomowym Studium Politechniki Gdańskiej. Jest współautorem skryptu dla studentów informatyki: „Protokoły IPv6 – Opis protokołów. Materiały do laboratorium”. Posiada certyfikaty MCT, MCSE, MCSE+M, MCSE+S, MCTS Microsoft Exchange Server 2007, MCP ID 3621156.
 Do początku strony Do początku strony

Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. II     Windows Server 2008     Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. IV