Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. V
Autor: Jacek Światowiak
Opublikowano: 27 marca 2008
Zawartość strony
W poprzedniej części | |
Poziomy ochrony procesora – pierścienie ochrony (protekcji) | |
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). | |
Systemowe regiony pamięci 32-bitowych systemów Microsoft Windows. | |
Mechanizm AWE | |
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 | |
Mechanizm zarządzania pamięcią. | |
System wielosesyjny. | |
Przestrzeń sesji | |
Zestawienie wielkości obszarów pamięciowych sesji w zależności od typu systemu operacyjnego | |
Systemowe obszary PTE | |
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
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.
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
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
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).
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
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.
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).
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
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
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.
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
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).
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 PTE – ang. 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
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
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ą
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
Przestrzeń 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
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
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
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. III
- Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows, cz. IV
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 |