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

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

Autor: Jacek Światowiak

Opublikowano: 27 marca 2008

Zawartość strony
W poprzedniej części  W poprzedniej części
Poziomy ochrony procesora – pierścienie ochrony (protekcji)  Poziomy ochrony procesora – pierścienie ochrony (protekcji)
Przydzielanie pamięci dla aplikacji  Przydzielanie pamięci dla aplikacji
Standardowy i niestandardowy podział przestrzeni adresowej 32-bitowych systemów klasy Windows opartych o jądro w wersji NT 5.X (Windows 2k, 2k3, XP).  Standardowy i niestandardowy podział przestrzeni adresowej 32-bitowych systemów klasy Windows opartych o jądro w wersji NT 5.X (Windows 2k, 2k3, XP).
Systemowe regiony pamięci 32-bitowych systemów Microsoft Windows.  Systemowe regiony pamięci 32-bitowych systemów Microsoft Windows.
Mechanizm AWE  Mechanizm AWE
Pojęcie programu (ang. Program), procesu (ang. Process) , wątku (ang. Thread), zadania (ang. Job) i włókna (ang. Fiber)  Pojęcie programu (ang. Program), procesu (ang. Process) , wątku (ang. Thread), zadania (ang. Job) i włókna (ang. Fiber)
Domyślny tryb adresowania – 32-bitowy, strona 4 KB  Domyślny tryb adresowania – 32-bitowy, strona 4 KB
Mechanizm zarządzania pamięcią.  Mechanizm zarządzania pamięcią.
System wielosesyjny.  System wielosesyjny.
Przestrzeń sesji  Przestrzeń sesji
Zestawienie wielkości obszarów pamięciowych sesji w zależności od typu systemu operacyjnego  Zestawienie wielkości obszarów pamięciowych sesji w zależności od typu systemu operacyjnego
Systemowe obszary PTE  Systemowe obszary PTE
Przeczytaj pozostałe części tego artykułu  Przeczytaj pozostałe części tego artykułu

W poprzedniej części

Omówiono tryby pracy procesora, tryby adresowania: klasyczny 32-bitowy oraz rozszerzone 36-bitowe (PSE i PAE) zarówno dla procesorów 32-bitowych jak i wyposażonych w mechanizm EM-64T. Pora zajrzeć do wnętrza systemu operacyjnego klasy Windows. W jaki sposób tutaj implementowane są poznane wcześniej mechanizmy.

 Do początku strony Do początku strony

Poziomy ochrony procesora – pierścienie ochrony (protekcji)

Na wstępie należy wprowadzić bardzo ważne pojęcie związane zarówno z architekturą procesora jak i architekturą systemu operacyjnego klasy Windows NT. W procesorach firmy INTEL pracujących w trybie z ochroną wprowadzono sprzętowe mechanizmy decydujące czy dany kod programu należy do systemu operacyjnego (jądra) - LEVEL 0, usług dodatkowych związanych z jądrem LEVEL 1 i 2 oraz aplikacji użytkownika LEVEL 3.

Mechanizm ten określany jest poprzez tzw. Pierścienie (poziomy) ochrony (ang. Protection Rings). Ze względów historycznych, dla celów uproszczenia i ujednolicenia kodu systemu operacyjnego dla innych procesorów jak: MIPS, ALPHA, PowerPC – Microsoft zrezygnował z wykorzystania trybów - poziomów oznaczonych jako LEVEL 1 i LEVEL 2. Stąd wszystkie implementacje systemów operacyjnych Windows z rodziny NT korzystają wyłącznie z poziomu „0” oznaczanego jako tryb jądra (ang. Kernel mode) oraz „3” oznaczanego jako tryb użytkownika (ang. User mode).

Rys. 5.1. Pierścienie ochrony w procesorach z rodziny x86, x64.

Rys. 5.1. Pierścienie ochrony w procesorach z rodziny x86, x64.

 

Uwaga!

Aby uporządkować nazewnictwo związane z adresacją pamięci fizycznej, liniowej, wirtualnej.

Nomenklatura INTEL

Aplikacja (32-bitowa przestrzeń logiczna) -> konwersja w procesie segmentacji na adres liniowy -> konwersja w procesie stronicowania na adres fizyczny

Nomenklatura Microsoft

