Craftcom > Windows > Windows Vista > Kernel > Správa paměti
Verze pro tisk
Správa paměti

Dynamic Kernel Address Space

Windows a aplikace pod nimi běžící mohou narážet na limit adresního prostoru, který je dán 32-bitovými procesory. Kernel je omezen na 2GB, což je polovina 32-bitovho adresního prostoru a druhá polovina je vyhrazena threadům procesu, který procesor právě vykonává. V adresním prostoru kernelu je namapován samotný kernel, ovladače, cache file-systému, zásobníky kernelu... Před Windows Vista zjistil Memory Manager při bootování, kolik paměti bude kernel potřebovat a vyhradil adresní prostor, jehož velikost nešla za běhu měnit. To mohlo vést k situacím, kdy jedna z částí paměti byla plná, zatímco ta druhá téměř prázdná. Nedostatek místa ať na jedné nebo na druhé straně mohl způsobit selhání.
Ve 32-bitové verzi Windows Vista je adresní prostor kernelu řízen dynamicky podle potřeby. Množství virtuální paměti použité pro uchování bufferů může růst, pokud si ji ovladač vyžádá a zmenšit když ji ovladač uvolní. 64-bitové systémy mají limity v adresaci mnohem výše a nepotřebují tak žádnou speciální úpravu.

Memory Priorities

K pochopení toho, jak funguje prioritizování paměti, je nutné objasnit, jak Memory Manager implementuje cache zvanou Standby List. Když byla ve starších systémech fyzická stránka (physical page - typicky 4KB velká) vlastněná procesem vyžádána zpět systémem, Memory Manager ji umístil na konec Standby Listu. V případě, že proces chtěl znovu přístup ke stránce, Memory Manager ji vzal ze Standby Listu a přiřadil procesu. Pokud proces naopak chtěl novou stránku fyzické paměti a paměť nebyla volná, Memory Manager přidělil procesu první stránku Standby Listu. Tento způsob práce se Standby Listem uvažoval všechny stránky jako rovnocené a řazeny byly podle času umístění.
Ve Windows Vista má každá stránka prioritu v rozsahu 0-7. Memory Manager tak rozděluje Standby List na 8 částí a v každé části jsou stránky se stejnou prioritou. Když chce vzít Memory Manager stránku ze Standby Listu, tak vždy tu s nejmenší prioritou. Priorita stránky se odvíjí od priority threadu který zapříčil její alokaci (pokud je stránka sdílená pak se bere thread s nejvyšší prioritou). Nízkou prioritu dává Memory Manager stránkám, které jsou spekulativně čteny dopředu a není jisté, že se skutečně použijí.
Výchozí priorita je 5, ale jsou k dispozici funkce, které aplikacím a systému umožní ji měnit. Skutečná síla prioritizování paměti je ale znát, jen pokud jsou priority stránek uvažovány i na vyšší úrovni, což je práce SuperFetche.

SuperFetch

Významnou změnou v Memory Manageru je způsob, jakým spravuje fyzickou paměť. Práce se Standby Listem měla v předešlých systémech 2 omezení. První byla v tom, že se nebraly v úvahu budoucí požadavky na paměť. A druhá spočívá v tom, že data určená k prioritizaci byla limitována na soubor stránek vlastněné procesem v určitém čase. Tyto nedostatky vedly k situacím, kdy jste opustili počítač a systém spustil aplikace jako defragmentace nebo skenování antivirem. Tyto aktivity způsobí, že data aplikací které jste používaly, se začnou odkládat a když se vrátíte, musí systém tahat tyto data z disku.
Windows XP přinesl Prefetch, který zlepšil bootování a rychlost spouštění aplikací tím, že data načetl dopředu na základě informací o předešlém bootování a spouštění aplikací. Windows Vista se SuperFetchem udělali další velký krok ve správě paměti.
SuperFetch je implementován v knihovně %SystemRoot%\System32\Sysmain.dll jako služba běžící pod procesem Service Host (%SystemRoot%\System32\Svchost.exe). SuperFetch spolupracuje s Memory Managerem, který poskytuje historii využití stránek, načítá data do Standby Listu a přiřazuje stránkám prioritu. SuperFetch v podstatě rozšiřuje sledování stránek s daty, které již byly v paměti, ale Memory Manager je uvolnil, aby bylo místo pro nová data. Tyto informace jsou pak uloženy v .db souborech ve složce %SystemRoot%\Prefetch vedle standardních prefetch souborů. Na základě těchto detailních informací může SuperFetch přednačítat data a kód, pokud je volná paměť.
Kdykoliv se uvolní paměť (například když se ukončí aplikace), SuperFetch si vyžádá od Memory Managera načtení dat a kódu, které byly v poslední době z paměti odstraněny. Toto načítání probíhá s velmi nízkou prioritou I/O operací, takže uživatel nepocítí žádné zpomalení. Pokud tedy odejdete napřklad na oběd a systém spustí na pozadí úlohy náročné na paměť, musí být data vaší práce uvolněny z paměti, ale když tato činnost skončí, SuperFetch je načte zpět ještě než se vrátíte. SuperFetch má také připravené scénáře pro situace jako hibernace, režim spánku, rychlé přepínání uživatelů a spouštění aplikací.

