Memóriakezelés
A memória az egyik legfontosabb (és gyakran a legszűkösebb) erőforrás, amivel egy operációs rendszernek gazdálkodnia kell; főleg a több felhasználós rendszerekben, ahol gyakran olyan sok és nagy folyamat fut, hogy együtt nem férnek be egyszerre a memóriába. A memóriakezelésről nem lesz szó a későbbi fejezetekben, ezért itt ismertetem a fontosabb fogalmakat.
Amíg a multiprogramozás nem jelent meg, addig az operációs rendszerben nem volt olyan nagy szükség a memóriakezelő részekre. A multiprogramozás megjelenésével azonban szükségessé vált a memóriának a futó folyamatok közötti valamilyen "igazságos" elosztására. A megoldást a virtuális memóriakezelés jelentette. Ez úgy működik, hogy az operációs rendszer minden egyes folyamatnak ad a központi memóriából egy akkora részt, amelyben a folyamat még úgy ahogy működik, és a folyamatnak csak azt a részét tartja a központi memóriában, amely éppen működik. A folyamatnak azt a részét, amelyre nincs szükség (mert például már rég nem adódott rá a vezérlés, és feltételezhetjük, hogy rövid időn belül nem is fog végrehajtódni) ki kell rakni a háttértárra (a diszken az ún. lapozási területre). Ez a megoldás azért működik, mert a programok legtöbbször egy eljáráson belül ciklusban dolgoznak, nem csinálnak gyakran nagy ugrásokat a program egyik végéről a másikra (ez a lokalitás elve).
A központi egység fel van szerelve egy úgynevezett memóriakezelő egységgel (MMU), amely figyeli, hogy olyan kódrészre kerül-e a vezérlés, amely nincs benn a központi memóriában (mert például a háttértárra van kirakva). Ha a memóriakezelő egység azt találja, hogy ez az eset áll fenn, akkor az operációs rendszert arra utasítja, hogy rakja ki a háttértárra a folyamatnak azt a részét, amely jelenleg a memóriában van, és azt a részt hozza be a helyére, amelyre ezután szükség lesz.
A virtuális memória kezelése leggyakrabban lapozással (paging) történik. Ekkor a virtuális memória (egy folyamat virtuális címtartománya, amit a CPU biztosít) fel lesz osztva egyenlő nagyságú részekre, ún. lapokra (pages) – a háttértár és a memória között legalább ennyi byteot fog az operációs rendszer átvinni (vagy ennek többszörösét). A fizikai memória pedig fel lesz osztva ugyanolyan méretű lapkeretekre (page frames). Ha mondjuk a virtuális címtartomány 128 KByte, és 64 KByte fizikai memória van a számítógépbe építve, akkor ez 32 lapot, és 16 lapkeretet jelent, ha a lapméret 4 KByte. Ha egy program végrehajt egy olyan (gépi kódú) utasítást, amely a memória valamelyik rekeszére hivatkozik (a hivatkozott memóriarekesz címét nevezik virtuális címnek), akkor ezt a címet először a processzor átadja az MMU-nak, ami majd egy fizikai memóriabeli címet állít elő belőle. E feladatának ellátásához az MMU tárol egy ún. laptáblát (vagy legalábbis valamilyen módon hozzáfér a laptáblához), amely a lapok és lapkeretek egymáshoz rendelését tartalmazza egy speciális ún. "érvényességi" bittel, ami minden egyes laphoz tárolva van, és a bit értéke azoknál a lapoknál 1, amelyekhez tartozik a fizikai memóriában lapkeret. Az MMU működése során egy kapott virtuális címhez tartozó lapról megvizsgálja, hogy az "érvényességi" bitje 1-e. Ha igen, akkor a megadott laphoz tartozó lapkeret sorszámát visszaadja a CPU-nak (mondjuk … ez történhet így is), és az a kívánt adatot a megfelelő (fizikai memória-) rekeszből megszerzi (vagyis azt csinál vele, amit a gépi kódú programban a végrehajtott gépi kódú utasításban megadtak). Mi történik akkor, ha az "érvényességi" bit 0? Ekkor egy ún. hardware-interrupt (megszakítás) keletkezik, amit laphibának (page faultnak) neveznek. Ekkor kerül végrehajtásra az operációs rendszer memóriakezelő része, ami egy másik "érvényes" (fizikai memóriabeli) lapnak az 1-es érvényességi bitjét 0-ra állítja, és a hozzá tartozó lapkeretet a diszkre menti (az ún. lapozási területre). A lapkeretet ezután beírja a laptáblába ahhoz a laphoz, amelyhez a laphiba során hozzá akartak férni, betölti a diszkről (lapozási területről) a megfelelő laphoz tartozó lapkeret tartalmát, a laphoz tartozó "érvényességi" bitet 1-re állítja, és az MMU ezután már laphiba nélkül el tudja végezni a címtranszformációt.
Több programnak szüksége lehet esetleg több virtuális címtartományra is. Sok CPU lehetőséget ad szegmentált memóriakezelésre, ami annyit jelent, hogy a program több ún. szegmensben is tárolhat adatokat, és mindegyik szegmenshez külön-külön laptábla tartozhat (mondjuk … de ez nem mindig van így). Minden szegmensnek van egy dinamikusan változtatható mérete, ami az adott szegmensben megengedett legmagasabb sorszámú memóriarekeszt adja meg. Ilyen rendszerekben a memória címzésekor meg kell adni egy szegmens-sorszámot és az azon belüli virtuális címet is. Ilyen CPU-kon gyakori az is, hogy az operációs rendszer rövid időre nemcsak egy-egy lapot, hanem egy egész szegmenst visz ki a háttértárra – lényegében azt nevezik swappingnek.
A fenti leírás alapján már megérthető a virtuális memóriakezelés lényege, de azt fontos megemlíteni, hogy ez a valódi (működő) operációs rendszereknek az egyik legbonyolultabb része, és nagyon nehéz egyéb szempontoknak is megfelelő, ráadásul hatékony memóriakezelőt írni.
1.A memória fogalma:
Azonos méretű tároló rekeszek összessége. Minden rekesznek van egy sorszáma (címe), amivel azonosítani tudjuk. Amikor a processzor megcímez egy memóriarekeszt, akkor ez azt jelenti, hogy a rekeszhez rendelt szám segítségével megkeresi azt a rekeszt, amellyel dolgozni akar.
2.A memóriák csoportosítása:
A memóriákat fizikai szempontból két csoportra osztjuk:
-
ROM (csak olvasható) típusú memóriák:
(Read-Only Memory)
Tartalmuk kiolvasható, de nem változtatható meg. Programozásuk a gyártáskor történik. A számítógép vezérléséhez szükséges alapvető parancsokat tartalmazza. Információtartalmukat a gép kikapcsolása után is megőrzik.
Speciális fajtájuk a PROM, melyet a felhasználó egy speciális készülékkel programozhat, utána azonban tartalma csak olvasható. (pl.: az EPROM, mely ultraibolya fénnyel törölhető, majd újraírható).
-
RAM (írható és olvasható) típusú memóriák:
(Random Access Memory)
Olvashatók, törölhetők és újra írhatók. Külső tápfeszültségre van szükségük az adatok tárolásához, vagyis a gép kikapcsolásakor az adatok elvesznek.
Operatív tár céljára használják. Egy program futtatását a számítógép úgy végzi el, hogy először beolvassa a programot a RAM-ba, majd egymás után végrehajtja a parancsokat.
Példák az egyes memóriatípusok használatára:
-
ROM típusú memóriák:
- A BIOS-t tartalmazó memória (ROM-BIOS):
Feladata az egyes hardver elemek működésének irányítása, az alapvető gépi folyamatok vezérlése. Ennek tartalmát a DOS a RAM memóriába másolja (a RAM gyorsabb, mint a ROM).
-
Nagyfelbontású VGA monitor esetén: a vezérlőkártyán találhatunk ROM-ot.
-
RAM típusú memóriák:
- Operatív memória: Ennek az első 640 Kbyte-os részét hagyományos memóriának, az 1 Mbyte feletti részét pedig kiterjesztett memóriának (XMS) nevezzük. A DOS közvetlenül csak a hagyományos memóriát tudja kezelni.
- CMOS RAM:
Olyan kis fogyasztású memória, amely külön akkumulátorról kapja az áramot, így a gép kikapcsolásakor sem veszti el tartalmát. A számítógép konfigurációs beállításait őrzi (SETUP).
-
CACHE memória: Kiskapacitású gyorsító memória
Javasoljuk, hogy regisztrálj itt, mert így ingyenesen PDF formátumban is le tudod tölteni a tételeket!
Facebook Megosztás |
Nyomtatás
|
PDF letöltésEzek a tételek is érdekelhetnek:




(+3 pont, 5 értékelésből)