Aplikacja (32-bitowa przestrzeń wirtualna) -> konwersja w procesie segmentacji na adres liniowy -> konwersja w procesie stronicowania na adres fizyczny (de facto również współpraca z plikiem wymiany SWAP)

 

 Do początku strony Do początku strony

Przydzielanie pamięci dla aplikacji

Procesor adresuje pamięć fizyczną (adres komórki pamięci jest jednakowy dla adresacji liniowej – jeżeli wyłączone jest stronicowanie) – za pomocą magistrali adresowej.

Procesor INTEL i386 ma magistralę adresową zewnętrzną o 32 wyprowadzeniach. Od procesora INTEL Pentium Pro liczy już ona co najmniej 36 wyprowadzeń. Za pomocą dodatkowych mechanizmów adresowania można zaadresować maks. 64 GB pamięci RAM. Pozwala to umieścić 32-bitową aplikację w dowolnym miejscu tej 64 GB-owej przestrzeni adresowej.

Niestety programiści firmy Microsoft ograniczyli maksymalną wielkość przestrzeni dostępnej dla danej aplikacji (w tym i systemu – mówimy o adresowaniu logicznym). Nie mamy dostępnych 4 GB ale mniej… Pytanie powstaje ile mniej.

Po uruchomieniu komputera/serwera jest ładowany system operacyjny. Nazwijmy go aplikacją „zerową”. Otóż ta zerowa aplikacji, o wielkości maks. 4 GB została podzielona na dwie części – standardowo po połowie. Dolna cześć - od zera (00000000h) do połowy – czyli (7FFFFFFFh) – dolne 2 GB – przeznaczone jest dla innych/kolejnych aplikacji użytkownika. Górna cześć (od 80000000h) do (FFFFFFFFh) – czyli górne 2 GB – przeznaczone jest dla systemu operacyjnego. Sam system nie jest monolityczny. W jego skład wchodzą: pseudo-mikrojądro (kernel), biblioteki warstwy abstrakcyjnej sprzętu - HAL (ang. Hardware Abstration Layer), sterowników urządzeń, pamięć systemowa cache - określana jako Paged pool i Nonpaged pool. Część z tych pojęć zostanie pokrótce omówiona dalej.

 Do początku strony Do początku strony

Standardowy i niestandardowy podział przestrzeni adresowej 32-bitowych systemów klasy Windows opartych o jądro w wersji NT 5.X (Windows 2k, 2k3, XP).

Rys. 5.2. Dwa standardowe podziały przestrzeni adresowej 32-bitowych systemów z rodziny Microsoft Windows (2k, 2k3,XP).

Rys. 5.2. Dwa standardowe podziały przestrzeni adresowej 32-bitowych systemów z rodziny Microsoft Windows (2k, 2k3,XP).

 

Ten standardowy podział można zmienić dodając parametr /3GB w pliku boot.ini. Wtedy dla aplikacji użytkownika zostaje przydzielone do 3 GB (00000000h-BFFFFFFFh). Jak rysunek wyżej pokazuje – adres startowy części oznaczonej, jako Tabela stron procesów, hyperspace – nie ulega zmianie. Zmniejszona została natomiast dostępna część oznaczona jako System Cache – gdyż musiało tu się zmieścić pseudo-mikrojądro systemu, systemowe biblioteki .dll, biblioteki HALL oraz sterowniki systemowe.

Systemy Windows XP i 2k3 mogą dokładnie określić ile tej pamięci ma być przydzielone dla aplikacji użytkownika za pomocą dodatkowego parametru /USERVA=…. Wartość w MB.

Uwaga!

Dla Exchange 2003 doświadczalnie wyznaczono wartość równą 3030. Parametr ten podawany jest wewnątrz pliku BOOT.ini. Opcje pliku BOOT.ini związane z trybami obsługi i zarządzania procesorem i pamięcią opisane zostaną w dalszych częściach.

 

 Do początku strony Do początku strony

Systemowe regiony pamięci 32-bitowych systemów Microsoft Windows.

Rys. 5.3. Systemowe regiony pamięci 32-bitowych systemów Microsoft Windows, bez włączonego parametru /3GB.

Rys. 5.3. Systemowe regiony pamięci 32-bitowych systemów Microsoft Windows, bez włączonego parametru /3GB.

 

