Operációs rendszerek / 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
Rögzített memóriaszeletek külön- külön várakozási sorral
Rögzített memóriaszeletek egyetlen várakozási sorral
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
Példa
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
Mennyi memóriát kell lefoglalni?
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
Egy jellegzetes laptáblabejegyzés
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. Lapcserélési algoritmusok
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
4.5. Az óra lapcserélési algoritmus
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. A lapozásos rendszerek tervezési szempontjai
5.1. A munkahalmaz modell igény szerinti lapozás munkahalmaz (vergődés)
5.2. Lokális/globális helyfoglalá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
Mi történik, ha az egyik memóriaszelet betelik? a fordító abbahagyja a fordítást, hibaüzenettel leáll (bár lehet, hogy még van máshol szabad memória)... a fordító helyet vesz el azoktól a tömböktől, amelyeknek még van szabad helyük...
megoldás: egymástól teljesen független címtér létrehozása (szegmensek) minden szegmens címtere 0-tól valamilyen maximális címig tart általában eltérő hosszúságú szegmensek, sőt méretük változhat a program futása során (pl. veremszegmens) több szegmens esetén a cím mindig két részből áll: a szegmens számból és a szegmensen belüli címből
a szegmentálás lehetővé teszi adatok és eljárások megosztását programok között leggyakorib példa: osztott könyvtár (pl. grafikus rendszerek) egy szegmensek egy logikai egységek, így az eljárásoknak és adatoknak különböző védelmi szintjük lehet
6.1. A tiszta szegmentálás implementációja lapozás: fix méretű partíciók szegmentálás: változó méretű partíciók egy idő után a memória darabolódik, sok memóriát veszítünk (külső töredezés) => tömörítés