Sdílet prostřednictvím


Speciální bazén

Funkce Speciální fond konfiguruje systém Windows tak, aby požadoval přidělení paměti z vyhrazeného fondu paměti, pokud je paměť přidělena se zadanou značkou fondu nebo je v zadaném rozsahu velikostí.

Abbreviation

Spp

Šestnáctková hodnota

(Žádné)

Symbolický název

(Žádné)

Cíl

Položka registru pro celý systém

(Windows Vista a novější) Systémová položka registru, příznak kernelu

Výběr značky fondu

Při žádosti o speciální fond pro konkrétní identifikátor fondu se ujistěte, že váš ovladač nebo jiný program v režimu jádra používá jedinečný identifikátor fondu.

Při vytváření značky fondu (například pomocí exAllocatePoolWithTag) zvažte zadání znaků značek v obráceném pořadí. Pokud je značka Fred, zvažte její zadání jako derF (0x64657246). Značky fondu se ukládají v registru a zobrazují se v ladicím programu a dalších nástrojích v obráceném pořadí (dolní endian). Pokud je zadáte v obráceném pořadí, zobrazí se v předním pořadí (0x46726564).

Pokud máte podezření, že váš ovladač využívá celý speciální fond, zvažte použití více značek fondu v kódu. Potom můžete ovladač otestovat několikrát a přiřadit speciální fond jednomu tagu fondu v každém testu.

Vyberte také značku fondu s šestnáctkovou hodnotou, která je větší než velikost stránky systému. Pokud pro kód režimu jádra zadáte značku fondu, která má hodnotu menší než PAGE_SIZE, Gflags požádá o speciální fond pro všechna přidělení, jejichž velikost je v odpovídajícím rozsahu a požaduje zvláštní fond pro přidělení s ekvivalentní značkou fondu. Pokud například vyberete velikost 30, speciální fond se použije pro všechna přidělení v rozsahu 17 až 32 bajtů a pro přidělení se značkou fondu 0x0030.

Výběr velikosti přidělení

Pomocí následujících pokynů vyberte velikost přidělení pro funkci Speciální fond.

V počítači s procesorem x86 je PAGE_SIZE 0x1000 a rozsahy velikosti přidělení jsou 8 bajtů. Pokud chcete nakonfigurovat funkci Speciální fond pro všechna přidělení s velikostmi v tomto rozsahu, zadejte číslo, které se rovná maximu tohoto rozsahu plus 8. (Toto číslo je vždy násobkem 8.) Následující tabulka znázorňuje tyto hodnoty:

Rozsah velikostí Zadejte toto číslo.

1 až 8 bajtů

10 (desítkové číslo 16)

9 až 16 bajtů

18 (desítkové číslo 24)

17 až 24 bajtů

20 (desítkové číslo 32)

...

...

0xFE9 až 0xFF0 bajtů

FF8 (desítkové číslo 4088)

Na počítači s procesorem AMD x86-64 je PAGE_SIZE 0x1000 a rozsahy velikostí přidělení mají délku 16 bajtů. Pokud chcete nakonfigurovat funkci Speciální fond pro všechna přidělení s velikostmi v tomto rozsahu, zadejte číslo, které se rovná maximálnímu počtu tohoto rozsahu plus 16. (Toto číslo je vždy násobkem 16.) Následující tabulka znázorňuje tyto hodnoty:

Rozsah velikostí Zadejte toto číslo.

1 až 16 bajtů

20 (desítkové číslo 32)

17 až 32 bajtů

30 (desítkové číslo 48)

33 až 48 bajtů

40 (desítkové číslo 64)

...

...

0xFD1 až 0xFE0 bajtů

FF0 (desítkové číslo 4080)

Na počítači s libovolným procesorem můžete pomocí hvězdičky ( * ) nebo 0x2A (desítkové číslo 42) nakonfigurovat funkci Speciální fond pro všechny přidělení paměti v systému.

komentáře k

Informace o konfiguraci funkce Speciální fond v dialogovém okně Globální příznaky naleznete v tématu Konfigurace speciálního fondu. Informace o konfiguraci funkce Speciální fond na příkazovém řádku najdete v části Příkazy GFlags. Příklad najdete v příkladu 14: Konfigurace speciálního fondu.

Funkce Speciální pool Gflags směruje systém Windows, aby při žádosti o přidělení paměti byla tato paměť přidělena z vyhrazeného poolu paměti, pokud je přidělena se specifikovanou značkou poolu nebo v rámci specifikovaného rozsahu velikostí. Pokud chcete požádat o speciální paměťový fond pro všechna přidělení pro určitý ovladač, použijte nástroj Driver Verifier. Další informace naleznete v tématu "Speciální fond" v části "Driver Verifier" sady Windows Driver Kit (WDK).

Speciální funkce paměťového fondu Gflags a Driver Verifier pomáhají rozpoznat a identifikovat zdroj chyb při použití fondu jádra, například zápis mimo přidělený paměťový prostor nebo odkaz na paměť, která již byla uvolněna.

Ne všechny zvláštní žádosti o fond jsou splněny. Každé přidělení ze speciálního fondu používá jednu stránku nestránkové fyzické paměti a dvě stránky virtuálního adresního prostoru. Pokud dojde k vyčerpání speciálního fondu, přidělí se paměť ze standardního fondu, dokud nebude speciální fond znovu k dispozici. Když je žádost o speciální fond vyřízena ze standardního fondu, vrátí funkce provádějící tuto žádost stav úspěchu. Nevrací chybu, protože přidělení bylo úspěšné, i když nebylo vyplněno ze speciálního fondu.

Velikost speciálního fondu se zvyšuje s množstvím fyzické paměti v systému; v ideálním případě by to mělo být alespoň 1 Gigabajt (GB). Na počítačích x86 se používá prostor jak virtuální, tak fyzický, proto nepoužívejte možnost spouštění /3GB, jestliže používáte speciální paměťový fond. Je také vhodné zvýšit minimální/maximální velikost stránkovacího souboru o faktor dvou nebo tří.

Můžete také nakonfigurovat funkci Speciální pool tak, aby zarovnání přidělení paměti zjistilo odkazy na paměť před přidělením ("nedostatečný přístup") nebo odkazy na paměť nad rámec přidělení ("překročení"). Tato funkce je dostupná pouze v dialogovém okně Globální příznaky ve všech verzích Windows. Podrobnosti najdete v tématu Detekce přetečení a podtečení.

Ve Windows Vista a novějších verzích Systému Windows můžete nakonfigurovat funkci Speciální fond jako nastavení registru, které vyžaduje restartování, ale zůstává účinné, dokud ho nezměníte, nebo jako nastavení příznaku jádra, které nevyžaduje restartování, ale funguje pouze do restartování nebo vypnutí systému Windows. Ve starších verzích Windows je speciální fond k dispozici pouze jako nastavení registru.

Ve Windows Vista a novějších verzích Systému Windows můžete nakonfigurovat funkci Speciální fond buď pomocí dialogového okna Globální příznaky, nebo na příkazovém řádku. Ve starší verzi Windows je tato funkce dostupná pouze v dialogovém okně Globální příznaky.