A memória menedzsment megvalósítása - stadopedia

1. Az a lap, amelyre a fellebbezést benyújtották, nem rögzített.

2. Védett a védelem.

3. Írja be a megosztott oldalt.

4. A köteg további memóriát igényel.







5. A kérés címzett oldala rögzített, de jelenleg nem töltődik be a memóriába.

Az oldalak helyettesítése a következőképpen történik. A rendszer megpróbál fenntartani bizonyos számú ingyenes oldalt a memóriában, így ha egy oldaltörés megtörténik, akkor azonnal megtalálható egy ingyenes oldal, anélkül, hogy először több más oldalt kellene írni a lemezre. Ennek a stratégiának köszönhetően a legtöbb oldallérés csak egy lemezművelettel elégedett (a lemezről olvasott oldal), bár néha két műveletet kell végrehajtania (a "piszkos" oldal lemezére való írása, majd a szükséges oldal olvasása a lemezről). Természetesen az ingyenes oldalak listájához tartozó oldalak valahol származnak. Ezért az oldalcsere-algoritmus valódi munkáját az jellemzi, hogy ezek az oldalak a folyamatokból származnak és a szabad oldalak listájába kerültek.

A swap rendszerben aktívan használják a munkacsoport fogalmát. Minden folyamat (nem minden szál) rendelkezik egy munkacsoporttal. Ez a készlet a megjelenített oldalakból áll, amelyek a memóriában vannak, és amikor hozzájuk férnek hozzá, ezért nincsenek megszakítások. A munkadarab mérete és összetétele természetesen változik, ahogy a folyamat folytatódik. Az egyes folyamatok munkacsoportját két paraméter írja le: a minimális és maximális méretek. Ezek a méretek nem merev határok. A folyamat kevesebb memóriát tartalmazhat, mint az alsó kötés, vagy (bizonyos körülmények között) több, mint a megadott maximum. Eleinte ezek a határok minden folyamathoz megegyeznek, de idővel változhatnak. A kezdeti alapértelmezett minimális érték 20-50 oldal, és a kezdeti maximális érték 45-345 oldal, a RAM összmennyiségétől függően. Az alapértelmezett értékeket a rendszergazda módosíthatja.

Másodpercenként, a kiválasztott kernel szál démon, az egyensúlyi készlet kezelőjének hívják. ellenőrzi, hogy a rendszer rendelkezik-e ingyenes oldalakkal. Ha a szabad oldalak kevesebbek, mint amire szükséged van, a munkaterület-kezelőt futtatja. amely megvizsgálja a munkacsoportokat, és felszabadít további oldalakat. A munkahelyi menedzser először meghatározza azt a sorrendet, amelyben meg kívánja vizsgálni a folyamatokat. Elsősorban az oldalakat távolítják el olyan nagy folyamatoktól, amelyek hosszú ideig készenlétben voltak. Végül, az előtérben lévő folyamatot figyelembe vesszük. Ezután a munkatelepítő kezdi a kiválasztott sorrendben a folyamatok felkutatását. Ha a folyamat munkacsoportja jelenleg kisebb az alsó határánál vagy az utolsó ellenőrzés óta, az oldalszintű megszakítások száma ebben a folyamatban magasabb volt, mint egy bizonyos szint, akkor az oldalakat nem veszi el. Ellenkező esetben a munkacsoport-kezelő egy vagy több oldalt fog a folyamatból. A folyamatból meglehetősen összetett oldalak száma függ a RAM összmennyiségétől, valamint attól, hogy mennyi memória szükséges az aktuális folyamatokhoz, és hogy az aktuális munkacsoport mérete hogyan függ össze a felső és az alsó határértékekkel, valamint a egyéb paraméterek. Minden oldalt figyelembe kell venni.

Egyprocesszoros gépen, ha az oldal hozzáférési bitje törlődik, az oldalhoz társított számláló értéke egyenként növekszik. Ha ez a bit egy, akkor a számláló nullázódik. A beolvasás után a legnagyobb számlálóval rendelkező oldalak törlődnek a munkacsoportból. A folyam folyamatosan feltárja a folyamatokat, amíg elég oldalt nem enged, majd leáll. Ha az összes folyamathoz való teljes keresés nem eredményezi elég számú oldal kiadását, akkor a munkamenetkezelő elindítja a második lépést, ahol már olyan oldalakból származik, ahol a munkacsomag mérete kisebb, mint a minimális.







A többprocesszoros gépen az ellenőrző bitellenőrzésen alapuló algoritmus már nem működik, mert bár a jelenlegi CPU nemrég látogatta ezt az oldalt, más CPU-k is hozzáférhettek. A központi processzorok hívásainak bitjeinek vizsgálata túl drága. Ezért a hozzáférési bitet egyáltalán nem veszik figyelembe, és a legrégebbi oldalak törlődnek.

Megjegyzendő, hogy az oldalcsere-eljárás szempontjából az operációs rendszert folyamatként kezelik. Ő rendelkezik az oldalakkal és ő is dolgozik. Ez a munkacsoport is csökkenthető. Azonban a rendszer egyes részei és a nem paged medence memóriában van rögzítve, és semmilyen körülmények között nem lehet kirakodni.

