Operációs rendszerek Memóriakezelés 1.1 Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK
Operációs rendszerek p. A memóriakezelő A memória fontos erőforrás, a kezelését a memóriakezelő (memory manager) végzi. Ennek feladatai: 1. Nyilvántartás: a memória mely részei vannak használatban és melyek szabadok? 2. Kiosztás: a folyamatok a memóriakezelőtől kérhetnek memóriát és a segítségével szabadíthatják fel. 3. Memória bővítése: kezeli a csereterületet, vagyis szükség esetén a háttértárra menti majd visszatölti a memória tartalmát.
Operációs rendszerek p. Monoprogramming A monoprogramozott környezetben igen primitív memóriamodell használhatunk. User program Operating system in RAM 0xFFF Operating system in ROM Device drivers in ROM User program User program Operating system in RAM 0 0 0 (a) (b) (c) 1. ábra. Monoprogramozott memóriamodellek
Operációs rendszerek p. Monoprogramming A következő modelleket használják a swapping nélküli monoprogramozott rendszerek: (a) Alul a RAM-ban az OS, felül a RAM-ban a futtatott program (mainframek, minicomputerek, ma már nem használjuk). (b) Alul a RAM-ban a futtatott program, felül ROM-ban az OS (palmtopok, beágyazott rendszerek). (c) Alul a RAM-ban az operációs rendszer, középen a RAM-ban a futtatott program, felül az eszközkezelők ROM-ban (DOS, PC rendszerek).
Operációs rendszerek p. Multiprogramming A multiprogramozott rendszerekben egy időben több folyamat is létezik. Ma kényelmi szempontokat tartunk szem előtt, régebben azonban a multiprogramozott modelltől azt vártuk, hogy a CPU kihasználtsága növekedjék: Naív: 5 20% = 100%
Operációs rendszerek p. Multiprogramming A multiprogramozott rendszerekben egy időben több folyamat is létezik. Ma kényelmi szempontokat tartunk szem előtt, régebben azonban a multiprogramozott modelltől azt vártuk, hogy a CPU kihasználtsága növekedjék: Naív: 5 20% = 100% Valóság: 1 p n (p részt vár, n process)
Operációs rendszerek p. Multiprogramming CPU utilization (in percent) 100 80 60 40 20 20% I/O wait 50% I/O wait 80% I/O wait 0 1 2 3 4 5 6 7 8 9 10 Degree of multiprogramming 2. ábra. A CPU kihasználtsága multiprogramozott környezetben
Multiprogramming Job Arrival time CPU minutes needed # Processes 1 2 3 4 1 2 10:00 10:10 4 3 CPU idle CPU busy.80.20.64.36.51.49.41.59 3 10:15 2 CPU/process.20.18.16.15 4 10:20 2 (a) (b) 1 2 3 4 2.0.9 Job 2 starts.9.8.8.8.3.3.3.3 Job 1 finishes.9.1.9.9.1.7 0 0 10 15 20 22 27.6 28.2 31.7 Time (relative to job 1's arrival) (c) 3. ábra. Konkrét példa (80% wait) Operációs rendszerek p.
Operációs rendszerek p. Multiprogramming Multiple input queues Partition 4 800K 700K Partition 4 Partition 3 Single input queue Partition 3 400K Partition 2 Partition 1 Operating system (a) 200K 100K 0 Partition 2 Partition 1 Operating system (b) 4. ábra. Memóriapartíciók használata
Operációs rendszerek p. Multiprogramming A legegyszerűbb modell fix méretű memória-partíciókkal dolgozik, amelyeket az operátor a rendszerindításkor alakít ki. A beérkezett jobok a legkisebb memória-partícióba kerülnek, amelybe beleférnek. (Külön-külön vannak sorok vagy együtt.) Több memóriaoptimalizálási problémát is felvet ez a modell, hiszen nehéz garantálni, hogy minden jobra sor kerüljön és ne vesztegessük a memóriát (egy partícióba csak egy job kerülhet).
Operációs rendszerek p. Relokáció A memória partícionálása és a multiprogramozás felveti a relokáció problémáját, melynek során a programban található utasítások címét meg kell változtatni attól függően, hogy melyik partícióra töltjük be a programot. Megoldást jelent, ha a linker készít egy táblázatot, amelyben felsorolja mely helyeken találhatók a címek, amelyeket az OS-nek módosítania kell, mikor a programot betölti.
Operációs rendszerek p.1 Memóriavédelem A futó programok nem módosíthatják vagy olvashatják a többi job memóriaterületét. Erről az operációs rendszernek kell gondoskodnia. Megoldást jelent, ha a memóriát felosztjuk lapokra, mindegyiket ellátjuk egy jellel, ahogyan a folyamatokat is (OS joga és feladata). A hardver megszakítást generál ha memóriasértés történik.
Operációs rendszerek p.1 Teljes megoldás A következő megoldás mindkét problémát megoldja. Készítsünk a processzorban két regisztert: BASE és LIMIT, egy áramkörrel mindig adjuk hozzá a címekhez a BASE értékét és figyeljünk rá, hogy ne kerülhessen nagyobb érték a buszra mint a LIMIT. Amikor az ütemező másik folyamatra kapcsol át, írjuk a BASE és LIMIT regiszterekbe a folyamatra jellemző értékeket.
Operációs rendszerek p.1 Nincsen elegendő memória Interaktív rendszereknél nem korlátozhatja az egyszerre futtatható programok számát a rendelkezésre álló memória (batch rendszereknél is hasznos ha több job közül válogathatunk). Két módszert használhatunk: Swapping, csere: a teljes partíciót kitesszük a háttértárra és beteszünk egy másikat. Virtuális memória: engedjük futni a partícióban található folyamatot akkor is, ha a partíció egy része nincs a fizikai memóriában.
Operációs rendszerek p.1 Csereterület Tegyük lehetővé, hogy: a partíciók mérete dinamikusan változzon a futás közben, minden folyamat akkora partícióba kerüljön, amekkora szükséges a futtatásához, a folyamatok bármikor kikerülhessenek a swap területre, bármikor visszatölthetőek legyenek, akár egy másik területre is, a memóriapakolás során bármikor áthelyezhessük a folyamatokat, a folyamatok kérhessék a partíció növelését (dinamikus memóriaallokálás)
Operációs rendszerek p.1 Overlay technika Az lefedéses memóriagazdálkodás (overlay) a virtuális memóriakezelés primitív módja, amelyet ma már általában nem használunk. Az egyes modulok kivételét és betöltését az operációs rendszer végzi, a program feldarabolását azonban a programozó. Nem túl szerencsés, ha a programozó nem programot ír, hanem darabolja a megírt programot.
Operációs rendszerek p.1 Virtuális memória A virtuális memória alapgondolata az, hogy a programot darabokra vágjuk és mindig csak azokat a darabokat tartjuk a memóriában, amelyek beleférnek, a többit a háttértárra mentjük. A program és adatterületeinek szabályos darabolása, a szükséges darabok betöltése és a nélkülözhető darabok háttértárra írása ma már automatikusan történik.
Operációs rendszerek p.1 Az MMU A memory management unit a CPU és a memória közt található. CPU package The CPU sends virtual addresses to the MMU CPU Memory management unit Memory Disk controller Bus The MMU sends physical addresses to the memory 5. ábra. Az MMU
Operációs rendszerek p.1 Lapok és lapkeretek Virtual address space 60K-64K 56K-60K 52K-56K 48K-52K 44K-48K 40K-44K 36K-40K 32K-36K 28K-32K 24K-28K 20K-24K 16K-20K 12K-16K 8K-12K 4K-8K 0K-4K X X X X 7 X 5 X X X 3 4 0 6 1 2 Virtual page Physical memory address 28K-32K 24K-28K 20K-24K 16K-20K 12K-16K 8K-12K 4K-8K 0K-4K Page frame
Operációs rendszerek p.1 Lapozás A lapozás (paging) lényege a következő: A CPU, a programozó virtuális címeket kezel. A virtuális címeket az MMU (memory management unit) áramkör képezi le fizikai címekké. A virtuális címtartományt lapokra (pages) osztjuk, amelyek a memóriában lapkeretekbe (page frame) kerülnek. Unmapped page elérésekor az MMU page fault trap-et hív.
Operációs rendszerek p.1 A laptábla Page table 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 000 000 000 000 111 000 101 000 000 000 011 100 000 110 001 010 0 0 0 0 1 0 1 0 0 0 1 1 1 1 1 1 Virtual page = 2 is used as an index into the page table 110 Present/ absent bit 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 12-bit offset copied directly from input to output Outgoing physical address (24580) Incoming virtual address (8196)
Operációs rendszerek p.2 A laptábla A laptábla (page table) az MMU egyik legegyszerűbb megvalósítása: A virtuális címet két részre osztjuk: a felső rész a lap száma, az alsó az offszet. A lap számát a laptábla megcímzésére használjuk, így a laptábla megmutatja, hogy az adott lap melyik lapkeretben van. A lapkeret száma + offszet a fizikai cím.
Operációs rendszerek p.2 Problémák A laptábla használatával gondok merülnek fel: A leképezésnek nagyon gyorsnak kell lennie (két, három konverzió egy gépi kódú utasítás alatt) A laptábla nagyon nagy lehet (32 bites címtartományban hány 4 KByte-os blokk van?) A módszert más eszközökkel eggyütt használjuk ma is (memóriába mentett page table, multi-level page table stb.).
Operációs rendszerek p.2 A méret a lényeg Virtuális laponként egy bejegyzés a laptáblában nagyon sok lehet: 1. 32 bites címtartomány, 4096 byte-os virtuális lapokkal mintegy 1 millió bejegyzés. Minimálisan kb. 4 megabyte. 2. 64 bites címtartomány, 4096 byteos lapokkal, 2 52 bejegyzés. Mintegy 30 000 000 gigabyte-os page table.
Operációs rendszerek p.2 Invertált laptábla A lapkeretek számára készítünk egy-egy bejegyzést, nem lapok számára. Ez segít, feltéve, hogy a fizikai memória jóval kisebb mint a processzor által kezelt címtartomány. A probléma itt az, hogy fordítva kell keresni és ez igen lassúvá teszi a műveletet. TLB-t (translation lookaside buffer) kell használni.
Operációs rendszerek p.2 Invertált laptábla Traditional page table with an entry for each of the 2 52 pages 2 52-1 256-MB physical memory has 2 16 4-KB page frames 2 16-1 2 16-1 Hash table 0 0 Indexed by virtual page 0 Indexed by hash on virtual page Virtual page Page frame
Operációs rendszerek p.2 Többszintű laptábla A két vagy többszintű laptábla használatának a lényege az, hogy nem kell a nem használt memóriaterületekhez tartozó laptábla bejegyzéseknek létezniük. Azoknak a másodszintű laptábláknak például, amelyekhez az elsőszintű laptábla bejegyzése nem létezőként jelez, nem kell másodszintű laptábla. A módszer jól használható, mert általában nem használunk olyan programokat, amelyek a teljes címtartományt használnák.
Operációs rendszerek p.2 Kétszintű laptábla Second-level page tables Page table for the top 4M of memory 1023 Top-level page table Bits 10 10 12 PT1 PT2 Offset (a) 6 5 4 3 2 1 0 1023 6 5 4 3 2 1 0 To pages (b) 6. ábra. 32 bites cím kétszintű laptáblával
Operációs rendszerek p.2 Laptábla bejegyzés A laptábla bejegyzés (page table entry) erősen hw függő, de elterjedtek a következő elemek Page frame number Present/absent (page fault) Protection (read, write, execute) Modified (dirty) Referenced Disable caching (memory mapped I/O esetén) A page fault kezeléséhez szükséges információnak nem kell itt lennie, azt az OS kezeli, nem a hw.
Operációs rendszerek p.2 A lapcserélés A lapcserélő (page replacement) algoritmusok célja, hogy a page fault esetén olyan lapkeretet szabadítsunk fel, amelynek tartalmára előreláthatólag hosszú időn keresztül nem lesz szükség. Az optimális lapcserélő algoritmus éppen az, amelyik a legkésőbb szükséges lapot távolítja el, de sajnos lehetetlen megvalósítani, mert a jövő ismeretlen.
Operációs rendszerek p.2 Not recently used Minden lapkeret rendelkezik egy R és egy M bittel, az operációs rendszer időről időre törli az R bitet. Minden page fault esetén a következő kategóriákat jelöljük ki: 1. not referenced, not modified 2. not referenced, modified 3. referenced, not modified 4. referenced, modified Mindig a legalsó kategóriából választunk véletlenszerűen.
Operációs rendszerek p.3 First-in, first-out A legrégebbi lapkeretet (azt amelyik a legrégebb óta a memóriában van) ürítjük ki. Nem túl kifinomult módszer, mert vannak olyan lapkeretek, amelyekre hosszú időn keresztül szükség van. A boltos példánál maradva lehet, hogy eltávolítjuk a sót és a cukrot, ezért nem szokás használni.
Operációs rendszerek p.3 Második esély algoritmus A FIFO módosított változata. Vizsgáljuk meg a legrégebbi lapot. Ha R bit be van állítva, akkor töröljük és helyezzük a sor végére, mintha most töltöttük volna be, ha nem, ezt a lapkeretet örítjük ki. Ha minden lapkeret volt használva, ez az algoritmus megegyezik a FIFO algoritmussal. A boltos példa: ha az elmúlt héten vettek az árúból, akkor adunk neki egy második esélyt és a sor végére tesszük.
Operációs rendszerek p.3 Least recently used Az LRU algoritmus esetén a legrégebb óta nem használt lapkeretet szabadítjuk fel. A korrekt megvalósítás igen költséges volna, mivel minden memóriahozzáférésnél frissíteni kellene a listát, rögzíteni kellene, hogy mikor használtuk a lapot. Megoldható volna, ha a laptábla bejegyzése tartalmazna egy számlálót, amely minden memóriahozzáféréskor inkrementálódna.
Operációs rendszerek p.3 Simulált LRU NFU (not frequently used): időről időre növeljük a szoftveresen kezelt lapkeret használtsági számlálót, növeljük, ha az R bit 1. Az R bitet ilyenkor mindig töröljük. Öregedés: léptessük jobbra a számlálót, a legfelső bithez adjuk hozzá az R bitet. E módszerrel elérhetjük, hogy a régmúlt időben begyűjtött pontok ne rontsák a jóslást.
Igény szerinti lapozás Az igény szerinti lapozás esetében a folyamat egyetlen lapkeret nélkül indul, az operációs rendszer csak a page fault esetén tölti be a lapokat. A módszert használva viszonylag kevés page fault után megjelenik a memóriában a szükséges memóriaterület (lokalitás). w(k,t) k 7. ábra. A használt lapkészlet Operációs rendszerek p.3
Operációs rendszerek p.3 A használt lapkészlet A working set az a laphalmaz (lapkészlet) amely az operatív memóriában az adott pillanatban megtalálható. A használt lapkészlet és a teljes lapkészlet arányától függően kevés vagy sok (trashing, lapcséplés) page fault jelentkezik. A lapkészlet modellt használó rendszerek megpróbálják elkerülni a lapcséplést például azzal, hogy a processz használt lapkészlete a fizikai memóriában kerül mielőtt az futna (prepaging).
Operációs rendszerek p.3 A szegmentáció Az eddig tárgyalt virtuális memória egydimenziós, a virtuális címtartomány 0-tól egy bizonyos értékig tart. Hasznosnak tűnik több virtuális címtartományt készíteni. Virtual address space Address space allocated to the parse tree Call stack Parse tree Free Space currently being used by the parse tree Constant table Source text Symbol table Symbol table has bumped into the source text table 8. ábra. Fordítóprogram címtartománya
Operációs rendszerek p.3 A szegmentáció 20K 16K 16K 12K 8K 4K Symbol table 12K 8K 4K Source text 12K 8K 4K Parse tree 12K 8K 4K Call stack 0K Segment 0 0K Segment 1 0K Constants Segment 2 0K Segment 3 0K Segment 4 9. ábra. Fordítóprogram szegmentációval