Poszczególne regiony pamięci przeznaczone są dla:

Mapowane widoki systemowe – wykorzystywane do odwzorowania tabel stron pamięci dla sterownika win32k.sys, części podsystemu systemu Windows pracującego w trybie jądra (ang. kernel-mode) oraz sterowników grafiki również pracujących w trybie jądra.

Hyperspace – specjalny region pamięci, wykorzystywany do mapowania listy aktywnych procesów oraz tymczasowego mapowania innych stron umieszczonych w pamięci fizycznej na czas operacji czyszczenia/zwalnia stron pamięci, do tworzenia map pamięci wykorzystywanych przy uruchamianiu nowego procesu oraz do zarządzania listami obszarów roboczych (ang. working sets)

System Working Set List – lista struktur systemowych

Cache systemowy – wirtualny adres w przestrzeni adresowej – wykorzystywany do mapowania otwartych przez system plików. Zarządzane poprzez proces – o nazwie Cache manager. Zarządzanie pamięcią cache zostanie omówione oddzielnie przy omawianiu zagadnień związanych z pamięcią cache „zaszytą” w procesorze.

Tabela stron – obszar systemowy „swapowalny” (ang. Paged Pool) – sterta/stos/lista/tabela (nazewnictwo bywa różne) stron pamięci, która może być wymieniana pomiędzy pamięcią fizyczną - RAM a plikiem wymiany - SWAP.

Systemowe obszary PTE – Systemowe tabele stron pamięci – wykorzystywane przez stos mikro-jądra, zmapowaną na adresy pamięci przestrzeń wejścia wyjścia procesora oraz inne listy deskryptorów systemowych.

Obszar systemowy „nieswapowalny” (ang. NonPaged Pool) – stos/sterta pamięci systemowej, (która nie jest „swap’owana” pomiędzy pamięcią RAM a dyskiem) zwykle funkcjonuje w postaci dwóch oddzielnych fragmentów. Jeden w dolnej części przestrzeni adresowej dostępnej dla systemu, drugi w jego górnej części.

Obszar sterownika Crash dump – miejsce zarezerwowane do zapisu informacji o stanie systemu w przypadku jego „awarii”.

Zarezerwowane dla biblioteki HAL – zakres systemowy – zarezerwowany do wykorzystania przez bibliotekę warstwy abstrakcyjnej sprzętu.

Proces odwzorowywania (mapowania) strony pamięci aplikacji (procesu) – na stronę w pamięci fizycznej (RAM+SWAP) – zachodzi z wykorzystaniem systemowych regionów w pamięci o nazwie TE (ang. Table Entries) – ta funkcjonalność zaszyta jest w samym procesorze i była omawiania w częściach wcześniejszych. Poszczególne właściwości elementów TE zależą od trybu w jakim pracuje sam procesor.

Poszczególne adresy startowe systemowych regionów pamięci są albo zdefiniowane w różnych zmiennych systemowych, albo wyliczane dynamiczne, na podstawie dostępnej ilości pamięci fizycznej.

Tabela. Adresy startowe i końcowe poszczególnych obszarów systemowych.
Zmienna systemowa Opis Tryb x86 (bez włączonej opcji /3GB) bez PAE Tryb x86 (z włączoną opcją /3GB) bez PAE
MmSystemRangeStart Początek systemowej przestrzeni adresowej 0x80000000 0xC0000000
MmSystemCacheWorkingSetList System Working Set List 0xC0C000000 Obliczany
MmSystemCacheStart Początek Cache systemowego Obliczany Obliczany
MmSystemCacheEnd Koniec Cache systemowego Obliczany Obliczany
MmSystemCacheStartExtra Początek Cache systemowego lub dodatkowych systemowych elementów PTE Obliczany 0
MmSystemCacheEndExtra Koniec Cache systemowego lub dodatkowych systemowych elementów PTE 0xC0000000 0
MmPagedPoolStart Początek obszaru „swapowalnego” Obliczany Obliczany
MmPagedPoolEnd Koniec obszaru „swapowalnego” Obliczany (wielkość maksymalna 650 MB) Obliczany (wielkość minimalna 160 MB)
MmNonPagedSystemStart Początek systemowych elementów PTE Obliczany (najniższa wartość to 0xEB000000) Obliczany
MmNonPagedPoolStart Początek obszaru „nieswapowalnego” Obliczany Obliczany
MmNonPagedPoolExpansionStart Początek rozszerzonego obszaru „nieswapowalnego” Obliczany Obliczany
MmNonPagedPoolEnd koniec obszaru „nieswapowalnego” 0xFFBE0000 0xFFBE0000

 

