Windows 7 és Vista memóriakezelése

A Vista és egyúttal a következő rendszer a Windows 7 újdonságokat hozott a Windows rendszerek életébe. Nézzük végig ezeket az újdonságokat.

Dinamikus kernelmemória-címtartomány kiosztás

A 32 bites rendszereknél a Windows rendszermag az elérhető maximális memóriaméret felét (kb. 2 GB) használhatja fel, tehát maga a kernel-kód, a -verem, a cache, driverek és a hozzájuk tartozó buffer területek erre a területre korlátozódnak. A Windows XP-n és a korábbi rendszerekben a bootoláskor derül ki, hogy éppen mennyi memória van erre a célra. Később ezek nem változhatnak. Ez a rugalmatlan módszer többször olyan helyzetet teremt, amikor az egyes címtartományok a használat során egyszerűen betelnek, míg mások üresen, kihasználatlanul állnak. Ez futási hibához, a driverek hibás működéséhez is vezethet. A Vista dinamikusan kezeli a kernelnek kiosztott memória-címtartományokat, és a terheléstől függően hol megnöveli, hol csökkenti az egyes komponensek memóriafoglalását. Ennek eredményeképp amikor egy driver több memóriát igényel, akkor hozzájuthat, illetve máskor a terület kiadható más célra is.

A Vista 64 a 2 GB-nál nagyobb kernelmemória-címtartományok kezelését is megoldja, ezért az egyes kernel-modulok számára kiosztható címtartományok az elérhető maximálisra vannak konfigurálva.

ASLR - Address Space Layout Randomization

Az Address Space Layout Randomization biztonsági újítás a Vista-ban. Ez lényegében egy memóriavédelmi megoldás, mely véletlenszerűen összekeveri a memóriacímeket, így megnehezíti a káros programok működését. A Windows egy-egy rendszerkomponenst minden alkalommal véletlenszerűen meghatározott memóriacímre tölti be, így ha egy vírus megpróbál káros kódot betölteni a memóriába először megpróbál meghívni egy rendszerfüggvényt, és vár ennek a függvénynek a visszatérési értékére. Mivel az ASLR véletlenszerűen választ 256 különböző hely közül a memóriában a függvény betöltésekor a vírusnak 1/256-od esélye van hogy éppen eltalálja azt a memóriacímet, ahol a kiszemelt DLL tartózkodni fog.

Az ASLR-t viszonylag későn, a Beta 2 verzióban tették be a rendszerbe, de annyira hatékony védelemnek bizonyult, hogy végül a Windows memóriakezelés része lett,

FPO - Function Pointer Obfuscation

A függvénymutatók a támadások kedvelt célpontjai, mivel a kernel bizonyos fix részeire hivatkoznak, így a vírus könnyedén manipulálhatja a rendszer működését. A Windows Vista ezen változók titkosításával védekezik azok "eltérítése" ellen, az egyes pointer-ek csak akkor kerülnek visszafejtésre, amikor azokra a rendszernek szüksége van. Mivel így minimális időt töltenek "felfedve" az ártalmas kódok ezeken a mutatókon keresztül nem lesznek képesek rendszerfüggvényeket meghívni.

DEP - Data Execution Prevention

A memória védelmét látja el a Data Execution Prevention (más néven NX), vagyis az adatvégrehajtás-megtagadás. A technológia megakadályozza, hogy a memóriába olyan területre töltődjön be kód, ahol csak adatok tartózkodhatnak. A vírusok egyik kedvelt módszere a buffer-túlcsordulásos támadás, ahol az ártó kód adat formájában érkezik a kiszemelt memóriaterületre, majd az alkalmazás hibát generál és átadja a vezérlést ennek a kódnak. A DEP az adatszegmensek számára fenntartott memóriacímeket "nem-futtathatóként" jelöli meg, így innen nem indítható kód. A DEP működéséhez operációs rendszer- és processzor-szintű támogatás is kell, tehát ez a fajta védelem csak DEP-kompatibilis CPU esetén működik. (A mai processzorok mind azok) A DEP alapértelmezésként csak a beépített Windows szolgáltatásokra engedélyezett, ha minden alkalmazásra ki akarjuk terjeszteni a működését, azt kézzel kell beállítanunk a Vezérlőpultban. Ha valamely programunk nem kompatibilis a DEP-pel és hibásan működik, definiálhatjuk kivételként is, így nem kell lemondanunk a teljes védelemről.

[ Adatvégrehajtás megakadályozása ]

Adatvégrehajtás megakadályozása


Memóriaprioritások