ReadyBoost

Čím jsou procesory a paměti rychlejší, tím více se projevuje pomalost pevných disků. Hlavně přístupová doba (seek time), která se u běžných disků pohybuje okolo 10 ms se vedle 3 GHz procesorů jeví jako věčnost. RAM je nejlepší úložiště pro data, ale proti pevným diskům je velmi nákladná. Flash paměť je levnější a náhodné čtení je více než 10x rychleší než u běžných pevných disků. Windows Vista tak přichází s vylepšením zvaným ReadyBoost, které využívá výhod flash paměti a vytváří vrstvu mezi RAM a diskem.
ReadyBoost je realizován službou implementovanou v knihovně %SystemRoot%\System32\Emdmgmt.dll (běžící pod procesem Service Host) a volume filter ovladačem %SystemRoot%\System32\Drivers\Ecache.sys. Když připojíte zařízení jako USB Flash disk k počítači, služba ReadyBoost zařízení výkonově otestuje a výsledky uloží do registru, klíč

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Emdmgmt
Pokud jste poprvé připojili zařízení o velikosti 256MB až 32GB, které čte náhodně 4KB bloky rychlostí větší než 2.5MB/s a 512KB bloky rychlostí větší než 1.75MB/s, tak se ReadyBoost zeptá, zda chcete část kapacity zařízení použít jako cache. A to až do velikosti 4GB (i když máte na zařízení NTFS tak chce ReadyBoost vyhovět limitu FAT32). Pokud souhlasíte, ReadyBoost vytvoří soubor ReadyBoost.sfcache v kořenovém adresáři flash zařízení a SuperFetch ji na pozadí hned začne naplňovat.
Po tom co ReadyBoost inicializuje cache, ovladač Ecache.sys začne odchytávat požadavky na zápis nebo čtení směrované na pevný disk a začne kopírovat data do ReadyBoost.sfcache. Ecache.sys data komprimuje typicky v poměru 2:1 takže do 4GB souboru se může vejít 8GB dat. Ovladač navíc každý blok šifruje pomocí Advanced Encryption Standard (AES) s náhodně generovaným klíčem, aby zajistil ochranu dat, pokud je zařízení odpojeno.
V případě, že se má číst sekvenčně větší objem dat, ovladač nechá číst data z pevného disku.

ReadyBoot

V případě že má Windows Vista méně jak 512MB RAM, používá při bootování stejný prefetching jako Windows XP. Ovšem pokud má 700MB nebo více, tak k optimalizaci bootování použije in-RAM cache. Velikost cache záleží na velikosti RAM a je volena rozumně, aby systému zbylo dost paměti pro samotné bootování.
Po každém bootování využije ReadyBoost volný procesorový čas k výpočtu využití cache při dalším bootování. ReadyBoost analyzuje pohyb souborů za posledních 5 bootování a zjistí, ke kterým souborům bylo přistupováno a jejich umístění na disku. Tyto informace se ukládají v adresáři %SystemRoot%\Prefetch\Readyboot do .fx souborů a plán pro další bootování je uložen v registrech (HKLM\System\CurrentControlSet\Services\Ecache\Parameters) jako hodnota typu REG_BINARY s názvem odpovídajícím oddílu, ze kterého se bootuje.
Cache je opět implementována ovladačem Ecache.sys, ale je řízena službou ReadyBoost při bootování. ReadyBoost odstraní cache z paměti za 90 sekund po nabootování nebo dříve pokud bude zapotřebí paměť. Získané informace se uloží do registru, klíč HKLM\System\CurrentControlSet\Services\Ecache\Parameters\ReadyBootStats. Testy ukázaly, že ReadyBoot je o 20% rychlejší než prefetching ve Windows XP.


Obrázek 1 - Obsah klíče ReadyBootStats (kliknutím zvětšíte)

ReadyDrive

ReadyDrive je reakce na příchod nových hybridních pevných disků označovaných jako H-HDD. H-HDD je disk s vestavěnou, polovodičovou, energeticky nezávislou flash pamětí (známou jako NVRAM). I když typický H-HDD obsahuje 50-512MB této paměti, Windows Vista má limit až 2TB.
Systém si například do této paměti při vypínání ukládá data potřebná při bootování, čímž urychlí restart. Nebo se do této paměti ukládají data při hibernaci a tím se urychlí probuzení. S pamětí lze pracovat i když se netočí plotny, takže se dá použít i jako cache pro zápis - plotny se nemusí roztáčet tak často a zvýší se výdrž akumulátoru.

Mitch


© 2005 - 2011 Craft, craftcom.net
Všechna práva vyhrazena.
Šíření a kopírování textů, obrázků a jiných záznamů je bez předchozího souhlasu zakázáno.
Stránky vyhovují standardům: HTML 4.01 · CSS 2 · RSS 2
Čas zpracování: 99.948 ms