Rys. 5.4. Proces mapowania stron pamięci aplikacji (procesu) na strony w pamięci fizycznej (RAM+SWAP).

Rys. 5.4. Proces mapowania stron pamięci aplikacji (procesu) na strony w pamięci fizycznej (RAM+SWAP).

 

 Do początku strony Do początku strony

Mechanizm AWE

Jeżeli mamy więcej pamięci RAM niż potrafi standardowo zaadresować 32-bitowy system operacyjny, posługujemy się mechanizmem odwrotnym. Poprzez wąskie okienko w części pamięci przeznaczonej na procesy użytkownika uzyskujemy dostęp do obszaru leżącego poza 4 GB. Mechanizm ten został nazwany AWE – ang. Address Windowing Extensions.

Przykładowo:

Windows 2000 Advanced Server może adresować do 8 GB pamięci fizycznej RAM, a serwer bazodanowy SQL 2000 może wykorzystać mechanizm AWE do zaalokowania dodatkowych 6 GB (ponad standardowo przydzielone 2GB dla procesu – w tym przypadku SQL) jako pamięć database cache.

 

Rys. 5.5. Proces mapowania pamięci z wykorzystaniem mechanizmu AWE

Rys. 5.5. Proces mapowania pamięci z wykorzystaniem mechanizmu AWE

 

Mechanizm AWE jest zaimplementowany we wszystkich wersjach systemu Windows, a jego zastosowanie zależy od tego jaką ilością pamięci RAM dysponujemy. Praktycznie wykorzystywany jest, gdy dysponujemy ponad 2 GB pamięci RAM.

Uwaga!

Zagadnienie związane z bezpieczeństwem. Skoro pamięć AWE nie jest swapowalna! To w pliku wymiany (swap file) nie będzie żadnych informacji do wykorzystania w przypadku uruchomienia systemu z alternatywnego systemu operacyjnego i próbach bezpośredniego do niego dostępu za pomocą „nielegalnych” technik.

 

Ograniczenia mechanizmu AWE związane z przełączaniem się przez mapowane okno do pamięci AWE:

  • strony pamięci nie mogą być współdzielone przez procesy,
  • ta sama strona fizyczna nie może być mapowana wielokrotnie z wykorzystaniem różnych adresów wirtualnych przez ten sam proces,
  • wersje systemu starsze od Windows Server 2003 Service Pack 1 i Windows XP Service Pack 2 – zapewniają mechanizm ochrony strony wyłącznie w trybie read/write. W późniejszych dodano tryby, no access i read-only.

Uwaga.

Oczywiście mechanizm ten jest dostępny w momencie włącznie trybu PAE.

 

 Do początku strony Do początku strony

Pojęcie programu (ang. Program), procesu (ang. Process) , wątku (ang. Thread), zadania (ang. Job) i włókna (ang. Fiber)

Program – to statyczna sekwencja instrukcji przeznaczona do wykonania przez procesor(y).

Proces – to kontener na pewien zbiór zasobów wykorzystywanych przez instancję danego programu. Z punktu widzenia systemu Windows PROCES zapewnia:

- wykonawczą część programu, definiującą kod programu i dane zmapowane w prywatnej przestrzeni adresowej,

- listę uchwytów (ang. Handles) to znaczy różnych zasobów systemowych, jak semaforów, portów komunikacyjnych, plików dostępnych dla wszystkich wątków danego procesu,

- prywatną przestrzeń adresową, będącą podprzestrzenią pamięci wirtualnej,

- pewien kontekst zabezpieczeń (ang. security context) – zwany żetonem dostępu (ang. Access token), identyfikujący użytkownika, grupę i uprawnienia związane z danym procesem. Innym słowem każdy proces będzie uruchamiany w pewnym, ściśle określonym kontekście zabezpieczeń.

- unikalny identyfikator procesu – Process ID (PID),

- co najmniej jeden wątek wykonawczy.

