Operációs rendszerek MS Windows NT (2000) memóriakezelés Az NT memóriakezelése 32-bites virtuális memóriakezelés: 4 GB-os címtartomány, alapesetben: a fels! 2 GB az alkalmazásoké, az alsó 2 GB az OPR-é. nem alapesetben: boot.ini file-ban /3G. A memóriát laponként (page) kezeli. Többletszolgáltatások a rendszer hatékonyságának növelése érdekében, pl.: copy-on-write mechanizmus, a file-ok memóriaként történ! elérése (memory mapped files), így az osztott file használat megvalósulhat. 2
A memóriakezel! szolgáltatásai Virtuális memória allokáció, ill. felszabadítás. Osztott elérés" (shared) memória létrehozása. A file-ok osztott elérés" memóriához hasonló elérése. Virtuális memória kezelés (pl.: információkérés, adatok memóriába rögzítése, kiírása háttértárra) Memória védelmi funkciók. Kernel szint" funkciók (els!sorban a device driver-ek) támogatása (pl.: fix fizikai memóriaterület használata). 3 Folyamat címtere 4
A virtuális címek felépítése Processzorfügg!. A PDI (Page Directory Index) és PTI (Page Table Index) kijelöli az elérend! memórialapot. A BI (Byte Index) a lapon belüli eltolást határozza meg. 5 A címtranszformáció menete x86-os processzorok esetén KPROCESS PDI PTI BI page megcímzett byte PD entry PT entry 1 page Laptábla könyvtár Laptábla Fizikai memória 6
Adatszerkezetek címtranszformációhoz Folyamatonkénti lap könyvtár (page directory): maximum 1024 laptábla kezd!cím-bejegyzés, kezd!címe a KPROCESS-ben. Laptábla (page table): a logikai-fizikai címtranszformáció helye, maximum 1024 hozzárendelési bejegyzés, maximum 512 db lehet egy processzben, illetve a rendszerben 7 Memóriafoglalás az NT-ben A memóriafoglalás két lépésben történik a Windows NT-ben: reserve virtuális címtartomány lefoglalása, commit virtuális memória lefoglalása. Lehet!ség a két lépés egy függvényhívásban történ! végrehajtására. 8
A reserve m"velet Nem jelent tényleges fizikai memóriafoglalást. A folyamat csak deklarálja az operációs rendszer számára, hogy mennyi memóriára lesz, vagy lehet szüksége. Mindig lapok foglalása történik: x86-os rendszerekben ez 4 KB, esetleges bels! tördel!dés fellépése. A memórialapok mindig 64 KB memóriaegységek határán kezd!dnek, az esetleges lapszám növelés miatt. 9 A commit m"velet Tényleges tárterület foglalás a rendszerben. Csak a korábban a reserve m"velettel már lefoglalt memórián hajtható végre. Csak a commit m"velet után tudja a folyamat a memóriát használni. A csak reserve-elt memóriacímre történ! hivatkozás hibát okoz. 10
A két lépcs!ben történ! memóriafoglalás el!nyei Hatékonyabb m"ködés: reserve csak címtartomány foglalást végez, bejegyzés az OPR bels! táblázatában, tényleges er!forrás-használat (memória, ill. ún. backing store foglalás) csak a commit után, a folyamatok futtatásához használt fizikai memóriaigény csökken, lehetséges el!re lefoglalni egybefügg! címtartományokat a rendszer terhelése nélkül. 11 A szálak user stack foglalása A stack-nek folyamatos címtartománynak kell lennie. Alapértelmezés: 1 MB memóriát foglal reserve m"velettel, de csak 2 lapnyi (2 x 4 KB) memóriát foglal a commit m"velettel. Az els! lap a stack teteje. A második lap szerepe, hogy a rendszer érzékelje, ha a stack megtelt, és automatikusan foglaljon commit m"velettel új oldalakat. A kétlépéses memóriafoglalás nélkül: minden szál indulásakor a rendszermemóriából ténylegesen le kellene foglalni 1 MB-nyi területet, melynek valószín"leg jelent!s részét a szálak többsége nem is használná. 12
Osztott elérés" memória Folyamatok közötti információ csere. Ugyanazon utasításhalmaz, program (pl. C fordító) használata. Két folyamat adott virtuális címtartományában azonos tartalom. A folyamatok adott virtuális címtartományához azonos fizikai memórialapokat rendel. Megvalósítása az NT-ben: a section object-tel (szekció objektum). 13 Section object használata Egy folyatban egy szál létrehoz egy section objectet Más folyamatok szálai megnyithatják, és handle-kön keresztül elérhetik egy szál a section-t (vagy részeit) leképezheti a címterére view 14
Section object és egy section használata 15 Memória védelem Folyamatonkénti diszjunkt logikai címtartományok (az osztott kivételével). Elérés memóriakezel!n keresztül: HW-rel támogatott logikai-fizikai transzformáció, adott memórialap hozzáférésének szabályozása. Lap szint" memória védelem csak olvasható írható/olvasható végrehajtható (HW támogatás kell) guard page copy-on-write Section: objectként (security reference monitor) 16
A copy-on-write mechanizmus Memórialap takarékossági elv. Másolás írás esetén. C-o-W jelz!bit bebillentése az adott memória lapon, ha egy folyamat egy olyan section object-et kezd használni amely már használatban van. Az új folyamat csak akkor kap önálló memórialap másolatot az eredetir!l, ha memória írási m"veletet kezdeményez. 17 A copy-on-write mechanizmus (folyt.) 18
Kernel komponensek memória foglalása Kernel komponensek esetén nem mindig megengedett a lapozás, pl.: kernel szinten megvalósított kölcsönös kizárás, driver-ek által használt memóriaterületek. Így a kernel komponensek memória foglalása: lapozott memória tárból (paged memory pool) vagy, nem lapozott memória tárból (nonpaged memory pool) történhet. 19 Az I/O alrendszer Réteges kialakítás Driverek dinamikus hozzáadása és eltávolítása Magas szint" nyelven való megírás lehet!sége Multi processzoros m"ködés miatt konkurencia kezelés szinkronizálás: pl. kölcsönos kizárás a közös puffer területekre Csomag alapú I/O request packet (IRP) I/O manager 20
Több réteg" driver 21 File absztrakció I/O m"veletek virtuális fájlokon I/O források és célok fájlként reprezentálva Aszinkron és szinkron I/O aszinkron esetben szinkronizálás lehet szükséges (wait a file objecten) 22
Aszinkron I/O 23 File object 24