580 likes | 681 Views
Operációs rendszerek. 2000-2001 / II. félév. MEMÓRIAGAZDÁLKODÁS. A memória hierarchikus szerveződése: cache memória központi memória (RAM) lemezes tároló Memóriakezelő: nyilvántartsa mely memóriarészek szabadok/foglaltak memóriát foglaljon a programoknak
E N D
Operációs rendszerek 2000-2001 / II. félév
MEMÓRIAGAZDÁLKODÁS • A memória hierarchikus szerveződése: • cache memória • központi memória (RAM) • lemezes tároló • Memóriakezelő: • nyilvántartsa mely memóriarészek szabadok/foglaltak • memóriát foglaljon a programoknak • felszabadítsa a már nem szükslges memóriát • vezérelje a cserét a lemez és a központi memória között
1. Alapvető memóriakezelés • memóriakezelõ algoritmusok: • végrehajtás közben mozgatják a programrészeket a központi tár és a lemez között (lapozás, szegmentálás) • nem mozgatják (elavultak) • egyszerre csak egy program futtatása • multiprogramozás rögzített méretû partíciókkal
1.1. Egy program futása • egy idõben csak egy program van a memóriában • a memóriát megosztjuk az operációs rendszer és a program között • egyszerre csak egy program futhat
a memória szervezésének 3 egyszerű módja van: • c. pl. MS-DOS
1.2. Multiprogramozás • rögzített méretû partíciókkal • egyszerre több program is lehet a memóriában • a megvalósítás legegyszerûbb módja, ha n szeletre particionáljuk a memóriát (ez végezhetõ pl. manuálisan rendszerindításkor, OS/MFT-ben IBM nagygépeknél) • fix méretû partíciók
hátrányosan különbözteti meg a kisebb programokat • megoldások: • legyen legalább 1 kis partíciónk • egyetlen program sem mellõzhetõ k-nál többször a futásra kiválasztáskor
Relokáció és védelem • amikor a szerkesztõprogram a programot szerkeszti, tudnia kell, hogy a program a memória melyik címén fog kezdõdni • több partíció van... => relokációs probléma, védelmi kérdés
Megoldás • a program betöltésekor az op. rendszer módosítja az utasításokat • pl. 100 kb-os partíciók esetén a ha a második partícióba töltjük a programot, 200kb-ot kell hozzáadni minden címhez • védelem??? nincs megoldva
Megoldás • a gépnek 2 speciális regisztere van: • bázis regiszter: ide töltődik a partíció kezdő címe • háttér regiszter: a partíció hossza • a címek automatikusan generálódnak • a címeket a rendszer a háttérregiszter segítségével ellenőrzi, hogy ne lehessen elérni a partíción kívüli memóriacímeket • a felhasználói programok nem módosíthatják e két regiszter tartalmát
2. Csere • gyakran nincs elég memória az összes aktív program befogadásához => a felesleges programokat a lemezen kell tartani és dinamikusan kell betölteni futtatásra • 2 egyszerű stratégia: • csere, a programokat teljes egészében mozgatja a memória és a lemez között • virtuális memória, a programok akkor is futhatnak, ha csak egy részük van a memóriában
a partíciók száma, helye és mérete dinamikusan változik • csere esetén jobb a memória kihasználtsága • bonyolultabb a lefoglalás és a felszabadítás • memóriatömörítés: a sok apró lyukat a programok mozgatásával egyetlen nagy lyukká olvasztjuk össze
2.1. Memóriakezelés bittérképpel • a memória néhány szónyi vagy kilobájtnyi allokációs egységre van bontva • minden allokációs egységhez tartozik egy bit a bittérképen • értéke 1, ha foglalt • és 0, ha szabad. (vagy fordítva)
fontos az allokációs egység mérete: • ha kicsi, akkor nagy lesz a bittérkép mérete • ha nagy, akkor kicsi a bittérkép mérete de jelentős mennyiségű memória megy veszendőbe • hátránya a bittérképes memóriakezelésnek: lassú, mert ha egy k méretű programot akarunk a memóriába tenni, k db. egybefüggő 0 bitet kell keresni a bittérképen
2.2. Memóriakezelés láncolt listákkal • láncolt listába fűzzük a szabad és foglalt szegmenseket • a lista minden eleme tartalmazza: • a hozzá tartozó lyuk vagy program kezdőcímét • hosszát • a következő listaelem címét
A befejeződő X folyamat négy szomszédsági kombinációja
Algoritmusok • first fit: az első megfelelő lyukat választja ki • next fit: mint a first fit, de megjegyzi, hol találta az előzőt és innen indul keresni • best fit: végigkeresi az egész listát, a legkisebb alkalmas lyukat keresi • worst fit: a legnagyobb lyukat választja ki • quick fit: a leggyakrabban kért méretekhez külön lyuklistát épít
3. Virtuális memória • a program, az adat és a verem együttes mérete meghaladhatja a fizikai memória mennyiségét • az op. rendszer csak az program éppen használt részét tartja a memóriában, a többi a lemezen van • a több programot futtató rendszerek esetén is működik
3.1. Lapozás • a virtuális memória beli címek nem kerülnek közvetlenül a memóriabuszra, ahnem a memóriakezelő egység nevű chipbe • MMU (Memory Management Unit) • az MMU képezi le a virtuális címeket fizikai címekre
a virtuális címteret lap nevű egységekre osztják • a lapnak megfelelő egység a memóriában a lapkeret • a memória és a lemez közötti átvitel laponként történik • a memória nem tud az MMU-ról, csak teljesíti a memória írására/olvasására vonatkozó kéréseket
Mi történik, ha a program olyan lapra hivatkozik, ami nincs benne a memóriában? • LAPHIBA megszakítás • MMU: a bejövő 16 bites virtuális címet 4 bites lapszámra és 12 bites offszetre bontja • a lapszámot a laptábla indexeként használjuk
3.2. Laptáblák • a laptábla célja, hogy a virtuális lapokat lapkeretekre képezzük le • a laptábla egy függvény, a virtuális lapszám az argumentum • a lapkeret száma az eredmény Problémák: • a laptábla nagy lehet • a leképezés gyors kell legyen
Többszintű laptáblák • nem tart minden laptáblátegyszerre a memóriában • PT1: a felső szintű laptábla indexeként használja • PT2 a kiválasztott második szintű laptábal indexe
3.4. Invertált laptáblák • itt a valós tár minden lapkeretéhez tartozik egy bejegyzés ahelyett, hogy a virtuális címtér minden lapjához legyen egy bejegyzés • egy bejegyzés azt tartalmazza, hogy az adott lapkeretet melyik program használja • előnye: sok helyet takarít meg • hátrány: nehezebb a címfordítás
4.1. Az optimális lapcserélési alg. • laphiba esetén a memóriában van a lapoknak egy részhalmaza • egyre hivatkozunk a következő utasításban • minden lap megcímkézhető azza a számmal, ahány utasítás végrehajtódik, mielőtt először hivatkozunk rá • optimális lapcserélési alg. esetén a legnagyobb számmal jelzett lapot dobjuk ki
4.2. Az NRU lapcserélési algoritmus • NRU (Not Recently Used) • minden laphoz 2 bit tartozik: • R - minden hivatkozáskor 1-re állítódik • M - módosításkor lesz egy • 4 lehetőség (0 0, 0 1, 1 0, 1 1)
4.3. A FIFO lapcserélési algoritmus • FIFO (First In First Out) • az op. rendszer egy láncolt listába fűzi a memóriában lévő lapokat • a lista elején van a legrégibb lap • a lista végén a legutoljára beolvasott lap • laphiba esetén az első lapot dobja ki és a végére fűzi az újat • ritkán alkalmazzák
4.4. A második lehetőség algoritmus • second chance (második lehetőség) • a FIFO módosítása a gyakran használt lapok kidobásának elkerülésére
megvizsgáljuk a legrégebbi lap R bitjét. • ha az 0, akkor a lap régi és nem használt, tehát eldobható • ha az 1, töröljük a bitet, alapot a lista végére tesszük, a betöltési idejét módosítjuk, mintha most töltöttük volna be • folytatjuk a keresést • ha minden lapra hivatkoznak, akkor úgy működik, mint a FIFO
Az LRU algoritmus • az utolsó néhány utasításnál gyakran használt lapokat vaéószínüleg újra fogják használni a következö utasításokban • a nem használt lapokat nem • LRU (Least Recently Used - legrégebben használt): amikor laphiba történik, a legrégebben nem használt lapot dobjuk ki
4.7. Az LRU megvalósítása • hardveres úton • szoftveres szimulációval
5.1. A munkahalmaz modell • igény szerinti lapozás • munkahalmaz (vergődés)
5.3. Lapméret • kis lapméret - kevésbé lesz töredezett a memória (belső töredezettség) • nagy lapméret: ekkor kisebb laptábla szükséges
6. Szegmentálás • eddig a memóriát 1D tömbként tárgyaltuk • sok esetben jobb több különálló virtuális címteret használni
Pl. egy fordítóprogram több táblázatot is előállít: 1. forrásszöveg 2. szimbólumtábla a változók nevével és atribútumaival 3. egész és valós konstansok táblázata 4. a program szintaktikus és szemantikus fája 5. a fordítóprogram saját verme