Wątek – pewna całość (encja) wewnątrz procesu, która podlega harmonogramowi wykonania przez procesor. Wątek związany jest z następującymi komponentami:

- zawartość rejestrów procesora – reprezentujących stan procesora w danej chwili czasu,

- dwa stosy – jeden wykorzystywany w czasie wykonywania wątku dla procesu pracującego w trybie jądra i drugi dla trybu użytkownika,

- prywatną przestrzeń zwaną TLS (ang. Thread-Local-Storage), wykorzystywana przez podsystemy, oraz inne biblioteki wykonawcze oraz ładowane dynamicznie

- pewien identyfikator zwany identyfikatorem procesu thread-ID.

Rejestry, stos oraz prywatna przestrzeń TLS wątku zwane są kontekstem wątku. Kontekst ten zależny jest od architektury sprzętowej systemu (inny na x86, inny na IA-64). Podobnie jak dla procesu – można określić, iż watek uruchamiany jest w pewnym kontekście. A skoro wątek jest nierozerwalnie związany z procesem to, de facto dziedziny on po procesie i jednocześnie współdzieli inne zasoby związane z procesem jak np. prywatną przestrzeń adresową. Wątek nie może przypadkowo uzyskać dostępu do zasobów spoza procesu, chyba że sam proces współdzieli z innym pewien fragment przestrzeni pamięci – tzw. shared memory section – zwany inaczej file mapping object.

Rys. 5.6. Komponenty procesu. Rysunek zaczerpnięty z książki Microsoft Windows Internals 4Ed – Microsoft Press.

Rys. 5.6. Komponenty procesu. Rysunek zaczerpnięty z książki Microsoft Windows Internals 4Ed – Microsoft Press.

 

Elementy VAD (ang. Virtual Address Descriptors) – są strukturami danych, wykorzystywanymi przez Menadżera pamięci do śledzenia wirtualnej przestrzeni adresowej wykorzystywanej przez proces.

Włókno - Procesy w systemach Windows są wykonywane zgodnie z pewnym harmonogramem oraz priorytetem narzucanym przez podsystemy Windows. Konwersja wątku do elementu oznaczanego jako włókno pozwala się wątkom uniezależnić się od wbudowanego mechanizmu priorytetyzacji i harmonogramu systemowego. Dla jądra systemu jest to całkowicie niewidoczne, gdyż mechanizm ten został wbudowany w bibliotekę kernel32.dll – dla procesów pracujących w trybie użytkownika.

Jobs – Zadanie to rozszerzenie pojęcia procesu. Mechanizm ten pozwala na funkcjonowanie i wspólne zarządzanie wieloma procesami na raz - tak jak by to był jeden proces. Mechanizm pozwala na prostą kontrolę wspólnych atrybutów. Bardzo dobrym przykładem jest - svchost.exe (Generic Host Process for Win32 Services). Mechanizm jest rozszerzeniem pojęcia zwanego z systemów UNIX’owych zwanego drzewem procesów (ang. Process Tree).

 Do początku strony Do początku strony

Domyślny tryb adresowania – 32-bitowy, strona 4 KB

Domyślnie system Windows korzysta z mechanizmu dwupoziomowego do budowania tablicy stron pamięci – z 32-bitowego adresowania z wykorzystaniem strony o wielkości 4KB. Mechanizm ten omawiany był w części 3 (stronicowanie domyślne). Przypominamy rysunek – prezentujący mechanizm odpowiadający za wybór danej 4 KB strony za pomocą elementów PDE i PTE.

Rys. 5.7. Proces generowania adresu danej strony w przestrzeni wirtualnej (fizycznej).

Rys. 5.7. Proces generowania adresu danej strony w przestrzeni wirtualnej (fizycznej).

 

Wybieramy za pomocą adresu 10-bitowego – z katalogu stron (ang. Page Directory Index) daną tabelę stron (Element PDE – ang. Page Directory Entry). Katalog stron ma pojemność 2^10 czyli 1024 pozycje.

Teraz z wybranej za pomocą elementu PDE tabeli stron (ang. Page Table Index) wybieramy interesującą stronę (adres 10-bitowy) (Element PTEang. Page Table Entry) – identycznie daje to 1024 pozycje numeru strony.