A Vista a memórialapozás korábbi módját is átszervezte. Korábban a felszabadított memórialapok egy várakozási sor végére kerültek, és ha a rendszer újra hivatkozott rá, akkor azt újra felhasználta. Ha további memóriára volt szüksége a rendszernek, akkor a lista elejéről vett új lapot magának. (1 lap = 4 kb). A memóriakezelés tehát csak a hazsnálat gyakorisága alapján sorolta a lapokat.

A Vistában minden egyes lap 0-7-ig terjedő prioritással rendelkezik, így a várakozási sor nyolc különböző "fontossági" szintre van bontva. A lap prioritása az őt megigénylő folyamat prioritásától függ. A kernel processzek magas prioritásúak, tehát a meóriához gyorsabban jutnak hozzá. A különböző processzek által közösen használt lapok esetén a legmagasabb prioritású processz lesz a meghatározó. Alapértelmezésként minden processz 5-ös prioritással rendelkezik, a lapozófájlban lévő memórialapok pedig alacsony szintűnek minősülnek, tehát egy magas szinten futó folyamat csak végszükség esetén folyamodik a fizikai lapozófájlhoz. A memóriapriorizálás valódi ereje a SuperFetch működése közben válik "érezhetővé".

SuperFetch

Ha egy gépet hosszabb ideig magára hagynak, akkor és az valamilyen memóriaigényes műveletet végez, például egy nagyobb másolás vagy lemez-töredezettségmentesítés, víruskeresés, akkor a futó alkalmazás kiszorítja a háttérben várakozó többi program által lefoglalt adatokat a lapozófájlba, melynek hatásával a szünetből visszatér? felhasználók azt tapasztalják, hogy alkalmazásaik lassan indulnak, mert a lapozófájlból térnek vissza az alkalmazások.

A Windows XP-ben elindított Prefetch technológia a használati statisztikák alapján rendezte sorba a rendszerindításkor betöltendő szolgáltatásokat és programokat, és a lemezen található programfájlok töredezettségmentesítésével gondoskodott a gyors programindításokról. A Vista továbblép és a folyamatok memóriahasználati "szokásait" figyelve proaktív memóriamenedzselést nyújt.

A SuperFetch együttműködve a memóriakezelővel hozzájut a memória felhasználási mutatókhoz, a teljes várakozási listához, és az alkalmazások által igényelt memórialapok prioritását is pontosan nyomon tudja követni. A SuperFetch a szabaddá váló lapokra automatikusan visszatölti a lapozófájlból a korábban ott helyet foglaló adatot. Amikor egy alkalmazás befejezi működését és visszaadja az igényelt memóriaszeletet a rendszernek, a SuperFetch a prioritási listának megfelelően előtölti a legutóbb (vagy ha már nem fut, a leggyakrabban használt) alkalmazások adatait. Mindezt a háttérben alacsony lemezműveleti prioritással végzi, vagyis nem lassítja a rendszer működését. 

Amikor a rendszer visszatér hibernálás vagy alvó állapotból, akkor nem szükséges minden adatot a lemezről visszaolvasni, mert a SuperFetch már az indulás alatt előre betöltötte azokat a memóriába.

A SuperFetch módszert akár saját szemünkkel is megfigyelhetjük. A feladatkezelőben, a "Teljesítmény" fülön elindítva egy memóriaigényes alkalmazást. A programból kilépve a SuperFetch szép lassan visszatölti a korábban és/vagy leggyakrabban használt adatainkat a memóriába. Ha azt látjuk, hogy egy-egy nagyobb programból való kilépés vagy rendszerindítás után a merevlemez folyamatosan dolgozik, a szabad fizikai memória számlálója pedig 0-n áll, ne ijedjünk meg, ez mind a SuperFetch működését jelzi.

A Superfetch kikapcsolása:(eredeti cikk itt)

  1. Start menü keresőjébe írjuk be: services.msc

  2. Keressük meg az előtöltés szolgáltatást és katt rá duplán!

  3. Az Indítás típusa legyen letiltva, majd katt a leállítás gombra

A SuperFetch visszatölti a korábban használt adatokat

ReadyBoost

A ReadyBoost a winchesterek lassúságának kezelését hivatott javítani. A winchesterek adatátviteli sebessége (30-50MB/sec) sokkal kisebb a memória sebességénél (5-10 GB/sec).

A ReadyBoost nem memóriabővítésre való. A Ready Boost a merevlemezre kiírásra kerül? lapozófájl-töredékeket az USB-csatlakozóra dugott flash-memóriákra is ráírják titkosítással. A flash memóriák kis méret? adatok véletlenszerű olvasásakor 10 szer gyorsabbak, mint a merevlemezek. A ReadyBoost képes NTFS és FAT32 fájlrendszerű flash-memóriát is használni, így a FAT32 korlátai miatt a kihelyezhető cache-fájl mérete maximum 4 GB. ez tömörítve tárolódik, ami átlagosan 50%-os tömörítéssel maximum 8 GB adatot jelent. A ReadyBoost az eszközök teljesítménymérésekor készített statisztikákat a "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Emdmgmt" registry-kulcs alatt tárolja.

