2019. február 12., kedd

Memóriakezelés, alapvető módszerek, virtuális memória, szegmentálás és megvalósításuk a mai processzorokban

Az operációs rendszer szintű memóriakezelés



Az alapvető memóriakezelési módszerek két csoportba sorolhatók:

végrehajtás közben mozgatják az egyes processzusokat a központi tár és a lemezterületek között (ennek módszerei a lapozásFogalom magyarázata:Memóriakezelési módszer., illetve a csere);
már a betöltéskor eldől, hogy mi hova kerül, és a futás végéig állandósul a memória, azaz a programon belüli esetleges dinamikus definíciókon kívül a memóriának a „programot” tartalmazó része állandó.
A második módszer egyszerűsége és lényegében már alig használt módja miatt kezdjük ezzel! Itt három dolgot érdemes megemlíteni:

A legegyszerűbb memóriakezelési módszer az, hogy időben csak egyetlen programot futtatunk (monoprogramozás), ami annyit jelent, hogy a memóriát csak saját programunk, illetve az operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. között kell „felosztani”. Ezt a felosztást háromféleképpen végezhetjük – a sorrend a kisebb címtől a nagyobb cím felé haladást jelenti:
felhasználói program, operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. a RAM-ban – ezt a felosztást régi nagyszámítógépes rendszerekre, illetve miniszámítógépeken (Commodore, HT-1080Z) használták;
operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. a RAM-ban, felhasználói program – főleg beágyazott rendszerekFogalom magyarázata:Egy beágyazott rendszer (angolul embedded system) olyan speciális célú számítógép, melyet egy konkrét feladat ellátására terveztek használják ezt a felosztást;
eszközmeghajtók a ROM-ban, felhasználói program, operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. a RAM-ban – korai személyi számítógépekre jellemző. Lényegében a ROM-ba égetett rész nem más BIOS (Basic Input-Output System).
Monoprogramozás swappingFogalom magyarázata:Ez a technika az azonos időben futó programokat teljes egészében –a méretüknek megfelelően – mozgatja a lemezterület és a memória között. vagy lapozásFogalom magyarázata:Memóriakezelési módszer. nélkül. Az alábbi ábra mutatja, hogy ebben a környezetben a programunk, mint egyetlen végrehajtandó feladat (ezért monoprogramozás az elnevezés) hol helyezkedik el a memóriában az operációs rendszerhez képest.


Fejlettebb szint a multiprogramozás rögzített partíciókkalFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas.. Ekkor a rendelkezésre álló memóriát felosztják több, általában nem egyforma hosszúságú részre. Működéséhez minden partíciónakFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. szüksége van egy úgynevezett várakozási sorra. Ha beérkezik egy igény, az operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. berakja annak a legkisebb méretű, partíciónakFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. nevezett rész várakozási sorába, ahová még befér. Ilyenkor elvész a partíciónakFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. az a része – nem használható –, amit az éppen futó processz nem használ. Ha az adott szeletben befejeződik a munka, a legrégebben várakozó megkapja a területet, és elkezd működni. Kicsit jobb változat, ha egyetlen várakozási sorba érkeznek az igények, és a felszabadult partícióbaFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. az a legrégebben várakozó kerül, amelyik „befér” erre a helyre. Ez a technika két probléma megoldását igényli: egyrészt tudni kell a szerkesztőprogramnak, hogy a betöltéskor hogyan módosuljanak az utasítások végrehajtási címei (relokáció), valamit mi módon védhetők a keveredéstől az egyes processzek utasításai. Ezt általában úgy oldják meg, hogy két kitüntetett jellemzőt megjegyeznek minden egyes partícióhozFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas.: az úgynevezett bázist és a határt; ezek egy-egy kitüntetett memóriarészben, regiszterekben tárolódnak. Az esetleges téves hivatkozások a segítségükkel kiszűrhetők, és megfelelő hibakezeléssel nem történik nagyobb baj.

