A memória kezelése

Multiprogramozásnál általában egy operatív táron több, egyidőben futó program is osztozik. Mivel az operatív tár mérete pénzügyi és technikai okok miatt korlátozott, általában nem fér bele egyszerre az összes futó program és az azok által használt összes adat. Ezért a memóriát dinamikusan, időközben változtatható módon kell az egyes programok rendelkezésére bocsátani. Gondoskodni kell arról is, hogy az adott pillanatban szükséges információk a háttértárból a memóriába töltődjenek, a feleslegeseket pedig időlegesen ki kell írni a háttértárba. Az operációs rendszerek egyik legfontosabb feladata a memória kezelésének automatikus megoldása.

A programozó munkája viszont nagymértékben leegyszerűsödik, ha nem kell tekintettel lennie az operatív tár mérete által támasztott korlátokra, hanem úgy tekintheti a gépet, mintha egy gyakorlatilag végtelen méretű tárolóterülete lenne, és e fölött csak az ő programja rendelkezne. Ez a virtuális memória alapötlete.

A virtuális tárkezelést a harmadik generáció újításának tekintik, bár a kezdeti formája a manchesteri egyetem 1940-es évek végén készített gépeinél már megjelent az úgynevezett egyszintű tár képében.

A virtuális memória megvalósításánál kényelmes megoldás az, ha az operatív tárat fix méretű összefüggő területekre, lapokra osztják. Ugyanekkora méretű lapokra osztják a programokat és az adatterületeket is. Egy ilyen rendszernél a memória kiosztása, a szükségtelen területek háttértárolóra írása és a szükséges területek onnan való beolvasása laponként történik. Egy tipikus lapváltós algoritmus folyamatábráját láthatjuk a rajzon. Egy lap tartalmának kicserélése akkor történik meg, amikor a CPU által igényelt szó nincs bent az operatív tárban. Az illető program futása ilyenkor felfüggesztődik egész addig, amíg a kívánt szót tartalmazó lap betöltődik az operatív tárba. Multiprogramozott környezetben eközben a processzor egy másik programot hajthat végre. Mivel a lapok cseréje alapvetően IO művelet, ez a CPU-tól függetlenül végrehajtható az IOP felügyelete mellett.

A memória dinamikus kiosztásának egyszerű megoldása a bázisregiszter használata. Ez a regiszter a CPU-ban található és az operációs rendszer felügyeli. Egy tényleges tárcím úgy alakul ki, hogy a program által megadott címhez a gép hozzáadja a bázisregiszter tartalmát. Így a bázisregiszter tartalmának megváltoztatásával az operációs rendszer egy program címtartományát bármikor módosíthatja. Egy olyan memóriakezelő rendszerben, amelyik a lapozásos technikát használja, kényelmes megoldás ha több bázisregisztert is alkalmaznak és mindegyik egy-egy lap kezdőcímét tartalmazza. Ilyenkor ezeket lapregisztereknek szokták nevezni.

 

Ha a CPU képes párhuzamosan több szó feldolgozására is, akkor természetes igény, hogy a memória és a CPU között is több szót lehessen egyszerre mozgatni. Erre alkalmas megoldás több független memóriamodul használata a címzés átlapolásával és puffer-regiszterek beépítése a CPU-ba. Mindkét megoldás kezdetleges formában megvolt már az IBM 7094-nél is. A félvezetős memóriák fejlődésével megérte viszonylag nagyméretű gyors puffert építeni a memória és a CPU közé. Ezt a megoldást a mai napig használják, ez a cache. A cache utasítások és adatok tárolására is használható.