1024*1024 = 1048576 (1 MB) stron pamięci. Ponieważ maksymalnie możemy zaadresować dla aplikacji 4 GB pamięci otrzymujemy 4 GB/1 MB = 4 KB. Co oznacza że strona ma domyślną wielkość 4 KB. Aby teraz uzyskać adres wewnątrz danej strony został nam parametr oznaczony jako - przesunięcie w obrębie strony (12 bitowy) = czyli adres w obrębie 4 KB strony z dokładnością do bajta.

Każdy 32-bitowy proces (aplikacja) – związany jest z jednym wpisem w katalogu stron PDE. Wpis ten tworzony jest przez Menadżera Pamięci w celu mapowania wszystkich stron pamięci związanych z daną aplikacją. Adres w pamięci wirtualnej, w którym umieszczony jest katalog stron umieszczony jest w bloku procesów mikrojądra (KPROCESS), ale de facto jest również automatycznie mapowany na adres 0xC0300000h dla systemów zgodnych z x86 systems (0xC0600000h dla systemów z włączoną funkcją PAE).

Procesor zna lokalizację katalogu tabel stron. Został, bowiem wyposażony w specjalny rejestr o nazwie CR3, który ładowany jest odpowiednią wartością przez system operacyjny. Wartość ta wskazuje, bowiem na adres katalogu tabel stron (ang. Page Directory) w pamięci wirtualnej. Za każdym razem w przypadku przełączenia procesora na obsługę innego wątku innego procesu niż aktualnie wykonywany, rejestr ten ładowany jest wartością pochodzącą z bloku KPROCESS procesu, do którego następuje przełączenie, za pomocą mechanizmu context-switch w jądrze systemu. Przełączanie wątków wewnątrz procesu nie powoduje załadowania rejestru nową wartością, ponieważ wątki wewnątrz procesu współdzielą tą samą liniową przestrzeń adresową.

 Do początku strony Do początku strony

Mechanizm zarządzania pamięcią.

W zależności od architektury sprzętowej mechanizm stronicowania korzysta ze stron o różnej wielkości. Domyślna wartość dla systemów x86 oraz x64 to 4KB (jest określana jako Small Page Size). Dla obu tych architektur w dostępna jest również większa wartość strony – dla x86 4 MB (lub 2 MB, jeżeli system(procesor) został przełączony w tryb PAE), dla architektury x64 – 2 MB.

Uwaga.

Architektury IA64 (Itanium, Itanium 2) – nie będziemy omawiać, ze względu na mały udział procentowy na rynku sprzętu przeznaczonego pod w/w platformy dla systemów Windows).

 

Tabela. Wielość strony w zależności od architektury sprzętowej procesora i trybu adresowania.
Architektura Strona małej wielkości Strona dużej wielkości
x86 4 KB 4 MB (2 MB w systemach z włączonym trybem PAE )
x64 4 KB 2 MB
IA64 8 KB 16 MB

 

Strony o większej wielkości są efektywniejsze przy pracy (współpracy) pamięci RAM z pamięcią Cache zarówno pierwszego poziomu L1 jak i drugiego poziomu L2. (Cache L1 i L2 to pamięć cache wewnątrz samego procesora). Dostępność stron pamięci o większej wielkości niż domyślna (4 lub 8 KB) jest zależna od minimalnej zainstalowanej pamięci fizycznej w komputerze i wynosi dla systemów:

Tabela. Minimalna ilość pamięci potrzebna do włączenie obsługi stron dużej wielkości.
System Operacyjny Minimalna wartości pamięci RAM – do włączenia obsługi stron dużej wielkości
Windows 2000 >127 MB
Windows XP, Windows Server 2003 >255 MB

 

 Do początku strony Do początku strony

System wielosesyjny.