A multiprogramozás megjelenése fix partíciókFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. esetén, jellemzően kétféle módon valósult meg. Egyik esetben (bal oldali rajz) különböző méretű partíciókatFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. definiálunk és a megfelelő programot a hozzá méretben illeszkedő várakozási sorba rakjuk. Hátránya a megvalósításnak, hogy több várakozási sort (queue) kell nyilvántartani és menedzselni.

Másik esetben csak egy várakozási sort használunk (jobb oldali rajz), ekkor a megüresedett partícióFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. helyére az a program kerül, amelyik a sorban előrébb van és bele is fér a partícióbaFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas.! Ebben az esetben kis módosítása lehet a kiválasztásnak, hogy nem az első beleférő programot helyezzük bele a partícióbaFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas., hanem a beleférők közül a legnagyobbat. Ezzel a módszerrel a partícióFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. „veszteséget” lehet minimalizálni. Ekkor még egy javítást lehet meggondolni. Egy-egy programválasztás során a partícióbaFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas. több program fér be, a nem kiválasztottakhoz jegyezzük fel, hogy most éppen nem volt szerencséjük. Ezt a „szerencsétlenség” számlálót növeljük egyel. Megadhatunk egy korlátot (k), amit ha elér egy vagy több program, akkor a sorban első k-t elérő programot választjuk ki. Ezzel azt érjük el, hogy nem várakozik végtelen ideig egyik program se a memóriába kerüléshez.

Multiprogramozás fix partíciókkal Fogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas.


Az időosztásos rendszereknél az előbbinél fejlettebb technikát használnak. Ennek lényege, hogy milyen módon történik az igények kielégítése. Itt már nincsenek rögzített partíciókFogalom magyarázata:A partíció a merevlemez egy önálló logikai egysége, amely fájlrendszer tárolására alkalmas., amíg van hely, addig folyamatosan töltődnek a processzusok, majd egy jól meghatározott elv alapján, az idő előrehaladásával, változik a memória tartalma. Alapvetően két módszer létezik:

Csere vagy swappingFogalom magyarázata:Ez a technika az azonos időben futó programokat teljes egészében –a méretüknek megfelelően – mozgatja a lemezterület és a memória között.. Ez a technika az „azonos” időben futó programokat teljes egészében –a méretüknek megfelelően – mozgatja a lemezterület és a memória között. Mivel egy-egy processz működésének végeztével felszabadul a memória általa használt része, de nincs mit betölteni, a memóriában lyukak keletkeznek. Emiatt jelentősen csökkenhet a memória kihasználtsága, így szükség van a lyukak „egyesítésére”, amit memóriatömörítésnek nevezünk. Ilyenkor a rendszernek arra kell ügyelnie, hogy bent lévő processzek ne sérüljenek (az esetleges áthelyezések miatt újra kell számolni az utasítások címeit). A következő ábra ezt a csere folyamatot szemlélteti. Az „A” folyamat kikerül a memóriából, a háttértáron kerül elhelyezésre, míg a „B” folyamat a háttértárból a fizikai memóriába kerül.


