next up previous index
Következő: 3.5 Mi az a Fel: 3. Alapfogalmak Előző: 3.3 Multiuser   Index


3.4 Memóriakezelés

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:


next up previous index
Következő: 3.5 Mi az a Fel: 3. Alapfogalmak Előző: 3.3 Multiuser   Index

1999-09-17