W systemach wielosesyjnych, tzn. Windows 2000 Server (z uruchomionym trybem Usług Terminalowych), Windows XP oraz Windows 2003 (– zdalny pulpit) system rezerwuje specjalny obszar zwany obszarem sesji – w którym umieszczane są globalne informacje dotyczące danej sesji. Obszar sesji reprezentuje niezależne sesję logowania interaktywnego do systemu Windows. Każda z sesji ma zwój obszar Pool Area (obszar swap’owalny), wykorzystywany przez podsystem jądra Windows (kernel-mode) – plik win32k.sys, wykorzystywany do alokowania struktur danych danej sesji graficznej. Każda graficzna sesja ma zatem swoją własną kopię podsystemu zarządcy procesów (csrss.exe) oraz aplikację odpowiedzialną za logowanie (winlogon.exe). Proces Menadżera sesji (smss.exe) jest odpowiedzialny za tworzenie nowych sesji (w tym ładowanie prywatnej kopii win32k.sys oraz innych elementów i obiektów w ramach danej sesji, jak instancji csrss.exe i winlogon.exe). W momencie tworzenia procesu zakres adresów pamięci danego procesu mapowany jest z daną sesją, do której przynależy. Wielkość tych tzw. Widoków mapowanych (ang. mapped views) można zmodyfikować w kluczu rejestru:

HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management

Uwaga.

Dla systemu 32-bitowego wartość ignorowana, gdy włączona jest opcja /3GB w pliku boot.ini.

 

Poniżej przykładowa zawartość omawianej gałęzi rejestru (dla Windows XP)

Rys. 5.8. Przykładowa zawartość gałęzi rejestru odpowiadające za zarządzanie pamięcią

Rys. 5.8. Przykładowa zawartość gałęzi rejestru odpowiadające za zarządzanie pamięcią

 

Dodatkowe informacje można uzyskać pod adresem:

Microsoft Advanced Windows Debugging and Troubleshooting

https://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx

 Do początku strony Do początku strony

Przestrzeń sesji

Rys. 5.9. Obszar sesji

Rys. 5.9. Obszar sesji

 

Za definiowane wielkości obszarów sesji odpowiadają następujące klucze w rejestrze:

Przykładowa cała linia definiujące sesje:

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows

       SharedSection=1024,3072,512 Windows=On SubSystemType=Windows

       ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3

       ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off

       MaxRequestThreads=16

Rys. 5.10. Klucze w rejestrze odpowiadające za konfigurację obszarów pamięciowych sesji

Rys. 5.10. Klucze w rejestrze odpowiadające za konfigurację obszarów pamięciowych sesji

 

 Do początku strony Do początku strony

Zestawienie wielkości obszarów pamięciowych sesji w zależności od typu systemu operacyjnego

Windows XP (32-bit)

48 MB = SessionViewSize (Wartość ustawialna w rejestrze Windows XP Professional, x86)

20 MB = SessionViewSize (Jeżeli nie zdefiniowano klucza w rejestrze)

3072 KB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

512 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze, SharedSection wartość trzecia)

128 KB = Wielkość stosu dla procesu Winlogon

64 KB = Wielkość stosu dla procesu obsługi pulpitu - odłączonego

Windows Server 2003 (32-bit)

48 MB = SessionViewSize (Wartość domyślna w rejestrze)

20 MB = SessionViewSize (Jeżeli nie zdefiniowano inaczej, wartość domyślna – dla trybu z włączoną obsługą Terminal Services)

3072 KB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

512 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze , SharedSection wartość trzecia)

128 KB = Wielkość stosu dla procesu Winlogon

64 KB = Wielkość stosu dla procesu obsługi pulpitu - odłączonego

Windows Server 2003 z opcją /3GB (32-bit)

20 MB = SessionViewSize (Wpis w rejestrze jest ignorowany)

3072 KB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

512 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze , SharedSection wartość trzecia)

128 KB = Wielkość stosu dla procesu Winlogon

64 KB = Wielkość stosu dla procesu obsługi pulpitu - odłączonego

W trybie /3GB można dodatkowo zredukować wielkość stosu sesji. System automatycznie będzie próbował dobrać optymalną wartość w zależności od spodziewanej liczby sesji. W przypadku zwiększonych wartości parametrów pola SharedSection, ustawienie rezerwacji sesji może się nie powieść. W takim przypadku Memory Manager ustawi wartości bezpieczne dla stosu, tj. 512KB dla części interaktywnej i 128KB dla nieinteraktywnej oraz spróbuje zarezerwować pamięć wartościami mniejszymi niż podano w rejestrze. Umożliwia to poprawny start systemu, nawet przy zbyt dużych ustawionych wartościach dla stosu sesji pulpitu, które nie mieszą się w maksymalnym obszarze 20MB dla jednej sesji.

Windows Server 2003 (64-bit)