A cserék adminisztrálására kétféle módszert dolgoztak ki:
Bittérképes cserekezelés. A memóriát, szónyi vagy kilobájtnyi egységekre osztjuk.(Talán leggyakrabban ma 4KB egységről beszélhetünk, de előfordulhat 2/4 MB is.) Minden egységhez hozzárendelünk egy-egy foglaltsági bitet. Ennek értéke egy, ha foglalt és nulla, ha szabad. Új processz érkezésekor olyan összefüggő szabad területet kell keresni, melyek együttes hossza elegendő az új tevékenység betöltéséhez. Az allokációs területek hosszának tervezésekor figyelembe kell venni, hogy a csere lehetőleg gyors legyen (a keresési algoritmusok is időt igényelnek), valamint ne foglaljon aránytalanul sok memóriát, hiszen akkor megint sehol sem vagyunk.
Láncolt listás cserekezelés. Ennél a technikánál egy kétirányú listába fűzzük a memóriában szereplő allokációs elemeket, a szabad helyeket, valamint a valamilyen processz által foglalt területeket. A lista ezek után egy négy elemet tartalmazó rekord: a terület jellege (szabad, foglalt), a terület kezdőcíme, a terület hossza, illetve a következő elem címe (mutató). Célszerű a listát kezdőcím szerint rendezetten kezelni, így egyszerűbb helyet keresni egy új feladatnak, valamint egyszerűbb a lyukakat összevonni. Nézzük meg, hogy milyen módon kereshetünk helyet egy új processznek. Feltesszük, hogy a memóriakezelő tudja az igényelt hely nagyságát:
firstfit: megkeresi az első olyan üres helyet, amiben elférünk, majd két részre osztja a területet: az egyik tartalmazza magát a processzt, a maradék rész pedig szabad listaelem lesz;
nextfit: az utolsó szabad helytől keres üres területet;
bestfit: az egész listában keresi azt a legkisebb szabad területet, ahol elfér a processz. Természetesen az eljárás általában lassabb, mint az előbbiek, viszont helyet talál olyan processzeknek is, amelyeknek az előző két módszer nem talál a nagy helyigény miatt. Azok ugyanis kis igényhez is az első szabad helyet rendelik, ami lehet, hogy nagyobb igénynek is megfelelne;
worstfit: a legnagyobb szabad lyukat választja;
a módszerek javíthatóak azáltal, hogy külön listában kezeljük a foglalt, illetve a szabad területeket. Tovább javítható bizonyos előfeltételek teljesülése esetén: például ha elég egyformák a processzek méretei, akkor a leggyakoribb mérethez külön szabadlistát készítünk, és ebben keresünk. Ezt a módszert quickfit technikának nevezik.
A bittérképes, láncolt listás memória nyilvántartást szemlélteti a következő sematikus ábra. Az A,B,C, stb karakterek az egyes folyamatokat rövidítik, ezek elhelyezkedését, foglaltsági térképét a memóriában a kép bal oldali táblázata illusztrálja. A láncolt listás megvalósításnál, a P (program) jelzés után az első szám a memória kezdőcímét mutatja, a második szám a lefoglalt memória egységek számát. Üres memóriablokk (Ü) esetén hasonló értelmezést használhatunk.

virtuális memóriaFogalom magyarázata:A fizikai memória egy kiterjesztése. A merevlemezen helyezkedik el.. A fejlődés következő foka az volt, amikor lehetőség nyílt arra, hogy ne csak teljes „programok” legyenek a memóriában, hanem csak az éppen működő futó részek. Ehhez a programokat úgynevezett rétegekre kell darabolni az overlay technika révén. Mivel a mozgatást eleve az operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. végzi, azzal nincsen gond. A technika kezdeti használatakor azonban a darabolást még a programok készítői végezték. Az operációs rendszerFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt.rel való megoldás a virtuális memóriaFogalom magyarázata:A fizikai memória egy kiterjesztése. A merevlemezen helyezkedik el. (1961, Fotheringham). A modern operációs rendszerekFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. képesek arra, hogy látszólag több memóriát biztosítsanak a programoknak, mint amennyi fizikailag a rendelkezésükre áll. A módszert virtuális memóriakezelésnek hívják.


A lapozási technika