A memória minden oldala egy vagy több munkacsoportban vagy az öt listában található. A "tiszta" (redundáns) és a "piszkos" (módosított) oldalak listája olyan oldalakat sorol fel, amelyek a közelmúltban eltávolításra kerültek a munkacsoportoktól, de még mindig a memóriában vannak, és továbbra is társulnak az azokat használó folyamatokhoz. A különbség az, hogy a tiszta oldalaknak van egy másolata a lemezen, míg a módosított oldalaknak nincs ilyen példányuk, és ezeket az oldalakat még menteni kell. A szabad oldalak listája tiszta oldalakat tartalmaz, amelyek már nem kapcsolódnak semmilyen folyamathoz. A zónas oldalak listája olyan oldalakat tartalmaz, amelyek nem kapcsolódnak semmilyen folyamathoz és nulla tele vannak. Az ötödik lista fizikailag hibás oldalakat tartalmaz. Ez biztosítja, hogy ezeket az oldalakat semmi esetre sem használják.

Az oldalak a munkacsoport-kezelő és más rendszermag-démonok között mozognak a munkacsoportok és a különböző listák között. Tekintsük ezeket az átmeneteket. Amikor a munkalap kezelője törli az oldalt a munkacsomagból, az oldal a tiszta oldalak listájához vagy a módosított oldalak listájához tartozik, az állapottól függően. Mindkét lista érvényes oldalakkal rendelkezik, így ha oldaltörés történik, és ezeknek az oldalaknak egyike szükséges, akkor eltávolítják a listáról, és lemezes I / O művelet nélkül visszaküldik a munkacsoportba. Amikor a folyamat befejeződik, az összes olyan oldal, amelyet más folyamatok nem használnak, a szabad oldalak listájára esik. Ezek az oldalak már nem kapcsolódnak semmilyen folyamathoz, és oldaltörés útján nem adhatók vissza a munkamenetekhez. Más átmeneteket más démonok okoznak. Négy másodpercenként egy cserefolyamot indítanak a folyamatot keresve, amelynek minden szálát egy bizonyos ideig letiltották. Ha megtalálja ezeket a folyamatokat, elszakítja a folyamatok halmait, és áthelyezi a folyamatoldalakat a "tiszta" és "piszkos" oldalak listájára.

Két másik démon, egy démon a megjelenített oldalak megjelenítéséhez és egy démon a módosított oldalak írásához. időről időre aktiválódnak annak ellenőrzésére, hogy elegendő tiszta oldal van-e. Ha az üres oldalak száma egy bizonyos szint alatt van, az oldalakat a módosított oldalak listájának tetejéről veszi, írja a lemezre, majd tegye őket a "tiszta" oldalak listájába. Az első démon a megjelenített fájlokra ír, a második az oldalakat írja a swap fájlokba. Tevékenységük eredményeként a "piszkos" oldalak "tiszták" lesznek.

Az a két démon, amelyik az oldalakat megtisztítja, az az oka, hogy a memóriában megjelenített fájl nőhet az írás során. Ez a növekedés új szabad lemez blokkokat igényel. A szabad hely hiánya az oldalak írásához blokkoláshoz vezethet. A második téma kihozza a helyzetet a patthelyzetből azáltal, hogy az oldalakat egy swap fájlba írja, amely soha nem növekszik.

Ha a folyamat felszabadítja az oldalt, akkor ez az oldal már nem kapcsolódik a folyamathoz, és az ingyenes oldalak listájára helyezhető, hacsak nincs más folyamatokkal megosztva. Ha egy oldaltörés megköveteli, hogy az oldal blokkolja az oldalak olvasását, ezt a blokkot az ingyenes oldalak listájából kell kivinni, amikor csak lehetséges. Nem számít, hogy ez az oldal továbbra is bizalmas információkat tartalmazhat, mivel mindent azonnal felülírják. Amikor a köteg nő, a helyzet más. Ebben az esetben üres oldal blokkra van szükség, és a biztonsági szabályok megkövetelik, hogy az oldal minden nullát tartalmazzon. Emiatt egy másik kernel démon, az oldal nullázásának folyamata minimális prioritással működik, törli az oldal tartalmát a szabad oldalak listáján, és elhelyezi azokat a nullázott oldalak listájára. Ha a CPU üresjáratban van, és vannak oldalak az ingyenes oldalak listáján, akkor az oldal nullázó szál zérusolhatja őket, mivel a null oldal sokkal hasznosabb, mint egy ingyenes oldal.

Tehát a memóriakezelés egy nagyon összetett alrendszer, amely sok adatstruktúrával, algoritmussal és heurisztikus módszerekkel rendelkezik. Számos szempontból önszabályozó, de számos olyan mechanizmussal rendelkezik, amelyet egy rendszergazda használhat a rendszer teljesítményének befolyásolására. Hangsúlyozni kell, hogy a valóságos rendszerek memóriakezelése sokkal bonyolultabb, mint egy egyszerű swap algoritmus, például egy órai algoritmus vagy egy öregítő algoritmus.




Kapcsolódó cikkek