104 MB = SessionViewSize (Wartość domyślna, nawet gdy nie ma wpisu w kluczu rejestru)

20 MB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

768 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze , SharedSection wartość trzecia)

192 KB = Wielkość stosu dla procesu Winlogon

96 KB = Wielkość stosu dla procesu obsługi pulpitu - odłączonego

Windows Vista RTM (32-bit)

SessionViewSize jest teraz zakresem dynamicznie przydzielanym. Zatem klucze w rejestrze nie są wykorzystywane

3072 KB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

512 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze, SharedSection wartość trzecia)

128 KB = Wielkość stosu dla procesu Winlogon

64 KB = Wielkość stosu dla procesu obsługi pulpitu – odłączonego

Windows Vista SP1 (32-bit) and Windows Server 2008 (32-bit)

SessionViewSize jest teraz zakresem dynamicznie przydzielanym. Zatem klucze w rejestrze nie są wykorzystywane

12288 KB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

512 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze, SharedSection wartość trzecia)

128 KB = Wielkość stosu dla procesu Winlogon

64 KB = Wielkość stosu dla procesu obsługi pulpitu - odłączonego

Windows Vista (64-bit) and Windows Server 2008 (64-bit)

SessionViewSize jest teraz zakresem dynamicznie przydzielanym. Zatem klucze w rejestrze nie są wykorzystywane

20 MB = Wielkość stosu dla pulpitu część - interaktywna (Wartość ustawialna w rejestrze, SharedSection wartość druga)

768 KB = Wielkość stosu dla pulpitu część - nieinteraktywna (Wartość ustawialna w rejestrze, SharedSection wartość trzecia)

192 KB = Wielkość stosu dla procesu Winlogon

96 KB = Wielkość stosu dla procesu obsługi pulpitu - odłączonego

 Do początku strony Do początku strony

Systemowe obszary PTE

Systemowe obszary PTE są wykorzystywane do dynamicznego mapowania systemowych stron pamięci jak obszary I/O, stos jądra, listy deskryptorów. Nie są nieograniczone.

System Windows 2000 zezwala na przydzielenie tylko 650 MB w obszarze pamięci wirtualnej (z czego 440 MB może być obszarem ciągłym).

W 32-bitowych edycjach systemu Windows XP i serwera 2k3 ilość pamięci przeznaczonej na systemowe PTE została zwiększona do ok. 1,3 GB (z czego 960 MB może być ciągłe). W systemach 64-bitowych wielkość ta wynosi 128 GB ciągłej wirtualnej przestrzeni adresowej.

Domyślnie systemy Windows dopasowują sobie wielkość tego obszaru dynamicznie na podstawie dostępnej ilości pamięci RAM. Za tą wartość odpowiada klucz w rejestrze.

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SystemPages
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SystemPages

Jeżeli wartość ustalona jest na 0xFFFFFFFF oznacza, rezerwowana będzie maksymalna dostępna ilość pamięci dla elementów PTE (tak jak na przykładzie powyżej).

Można podejrzeć, ile jest aktualnie wykorzystywanych – korzystając z Performance Monitora. Licznik Memory: Free System Page Table Entries.

Tabela. Wielkości systemowych obszarów danych dla procesorów rodzin x86, x64 i IA64
Obszar IA-64 x64 x86 (bez /3GB) X86 (/3GB)
Przestrzeń adresowa dla procesów użytkownika 7152 GB 8192 GB 2 GB 3 GB
Systemowe obszary PTE 128 GB 128 GB 1.2 GB  
System Cache 128 GB 128 GB 960 MB  
Paged Pool (obszar podlegający swap’owaniu) 128 GB 128 GB 470 MB (Windows 2000 i XP 650 MB (Windows 2003)  
Nonpaged Pool (obszar niepodlegający swapo’waniu) 128GB 128 GB 256 MB  

 

W następnych częściach – Obszary systemowe dla procesorów x64. Mechanizmy ochrony na poziomie strony. Tryb DEP (ang. Date Execution Prevention). Mechanizm copy on-write, oddzielne i współdzielone obszary pamięci. Plik wymiany. Monitorowanie przydziału i zajętości pamięci. Start systemu Windows z uwzględnieniem procesów systemowych i trybów adresowania pamięci.

 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. IV     Windows Server 2008