Minden program előállít valamilyen memóriacím-halmazt; ezeket virtuális címeknek nevezik. Ha nincs meg ez az eszközünk, akkor a memóriacímek közvetlenek. Ha használjuk a virtuális technikát – a programunk nem fér be egyszerre még az egyre nagyobb és nagyobb memóriába se –, akkor a címek nem közvetlen memóriacímek, hanem egy MMUFogalom magyarázata:Az MMU (Memory Management Unit) az a komponens egy számítógépben, ami a memóriacímzést valamilyen szempontból módosítja, amíg eljut a fizikai memóriához a művelet, függetlenül attól, hogy ez a komponens a CPU része vagy külső elem. (Memory Management Unit) nevű egységbe kerülnek, ami leképezi azt egy fizikai címmé. Ezt a címteret lapokba szervezik, amelynek fizikai megfelelője a lapkeret. Egy-egy lap mérete általában fél kilobájt és egy megabájt közé esik. A lapokat laptáblák adminisztrálják, amelyek a minél gyorsabb működés érdekében mindig a memóriában vannak. Általánosan elmondható még, hogy jellemzően az operációs rendszer által nyilvántartott virtuális címtér nagyobb, mint a rendelkezésre álló fizikai memória Fogalom magyarázata:A gépben található valós, hardveres memória, így a virtuális memória Fogalom magyarázata:A fizikai memória egy kiterjesztése. A merevlemezen helyezkedik el. nyilvántartás alapvető feladata az, hogy tudjuk melyik virtuális lapkeret van jelen a fizikai memóriába és hol. Ezt a hozzárendelést szemlélteti a következő ábra.

Ahogy látható, a rajzon egy lap 4KB méretű, ez ma is egy átlagos, jellemző érték, a virtuális címtérben egy lapkeretnél X betű jelzi, hogy nincs benn a fizikai memóriában.

A program végrehajtás során a processzor virtuális címet küld az MMU-nak, az ha szükséges betölti a megfelelő lapot a háttértárból a fizikai memóriába, és átfordítja a virtuális címet az keletkező fizikai címmé.

Ez a fizikai-virtuális cím megfeleltetés nem feltétlenül jelent bonyolult számításokat. Ezt illusztrálja a következő 16 bites virtuális címtér konvertálást mutató ábra. Ehhez hasonló ábra sok forrásban megtalálható, például A.Tanenbaum, A.Woodhull Operációs rendszerek könyvében is, azt illusztrálja, hogy ez a konvertálás gyors művelet tud lenni, bár a 16 bites virtuális címtér csak illusztrációs méretű!

A lenti ábra tetején megjelenő 16 bites virtuális címből (64 KB a virtuális címterünk, 4KB (12 bites) egy lap mérete és 32KB (15 bit) a fizikai memóriaFogalom magyarázata:A gépben található valós, hardveres memória nagysága), hogyan állítunk elő egy 15 bites fizikai címet. A 16 bites cím felső 4 bitjét használjuk a laptábla indexeként(0010=2), ezen indexű laptábla elem szintén 4 bites, mondjuk ennek felső 3 bitje a 12 bit kiegészítő bitjeit adja a 15 bites fizikai cím meghatározásához. A 4.bit a jelenlét bit. Ha nincs a fizikai memóriában a kért virtuális lapnak megfelelő memória, akkor jön a „lapcsereFogalom magyarázata:Ha az újabb virtuális lap már nem fér el a fizikai memóriában, lapcsere következik be.”, kitöltésre kerül a laptábla megfelelő bejegyzése, és folytatódik a program végrehajtás.

Természetesen ha ez a „lapcserés” címmeghatározás él, még ezen ügyes módszer mellett is jelentős program futás „lassulás” tapasztalható. Ma még gyakran használnak például Windows XP operációs rendszert. Ebben a rendszerben a maximálisan használt fizikai memóriaFogalom magyarázata:A gépben található valós, hardveres memória 2GB. Ha elérjük azt, hogy a futó alkalmazások teljes memória felhasználása „közelíti” a fizikai határt, azt tapasztalhatjuk, hogy szinte folyamatosan ég a merevlemezFogalom magyarázata:Egy fajta nagy kapacitású háttértár. A tokba gyárilag építenek be több mágneslemezt, amelyekhez több író-olvasó fej tartozik. használatot jelző kis led, mutatva azt, hogy „nagyon gyakran „ azt találja a memória kezelő egység, hogy a kért cím éppen lemezen van és lapcsereFogalom magyarázata:Ha az újabb virtuális lap már nem fér el a fizikai memóriában, lapcsere következik be. kell! Ezen aktivitást mutató fényen kívül azt is tapasztaljuk, hogy sok esetben jelentősen romlik a programunk futási teljesítménye!