A ReadyBoost rendszerkövetelményeihez és a leggyakoribb kérdésekre adott válaszokhoz tekintse meg itt találhatók információk: Windows Ready Boost kérdések és válaszok

ReadyBoot

A hasonló elnevezés? technológia a rendszerbetöltés gyorsítását szolgálja. 512 MB vagy kevesebb memória esetén a Vista az XP-ével megegyező prefetch metódust alkalmazza a programok és adatok előtöltéséhez. Ha több memória van a számítógépben a rendszer egy speciális, RAM-ba olvasó gyorsítótárazást használ.

A rendszerbetöltés befejeződése után a ReadyBoost szolgáltatás a számítógép üresjáratában egy "tervet" készít a következő indításhoz a legutolsó öt bootolás alatt készült mérési eredményeken alapuló statisztikákból. Ez az összegzés tartalmazza az indulás közben betöltött szolgáltatások, eszközmeghajtók, alkalmazások adatait, azt hogy melyikre mikor került sor, illetve, hogy a szükséges fájlok fizikailag hol helyezkednek el a merevlemezen. Az ezekből az adatokból készült boot-gyorsítótárat szintén a ReadyBoost drivere inicializálja. A gyorsítótár a rendszerindítást követő 90. másodpercben (vagy ha szükség van az általa lefoglalt memóriára) automatikusan törlésre kerül, a statisztika pedig a "HKLM\System\CurrentControlSet\Services\Ecache\Parameters\ReadyBootStats" registry-kulcs alatt kerül rögzítésre. A Microsoft szerint megfelelő hardverkörnyezet esetén a ReadyBoot mintegy 20%-kal csökkenti a rendszerbetöltéshez szükséges időt a Windows XP-hez képest.

ReadyDrive

A hibrid merevlemezek (H-HDD-k) általában 50-től 512 MB-ig terjed? beépített flash-memóriát tartalmaznak. A Windows Vista "ATA-8" parancsokon keresztül az adatokat gyorsítótárba helyezheti, melyek lehetnek a rendszer leállását vagy hibernálását megelőzően eltárolt boot-információk is. A ReadyDrive képes a lapozófájl egyes szeleteit is a merevlemez flash-memóriájába tölteni, írási gyorsítótárnak is használni azt. Ezzel csökkenti a felpörgések számát és a notebookok ebből profitálhatnak.

Késleltetett szolgáltatásindítás

A Windows minden indulásakor számos szolgáltatás is betöltődik, intenzív lemez- és memóriahasználat mellett. Amikor azt tapasztaljuk, hogy a bejelentkezést követően akár fél perc is kell, míg előtűnik a munkaasztal és megkapjuk a vezérlést, akkor a szolgáltatások háttérben történő betöltődése zajlik. A Windows XP-ben a bejelentkező képernyő nem vár többé a NETLOGON szolgáltatás indulására, mert helyi bejelentkezéskor ennek semmi értelme. A hálózaton azonban hálózati hitelesítést követel a belépés, meg kell várni, míg a NETLOGON-ra kerül a sor. A Vista képes fontossági sorrendben betölteni a szolgáltatásokat (tehát először azt, amelyikre előbb van szükség), és képes késleltetett módon is tölteni szolgáltatásokat (Delayed Start).

Az automatikus indítású szolgáltatások betöltődése után indulnak a a késleltetett betöltésre konfigurált szervizeket is és a legalacsonyabb prioritást társítja hozzájuk. Ezzel a szóban forgó szolgáltatások CPU-, memória- és lemezműveletei is alacsony prioritásba kerülnek, tehát sem a bejelentkezési folyamatot, sem a már elkezdett munkát nem akadályozzák. Miután a szolgáltatás betöltődött visszaáll normál prioritásra. Az alapértelmezett Windows-szolgáltatások közül jó pár használja ezt az új indítási módot. Beállítása itt lehetséges:

[ Késleltetve indított szolgáltatás ]

Késleltetve indított szolgáltatás


A memóriaméret felső határai (4GB vs. 3-3,4 GB)

A 32 bites rendszereken maximálisan 4 GB memóriát tudnak kezelni, azonban a Windows gyakran csak 3-3,5 GB-ot jelez elérhető memóriaként. A memóriaméret felső határait az alaplap befogadóképessége és az operációs rendszer által megcímezhető tartomány határozza meg. A 32 bites alaplapok általában 4 GB memóriát kezelnek, és a Windows Vista is ennyit képes megcímezni. A felhazsnáló azonban nem lesz képes mindet elérni.

