Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék Micskei Zoltán Előadások: dr. Kovácsházy Tamás kiegészítéseivel az Operációs Rendszerek (vimia219) tárgy fóliái alapján Operációs rendszerek alapjai (vimia024) Memóriakezelés a Windowsban
Copyright Notice These materials are part of the Windows Operating System Internals Curriculum Development Kit, developed by David A. Solomon and Mark E. Russinovich with Andreas Polze Microsoft has licensed these materials from David Solomon Expert Seminars, Inc. for distribution to academic organizations solely for use in academic environments (and not for commercial use) © David A. Solomon and Mark Russinovich 2
Rejtvény Mennyi szabad memória van most a gépemen? 3
A Windows memóriakezelésének alapelvei Virtuális tárkezelés o Lapszervezés (4KB / 2MB méretű lapok, 2/3/4 szintű) o Lapozófájl használata Hatékonyság o Igény szerinti lapozás + clustering + prefetch o Memória megosztás, copy-on-write o Fájl cachelés memóriában (memory mapped file) Biztonság o Minden folyamatnak külön címtartomány o Elérés leírókon keresztül (hozzáférési token) 4
Maximális fizikai memória (GB) x86 x64 64-bit IA bit Windows 7 Basic 48n/a Windows 7 Prof 4192n/a Server 2008 Standard 432n/a Server 2008 Enterprise n/a Itanium n/a 2048 Physical Address Extension (PAE) 36 címbit: CPU + OS támogatás Physical Address Extension (PAE) 36 címbit: CPU + OS támogatás 64 bit: lényegesen nagyobb memória 64 bit: lényegesen nagyobb memória 5 Itanium: Intel szerver architektúra, nem lett annyira elterjedt Itanium: Intel szerver architektúra, nem lett annyira elterjedt 32 biten max 4 GB címezhető meg (gyakorlati határ kevesebb!) 32 biten max 4 GB címezhető meg (gyakorlati határ kevesebb!)
32-bites x86 címtartomány 2 GB felhasználói folyamatnak 2 GB Rendszer tartomány 2 GB Rendszer tartomány 3 GB felhasználói folyamatnak 1 GB Rendszer 1 GB Rendszer Alapesetben /3GB kapcsoló 6
64-bites címtartomány 64-bit = 17,179,869,184 GB o x64-en jelenleg 48 bites cím támogatott = 262,144 GB 8192 GB (8 TB) Felhasználói folyamat tartománya 6657 GB Rendszer tartomány 6657 GB Rendszer tartomány x64 7
8 Felhasználó címtartomány : o A futó alkalmazás (.EXE és.DLL-ek) o Felhasználói módú verem minden szálnak o Alkalmazás adatstruktúrái Felhasználói módból is elérhető Csak védett módból érhető el } } Egyedi minden folyamatra Rendszerszinten közös Virtual Address Space (V.A.S.) 8
9 Felhasználói módból is elérhető Csak védett módból érhető el } Egyedi minden folyamatra Rendszerszinten közös Virtual Address Space (V.A.S.) Rendszer tartomány: o Executive, kernel és a HAL o Rendszerszintű adatstruktúrák o Laptáblák (virtuális → fizikai leképezés, folyamatonként különböző) o Executive heap-ek (pools) o Védett módú eszköz meghajtók o Védett módú verem minden folyamat minden szálának } 9
Folyamatok memóriafoglalása Két lépésben: Reserve: virtuális címtartomány lefoglalása Commit: virtuális memória lefoglalása Előny: Csak annyit foglal, amennyi ténylegesen kell a folyamatnak 10
Logikai és fizikai címek közötti leképzés (ism.) Folyamat 1 Folyamat 2 Laptáblák Fizikai memória Lapozófájl 11
x86 címfordítás (PAE nélkül) 12 Kiegészítő anyag
x86 PAE címfordítás 13 Forrás: Intel 64 and IA-32 Architectures Software Developers Manual, Vol. 3A Kiegészítő anyag
x86 PAE esetén a PTE 64 bites, 24 bit a lap címének Flagek: o P – present, A – access, D – dirty, U/S – user/system, R/W – read/write… 14 Kiegészítő anyag
x64 címfordítás Page table selector Page table selector Page table entry selector Page table entry selector Page Map Level 4 Page Tables Physical Pages (up to 2^40) PFN 0 Byte within page Page dir pointer Page map Level 4 Page Directories Page Directory Pointers CR Kiegészítő anyag
x64: PTE szerkezete 16 Kiegészítő anyag
DEMO WinDbg, kernel debugging o folyamat kikeresése o BaseDir címének kikeresése o !vtop: címfordítás o !pte: laptábla elemeinek megnézése Címfordítás megfigyelése 17 Kiegészítő anyag
Munkakészlet (Working Set) Working Set: o Egy folyamathoz tartozó fizikai memóriában lévő lapok o Ezeket éri el laphiba nélkül Working set limit: o Ennyi fizikai memóriát birtokolhat egyszerre o Ha eléri, lapcsere kell NT 4.0: módosított FIFO algoritmus Windows 2000: Least Recently Used (UP rendszereknél) o Ha a szabad memória lecsökken: trimming 18
Fizikai memórialapok életciklusa Standby Page List Zero Page List Free Page List Process Working Sets (Active) page read from disk or kernel allocations demand zero page faults working set replacement Modified Page List modified page writer zero page thread “soft” page faults Bad Page List Private pages at process exit 19 Kiegészítő anyag
Lapozófájl (page file) Mi kerül bele? o Csak a módosított adat, kód nem Mikor kerül bele? o Ha van szabad memória, akkor is lehet o Folyamatok nem foglalhatnak bármennyi memóriát o Tartalék az új/többi folyamatnak Meghajtónként egy darab o Ajánlott nem a rendszerlemezre rakni o De maradjon egy kicsi ott is a memory dumpnak Ajánlott méret o 1 vagy 1,5-szer a fizikai memória (?), Fix méret (?) 20
DEMO Process Explorer / System information o Paging Lists o Page Fault Delta Lapozófájl méretének állítása o GUI o regedit Perfmon: Lapozófájl kihasználtság (%) Fizikai memória, lapozófájl 21
Memória használat Egyszerűnek tűnő kérdés: Mi mennyi memóriát foglal a gépen? 22
Folyamat memória használat - 0 Feladatkezelő oszlopai Frissítés gyakorisága 23
Folyamat memória használat Fizikai memória használat = munkakészlet (working set) megosztott lapok is megosztott lapok nélkül 2 Privát, lefoglalt virtuális memória (committed) megosztott lapok nélkül ez kerül bele a lapozófájlba
Folyamat memória használat - 2 Process Explorer: o Folyamat részletes adatai Private Bytes Working Set o Ebből mennyi a megosztott 25
DEMO Sysinternals VMMap Folyamat memóriaterülete 26
A teljes rendszer memóriahasználata 1 Összes lefoglalt virtuális memória Ennyit kéne kiírni a lapozófájlba, de nem biztos, hogy ennyi van kiírva 2 Előjegyzési küszöb: összes fizikai memória + lapozófájlok aktuális mérete ~ Aktív memórialapok száma 4 4 Szabad memória kevés, inkább gyorsítótárban tartja 27
DEMO Memórialapok állapotának gyors áttekintése: Sysinternals RamMap: részletek Windows 7 – Resource Monitor 28
DEMO Meminfo / !memusage 29 Kiegészítő anyag
Egy optimalizáció: Prefetch (Windows XP) Egy program indulásakor sok laphiba van Mindig ugyanazokat kell betölteni Prefetch: első tíz másodperc hozzáféréseit megjegyzi Prefetch “trace file”: \Windows\Prefetch o Elnevezés:.EXE-.pf Alkalmazás következő indulásakor o Hivatkozott lapok betöltése aszinkron módon Bootolás figyelése is 30
Egy újabb: Superfetch (Vista) 8 Prioritás a memórialapokhoz o Standby listából 8 darab ennek megfelelően Lapok használatának követése Memória felhasználása esetén lassan visszahoz lapokat a standby listára, amik kellhetnek még 31
DEMO Process Monitor: betöltéskor használt fájlok Prefetch file-ok o C:\Windows\Prefetch Layout.ini Prefetch fájl tartalma: o strings.exe Prefetch 32
Address Space Load Randomization Változás a Vistában Biztonsági megfontolás Rendszer EXE és DLL véletlenszerű helyre lesz betöltve 33
Olvasnivaló Soczó Zsolt, Windows memóriakezelés, MS Technet HUN, 4 részes cikksorozatWindows memóriakezelés Windows XP Kernel Improvements: Prefetch mechanizmus Windows XP Kernel Improvements Inside the Windows Vista Kernel: Inside the Windows Vista Kernel o 1. rész: Multimedia Class Scheduler o 2. rész: Superfetch, Ready* 34 Kiegészítő anyag
Összefoglalás Virtuális tárkezelés, lapszervezés Többszintű optimalizáció Memóriahasználat vizsgálata o Feladatkezelő: gyors áttekintés o Process Explorer, Perfmon, VMMap stb.: részletek 35