Egy bejegyzés a következő információkat tartalmazza:

a lapkeret száma talán a legfontosabb információ, a lapozásiFogalom magyarázata:Memóriakezelési módszer. algoritmus célja ennek előállítása, hiszen itt helyezkedik el az a cím, melyet egy adott hivatkozás használ;
a következő bit írja le, hogy a cím a memóriában van-e, vagy sem. Hiányjel (’) esetén a memóriában van, és az előző adat tartalmazza, hogy hol. Ha ez a bit nulla, akkor az előző adatnak nincs értéke, hiszen nincs a memóriában;
azt jelzi, hogy mit tehetünk a lappal: írhatunk és olvashatunk, vagy csak írhatunk, esetleg végrehajtás is engedélyezett;
a módosítás és hivatkozás bitnek lap eltávolításkor van jelentősége, ha módosult, akkor a lemezen is felül kell írni az adott lap tartalmát;
a gyorsító tár használatának letiltása főleg akkor fontos, ha a rendszer valamilyen I/O eszközre vár. Ilyenkor célszerű, ha magától a rendszertől kap választ.
Fontos elemei a virtuális memóriakezelésnek a lapcserélési algoritmusok. Ezek többfélesége egyrészt a fejlődésüket, hatékonyabbá válásukat mutatja, másrészt esetleg ismerve a feladat milyenségét, egyikük valamilyen szempontból jobb lehet egy másiknál. Akkor válik szükségessé lapcsereFogalom magyarázata:Ha az újabb virtuális lap már nem fér el a fizikai memóriában, lapcsere következik be., ha a használni kívánt programrész nincs a memóriában. Ezt az eseményt laphibának nevezik, ami kiváltja a lapcserélési eljárás megindítását.

