Udostępnij przez


Pula specjalna

Funkcja Puli specjalnej konfiguruje system Windows do żądania alokacji pamięci z zarezerwowanej puli pamięci, gdy pamięć jest przydzielana za pomocą określonego tagu puli lub znajduje się w określonym zakresie rozmiaru.

Abbreviation

Spp

Wartość szesnastkowa

(N/A)

Nazwa symboliczna

(N/A)

Lokalizacja docelowa

Wpis rejestru dla całego systemu

(Windows Vista i nowsze) Wpis rejestru całego systemu, flaga jądra

Wybieranie tagu puli

Podczas żądania specjalnej puli dla określonego tagu puli upewnij się, że sterownik urządzenia lub inny program trybu jądrowego używa unikalnego tagu puli.

Ponadto podczas tworzenia tagu puli (na przykład przy użyciu polecenia ExAllocatePoolWithTag) rozważ wprowadzenie znaków tagu w odwrotnej kolejności. Jeśli na przykład tag to Fred, rozważ wprowadzenie go jako derF (0x64657246). Tagi puli są przechowywane w rejestrze i wyświetlane w debugerze i innych narzędziach w odwrotnej kolejności (niższe endian). Jeśli wprowadzisz je w odwrotnej kolejności, są one wyświetlane w normalnej kolejności (0x46726564)

Jeśli podejrzewasz, że sterownik zużywa całą specjalną pulę, rozważ użycie wielu tagów puli w kodzie. Następnie możesz kilkakrotnie przetestować sterownik, przypisując specjalną pulę do jednego znacznika puli w każdym teście.

Ponadto wybierz tag puli z wartością szesnastkową większą niż rozmiar strony systemu. W przypadku kodu trybu jądra, jeśli wprowadzisz tag puli, który ma wartość mniejszą niż PAGE_SIZE, Gflags żąda specjalnej puli dla wszystkich alokacji, których rozmiar mieści się w odpowiednim zakresie i żąda specjalnej puli dla alokacji z równoważnym tagiem puli. Jeśli na przykład wybierzesz rozmiar 30, specjalna pula będzie używana dla wszystkich alokacji o rozmiarze od 17 do 32 bajtów, a w przypadku alokacji z tagiem puli 0x0030.

Wybieranie rozmiaru alokacji

Skorzystaj z poniższych wskazówek, aby wybrać rozmiar alokacji dla funkcji Special Pool.

Na komputerze z procesorem x86 PAGE_SIZE jest 0x1000, a zakresy rozmiarów alokacji to 8 bajtów. Aby skonfigurować funkcję puli specjalnej dla wszystkich alokacji z rozmiarami w tym zakresie, wprowadź liczbę równą maksymalnej wartości tego zakresu plus 8. (Ta liczba jest zawsze wielokrotną 8). W poniższej tabeli przedstawiono następujące wartości:

Zakres rozmiarów Wprowadź tę liczbę

Od 1 do 8 bajtów

10 (dziesiętne 16)

Od 9 do 16 bajtów

18 (dziesiętne 24)

Od 17 do 24 bajtów

20 (liczba dziesiętna 32)

...\

...\

0xFE9 do 0xFF0 bajtów

FF8 (dziesiętny 4088)

Na komputerze z procesorem AMD x86-64 PAGE_SIZE jest 0x1000, a zakresy rozmiarów alokacji to 16 bajtów. Aby skonfigurować funkcję puli specjalnej dla wszystkich alokacji z rozmiarami w tym zakresie, wprowadź liczbę równą maksymalnej wartości tego zakresu plus 16. (Ta liczba jest zawsze wielokrotną 16). W poniższej tabeli przedstawiono następujące wartości:

Zakres rozmiarów Wprowadź tę liczbę

Od 1 do 16 bajtów

20 (liczba dziesiętna 32)

Od 17 do 32 bajtów

30 (liczba dziesiętna 48)

Od 33 do 48 bajtów

40 (liczba dziesiętna 64)

...\

...\

0xFD1 do 0xFE0 bajtów