A Windows a teljes memóriaterület bizonyos részét fenntartja a lapozófájlnak, és a drivereknek. Például a videokártyák 256MB RAM jának a címzését is a 4 GB-os területtel kell megoldania a rendszernek. Ha sok nagy memóriával rendelkező eszközt használunk ez az érték akár a fél GB-ot is könnyen elérheti. Igaz, hogy az elérhető rendszermemória mérete függ a PC-hez csatlakoztatott eszközöktől, de a Vista driver-kompatibilitási okokból és a memóriacímek ütközésének elkerülése érdekében 3,12 GB-ra korlátozza a felhasználható RAM méretét.

Hogy mind a 4 GB-ot a rendszer számára is elérhetővé tegyük, és 4 GB-nál több memóriát kezeljünk az alábbi feltételeknek megfelelő környezettel kell rendelkeznünk:

  • A chipsetnek legalább 8 GB címtartományt kell támogatnia (pl. Intel 975X, P965, 955X "Socket 775"-ös aljzatban, AMD processzorok esetén Socket F, Socket 940, Socket 939, vagy Socket AM2 aljzat)

  • A processzornak támogatnia kell az X64 utasításkészletet (AMD64 vagy Intel EM64T)

  • A BIOS-nak támogatnia kell a "memory remapping" szolgáltatást

  • A Windows operációs rendszer 64 bites változata szükséges

Az otthoni felhasználásra szánt Windows verziók közül ezek a rendszerek kezelhetnek 4 GB-nál többet: 

  • Windows XP X64 Edition: 128GB

  • Windows Vista Home Basic 64 bit: 8GB

  • Windows Vista Home Premium 64 bit: 16GB

  • Windows Vista Ultimate 64 bit: 128GB

leállítás

A korábbi Windows verziókban a leállítás megkezdése után a szolgáltatásoknak összesen 20 másodpercük volt arra, hogy minden adatot elmentsenek és kilépjenek, mert az idő lejárta után a rendszer szó nélkül bezárta azokat. Az adatbázis motorok sok adattal dolgoznak, nem feltétlenül képesek időben lezárni folyamataikat. 

A Vista egy úgynevezett leállítás-előtti értesítést kínál a programozóknak, mellyel figyelmeztethetik a szolgáltatásokat, hogy a rendszer leállítása megkezdődött és kezdjék meg a kilépést. Azok a szolgáltatások, melyek együttműködnek ezzel az új értesítési rendszerrel várakozásra utasíthatják a Windows-t, mindaddig, amíg szabályosan le tudnak állni. A rendszer addig vár, amíg szükséges. Ha a szolgáltatás valamiért mégsem válaszol a jelzésre, akkor a rendszer három percen belül mégis "lelövi".

leállítás előtti értesítések fogadása
 
A szolgáltatások leállítása sorba is rendezhető. Mivel egyes szolgáltatások másoktól függnek, ezért a a Vista esetében a Fejlesztők már a leállítási sorrendet is meghatározhatják, így nem fordulhat elő olyan eset, hogy egy olyan szolgáltatás előbb áll le, melyre a többinek még szüksége lett volna.

Energiagazdálkodás

Amióta a Microsoft a Windows 2000-ben az NT termékvonalra is bevezette az energiagazdálkodást. Problémát okoztak a külső Fejlesztők által telepített driverek, szoftverek, mert ha az ember összecsukta a laptopját és útnak indult azt gondolván, a gép hibernált gyakran felforrósodott géppel, lemerült akkumulátorral és elveszett adatokkal kellett szembesülnie, mert a hibernálási vagy alvási üzemmódba kapcsolást valamilyen futó folyamat megakadályozta. A Windows korábban minden futó alkalmazástól engedélyt kért az üzemmód váltásra. Ha a program erre nem volt megfelelően felkészítve, a rendszer képtelen volt üzemmódot váltani.

A Vistában a rendszer ugyan továbbra is értesíti a programokat az alvó állapotba lépésről, hogy azok felkészülhessenek rá, de nem vár jóváhagyó válaszra, egyszerűen kikapcsolja a megfelelő hardvereket. Az energiagazdálkodási alrendszer két perc helyett csupán 20 másodpercet vár az alkalmazások értesítésre küldött válaszára, a felhasználók tehát biztosak lehetnek benne, hogy ha megnyomják az alvás gombot, a rendszer fél percen belül biztosan üzemmódot vált.

Hivatkozás

A cikk eredetijét és ehhez kapcsolódó egyéb információkat itt lehet megtalálni: http://winportal.net/?id=822