Optimális – egyben megvalósíthatatlan – lapcserélési algoritmus. Ennek lényege, hogy a memóriában levő minden lapot megcímkézünk azzal a számmal, amelyik azt jelzi, hogy hány utasítás végrehajtása után kerül erre a lapra „sor”. Nyilván a legnagyobb számú lapot kellene kidobni, de az operációs rendszerekFogalom magyarázata:Olyan programrendszer, amely a számítógépes rendszerben a programok végrehajtását vezérli: így például ütemezi a programok végrehajtását, elosztja az erőforrásokat, biztosítja a felhasználó és a számítógépes rendszer közötti kommunikációt. nem tudják megmondani a számot. Ehhez ugyanis először „virtuálisan” le kellene futtatni a programot, ami nyilvánvalóan abszurditás.
NRU (Not Recently Used, nem mostanában használt) lapcserélési algoritmus. Minden laphoz, ami a memóriába kerül, hozzárendelünk még két bitet: egy R bitet, amely minden hivatkozáskor (akár olvasás, akár írás) egyesre állítódik, és egy M bitet, ami módosításkor kap 1-es értéket. Ennek alapján a memóriába lévő lapok négy osztályba sorolhatóak:
0. osztály: 00 (nem hivatkozott, nem módosított);
1. osztály: 01 (nem hivatkozott, módosított),
2. osztály: 10 (hivatkozott, nem módosított);
3. osztály: 11 (hivatkozott, módosított).
A módszer az, hogy véletlenszerűen kiválaszt a legalacsonyabb sorszámú osztályból egyet, és azt kidobja. Egyszerű módszer, könnyen megvalósítható.
FIFOFogalom magyarázata:FIFO lapcserélési algoritmus. A sor-adatszerkezet műveleteinek megfelelően lapcsere esetén a legrégebben bent lévő lapot eldobja, és a sor végére teszi az újonnan érkezőt. lapcserélési algoritmus. A sor-adatszerkezet műveleteinek megfelelően lapcsereFogalom magyarázata:Ha az újabb virtuális lap már nem fér el a fizikai memóriában, lapcsere következik be. esetén a legrégebben bent lévő lapot eldobja, és a sor végére teszi az újonnan érkezőt.
Second chance (második lehetőség) lapcserélési algoritmus. A FIFOFogalom magyarázata:FIFO lapcserélési algoritmus. A sor-adatszerkezet műveleteine0k megfelelően lapcsere esetén a legrégebben bent lévő lapot eldobja, és a sor végére teszi az újonnan érkezőt. olyan módosítása, amelyben a legrégebbi egyes hivatkozású lapot nullás bittel a sor végére teszi, és keresi tovább a megfelelőt.
Az óra lapcserélési algoritmus. A bent lévő lapokat egy láncnak képzeljük, azaz nincs első és utolsó, eleje meg vége elem, hanem egy aktuális elem, amellyel utoljára volt dolgunk laphiba esetén. Innen indulva szintén az R bitet vizsgáljuk: amennyiben ez egyes, akkor nullára állítjuk, és megyünk tovább. Lényegében az előző algoritmus, csak a kitüntetett elem – ahonnan a keresés indul – az utolsónak hivatkozott változásra mutat.
LRU (Least Recently Used) lapcserélési algoritmus. Talán ez közelíti legjobban az optimális lapcserélést. Statisztikai megfontolásokra támaszkodik: az utoljára használt néhány utasítás által gyakran használt lap valószínűleg továbbra is szükséges lehet; viszont amit régen nem használtunk, valószínűleg még egy darabig nem is kell. Így azt dobjuk el, amelyiket a legrégebben nem használtunk. Az okozhat implementációs nehézséget, hogy minden hivatkozáskor aktualizálni kell a laphivatkozásokat. Ehhez minden lapbejegyzéshez felveszünk egy újabb bejegyzést, amely a lapra hivatkozáskor annak a számlálónak az értékét tartalmazza, amely minden memóriahivatkozás esetén eggyel nő.
A korábban látott virtuális címtér- fizikai címtér illusztráció(16 bit- 15 bit) nem tükrözi a mai memória méreteket. (Nem is volt ez a cél.) Egy mai átlagos processzor 64 bites, az ebből adódó címzési lehetőségeket messze nem használjuk ki valójában, ezért nézzük meg egy 32 bites processzor esetében mit is jelent a virtuális memóriaFogalom magyarázata:A fizikai memória egy kiterjesztése. A merevlemezen helyezkedik el. táblázat kezelése! Egy lapkeret mérete jellemzően 12 bites, mint a korábbi illusztrációban volt. Ez azt jelenti, hogy a virtuális laptábla elemszáma 220. Ez „kicsivel” több mint egymillió! (1024x1024) Azaz a virtuális laptábla táblázatunk elemszáma nem 16, mint a korábbi példában, hanem több mint egymillió. Ennek a táblának a memóriában van a helye. Ez akkora helyet igényel, hogy ennek gyakorlati megvalósítása lehetetlen. Ezért ennek megoldására úgynevezett kétszeres (többszörös) virtuális laptáblákat alkalmaznak. Ebben az esetben például az elsődleges laptábla is 1024 elemű, majd az ehhez tartozó al-laptábla is 1024 elemű. Ennek megfelelően csak a fő 1024 elemű laptábla van állandóan a memóriában, illetve még a szükséges néhány másodlagos laptábla. Ebből a rövid leírásból is érzékelhető, hogy egyrészt a módszer továbbfejleszthető, és akár a 64 bites esetre alkalmazva 5 szintű laptábla rendszert hozzunk létre. Viszont az is könnyen belátható, hogy ennek bonyolultsága már nem ad hatékony megoldást!

