A modern operációs rendszerek képesek arra, hogy látszólag több memóriát biztosítsanak a programoknak, mint amennyi fizikailag a rendelkezésükre áll. Ezt virtuális memóriakezelésnek hívják.
Olyan operációs rendszerek alatt is használnak ehhez hasonló dolgot, amelyek nem képesek virtuális memóriakezelésre - az overlay technikát. Csak ennél a programozónak kell rétegekre darabolnia a programot. Ezt kikerülendő találták ki a virtuális memóriát (Fotheringham, 1961.). Az operációs rendszer csak a program megfelelő részét tartja a memóriában, a többi rész a lemezen van.
A virtuális memóriát használó rendszerekben leggyakrabban a lapozás technikáját alkalmazzák. Csak felsorolásszerűen a lehetséges lapcserélési algoritmusok:
Annak érdekében, hogy a merevlemezt virtuális memóriakezelésre használni lehessen, swapfájlt (fájlokat), vagy swappartíciót (partíciókat) kell létrehozni. Linux alatt ez dinamikusan, menet közben is változtatható, tehát az operációs rendszer leállítása nélkül lehetőségünk van a virtuális memória méretének megváltoztatására.
Egy swap partíció mérete maximum 128 MB lehet, de használhatunk belőle többet is egyszerre, maximum 16 darabot.
Szorosan kapcsolódik a memóriakezeléshez a buffer cache kezelési módszere. A buffer cache a Unix rendszerek lemezeléréshez használt gyorsítótárja, amelyet a kernel kezel. Linux alatt a buffer cache mérete dinamikusan változik a rendszer terhelésétől függően - az éppen szabad fizikai memória egészét erre a célra használja. A lemezre írandó anyag is először a buffer cache-be kerül, és vagy egy megadott idő elteltével (30 másodperc) íródik ki a lemezre, vagy pedig akkor, ha a rendszer számára elegendő mennyiségű anyag összegyűlik a cache-ben. Ezért fontos, hogy ne kapcsoljuk simán ki a számítógépet, hanem mindig szabályosan állítsuk le a rendszert a megfelelő parancsokkal.
A demand paging egy teljesítményt növelő módszer, ami azt jelenti, hogy egy futtatható fájl végrehajtásakor nem az egész fájl töltődik be a memóriába, hanem mindig csak azok a lapjai, amikre a végrehajtás során éppen szükség van. Mivel minden programnak vannak olyan részei melyek csak egyszer (vagy akár egyszer sem) futnak le, ezeket a részeket vagy be sem tölti a rendszer, vagy miután lefutottak felszabadítja az általuk elfoglalt memóriaterületet.
Az osztott kódkönyvtárak használatának alapelve az, hogy a programok C nyelven íródnak, és valószínűleg sokban van olyan függvény, amely más programokban is előfordul. Ezeket felesleges lenne minden programmal a memóriába tölteni, elég egyszer, és meg kell mondani a programoknak, hogy hol keressék ezeket a függvényeket a memóriában. Ezt csinálja a dinamikus linker, amely a programokba beépített programrészletnek segítve gondoskodik a függvények megtalálásáról, illetve a memóriába töltésükről, amennyiben még nem lennének betöltve.
A copy-on-write mechanizmus lényege az, hogy új folyamat létrehozása mindig egy másik folyamat memóriájának lemásolásával történik. Mivel viszont egy memórialapra több folyamat memóriatérképéből tudunk hivatkozni, nem kell azt a lapot lemásolni, csak el kell helyezni a lapra mutató hivatkozásokat a megfelelő helyeken. Innentől kezdve csak arra kell vigyázni, hogy amikor az ugyanarra a lapra hivatkozó folyamatok közül valamelyik módosítani akarja a lapot, akkor le kell másolnunk a számára, és így már módosíthatja, mert az már csak az övé.
Kapcsolódó témakörök: