Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. III
Windows 2000/XP/2003/Vista/2008
Autor: Jacek Światowiak
Opublikowano: 13 grudnia 2007
Zawartość strony
W poprzedniej części | |
Mechanizm stronicowania | |
Stronicowanie domyślne | |
Rola rejestru CR2 | |
Proces tłumaczenia adresu liniowego na fizyczny | |
Rola Rejestru CR3 | |
Zaawansowane tryby stronicowania | |
Pamięć wirtualna | |
Płaskie modele adresowania pamięci | |
Flat model | |
Flat Protected model | |
Flat Protected Multisegment Model | |
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
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
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.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
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.
Do początku strony
Proces tłumaczenia adresu liniowego na fizyczny
Proces tłumaczenia adresu liniowego na fizyczny polega na kolejnym określeniu:
- położeniu właściwej tablicy stron (na podstawie katalogu stron),
- położeniu docelowej strony (na podstawie tablicy stron),
- położeniu danych na stronie (12 mniej znaczących bitów adresu),
Zatem adres liniowy można podzielić na trzy pola:
- bity 31…22 – wskazują na element katalogu zawierający numer strony, na której zapisano tablicę stron,
- bity 21…12 – wskazują na element tablicy stron zawierający numer docelowej strony,
- bity 11…0 – stanowią adres na 4-KB stronie,
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
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.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
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.
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
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.
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
Flat model
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
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ą.
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
Flat Protected Multisegment Model
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
Przeczytaj pozostałe części tego artykułu
- Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. I
- Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. II
- 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. V
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 |