Ebből a helyzetből a megoldást az invertált laptáblák használata adja. Ez azt mondja, hogy nem kell nekünk az egész virtuális címteret laptábla táblázatban tárolni, hanem elég akkora táblázat, amekkora a fizikai memóriaFogalom magyarázata:A gépben található valós, hardveres memória. Ekkor nem tudjuk a korábbi ábrán mutatott módszert használni, egyszerű asszociatív táblát kapunk, de jóval kisebb méretűt. Ez egyszerűsíti a helyzetet, de kicsit lassítja is, ebben a táblában lassabb a keresés. A gyakorlat viszont azt mutatja, hogy egy futási helyzetben nem gyakran kerül sor lapcserére, illetve csak néhány virtuális lap van használatban. Ez azt jelenti, hogy ha készítenénk egy kisméretű asszociatív táblázatot (nem a fizikai memóriaFogalom magyarázata:A gépben található valós, hardveres memória méretnek megfelelőt), 32 vagy 64 eleműt, akkor ezt mint „gyorsító tárat” használva hatékony címfordítást tudnánk végezni. Ezt a táblázatot TLB-nek (Translation Lookaside Buffer- címfordítási gyorsítótár) nevezzük. Voltak olyan környezetek, ahol ezt szoftveresen kezelték, a mai processzorok esetén ez egy hardveres gyorsító tár, ezzel is növelve a hatékonyságot. Az Intel Nehalem architektúrában kétszintű hardveres TLB-t használ (64 elemű DTLB-t vagy 128 elemű ITLB-t az első szintű, L1 gyorsítótárhoz, míg 512 eleműt a másodszintű, L2 gyorsító tárhoz), ezzel segítve a gyors címfordítást. Ezek az elemszámok azt jelentik, hogy csak abban az esetben fordul a memória kezelő az invertált laptáblához ha se az L1, se az L2 TLB-ben nincs a kért cím. Ez meglehetősen ritka eset, azaz ritkán érünk el ahhoz a helyzethez, hogy egy lassú módszerrel kelljen meghatároznunk a virtuális címhez tartozó fizikai lapot. Nyilvánvaló, hogy a processzorok fejlődésének egyik jellemzője, hogy egyre nagyobb méretű TLB-t használ, ezzel is gyorsítva a memória kezelését!

Az eddig elemzett esetekben a memóriát egy indexes tömbként kezeltük, ami azt jelenti, hogy egyazon helyen voltak az adatok és a programutasítások. Ilyenkor az MMU-nak ennek tudatában kellett kiadni a megfelelő memóriacímet. Kézenfekvő lenne, ha több virtuális memóriát használnánk (természetesen nem sokat). Ezeknek a címei mindig nullával kezdődnek, és a bennük lévő bejegyzések az ehhez képesti eltolási címen vannak. Ezt a „címet” hívják offszetnek. Hivatkozáskor azt kell eldönteni, hogy melyik „virtuális memóriához” tartozik a cím, és ennek megfelelően kell az abszolút címet meghatározni. A különálló „virtuális memóriákat” szegmenseknek nevezik. A mai processzorok mindegyike ezt a címmeghatározást használja. Minden egyes szegmenshez tartozik egy kitüntetett adat, ami betöltéskor aktivizálódik, és a szegmens kezdetének abszolút címét tartalmazza; a neve általában szegmensregiszter. Az adott szegmensbe tartozó hivatkozások abszolút címeit ebből a szegmensregiszter-értékből és a szegmensen belüli eltolásból, az offszetből számolják ki. A következő részben ennek kiszámítási módjára adunk példákat az INTEL8080 processzorcsalád által használt gépi utasításokkal.

Nincsenek megjegyzések:

Megjegyzés küldése