FF0 (liczba dziesiętna 4080)

Na komputerze z dowolnym procesorem można użyć gwiazdki ( * ) lub 0x2A (liczba dziesiętna 42), aby skonfigurować funkcję specjalnej puli dla wszystkich alokacji pamięci w systemie.

komentarze

Aby uzyskać informacje na temat konfigurowania funkcji Special Pool w oknie dialogowym Flagi globalne, odwołaj się do Konfigurowanie Special Pool. Aby uzyskać informacje na temat konfigurowania funkcji puli specjalnej w wierszu polecenia, zobacz Polecenia GFlags. Aby zapoznać się z przykładem , zobacz Przykład 14: Konfigurowanie puli specjalnej.

Funkcja specjalnej puli Gflags kieruje system Windows do żądania alokacji pamięci z zarezerwowanej puli pamięci, gdy pamięć jest przydzielana z określonym tagiem puli lub znajduje się w określonym zakresie rozmiaru. Aby zażądać specjalnej puli dla wszystkich alokacji przez określony sterownik, użyj weryfikatora sterowników. Aby uzyskać więcej informacji, zobacz temat "Pula specjalna" w sekcji "Weryfikator sterowników" zestawu Sterowników systemu Windows (WDK).

Specjalne funkcje puli Gflags i Verifier sterownika pomagają wykrywać i identyfikować źródło błędów w użyciu puli jądra, takie jak zapisywanie poza przydzieloną przestrzenią pamięci lub odwoływanie się do pamięci, która została już zwolniona.

Nie wszystkie żądania puli specjalnej są spełnione. Każda alokacja ze specjalnej puli używa jednej strony pamięci fizycznej, która nie podlega stronicowaniu, i dwóch stron wirtualnej przestrzeni adresowej. Jeśli pula specjalna zostanie wyczerpana, pamięć zostanie przydzielona ze standardowej puli do momentu ponownego udostępnienia specjalnej puli. Po wypełnieniu żądania z puli specjalnej z puli standardowej, funkcja żądająca zwraca status powodzenia. Nie zwraca błędu, ponieważ alokacja zakończyła się pomyślnie, mimo że nie została wypełniona z puli specjalnej.

Rozmiar specjalnej puli zwiększa się wraz z ilością pamięci fizycznej w systemie; najlepiej mieć co najmniej 1 gigabajt (GB). Na maszynach x86, ponieważ używane jest wirtualne miejsce (oprócz fizycznego), nie należy używać opcji /3GB rozruchu w przypadku korzystania ze specjalnej puli. Dobrym pomysłem jest również zwiększenie wartości minimalnej/maksymalnej pliku stronicowania dwukrotnie lub trzykrotnie.

Można również skonfigurować funkcję specjalnej puli w celu wyrównania alokacji pamięci w celu wykrywania odwołań do pamięci poprzedzających alokację ("underruns") lub odwołań do pamięci poza alokacją ("overruns"). Ta funkcja jest dostępna tylko w oknie dialogowym Flagi globalne we wszystkich wersjach systemu Windows. Aby uzyskać szczegółowe informacje, zobacz Wykrywanie przekroczeń i niedoprzekroczeń.

W systemie Windows Vista i nowszych wersjach systemu Windows można skonfigurować funkcję puli specjalnej jako ustawienie rejestru, które wymaga ponownego uruchomienia, ale pozostaje skuteczne do momentu zmiany lub jako ustawienia flagi jądra, które nie wymaga ponownego uruchomienia, ale jest skuteczne tylko do czasu ponownego uruchomienia lub zamknięcia systemu Windows. We wcześniejszych wersjach systemu Windows pula specjalna jest dostępna tylko jako ustawienie rejestru.

W systemie Windows Vista i późniejszych wersjach systemu Windows można skonfigurować funkcję specjalnej puli za pomocą okna dialogowego Globalnych flag lub poprzez wiersz polecenia. We wcześniejszej wersji systemu Windows ta funkcja jest dostępna tylko w oknie dialogowym Flagi globalne.