Lapozás

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. október 19-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

A lapozás ( angol  lapozás ; a swap from swap , /swɔp/ kifejezést is használják néha ) a virtuális memória egyik olyan mechanizmusa , amelynek során az egyes memóriatöredékek (általában inaktívak) a RAM -ból másodlagos tárolóba ( merevlemezre vagy egyéb külső meghajtó, például flash memória ), felszabadítja a RAM-ot más aktív memóriatöredékek betöltéséhez. Az ilyen töredékek a modern számítógépekben memórialapok.

A memóriából ideiglenesen kivett oldalak külső tárolóeszközökön mind fájlban, mind pedig a merevlemez speciális partícióján (partíción) tárolhatók, ezeket swap fájlnak, illetve swap partíciónak nevezzük. Ha olyan oldalakat kell eltávolítani a RAM-ból, amelyek megfelelnek a merevlemezen lévő fájl tartalmának (például memórialeképezett fájlok), akkor azokat nem lehet kirakni, hanem egyszerűen törölni kell. Ha ilyen oldalt kérünk, az kiolvasható az eredeti fájlból.

Amikor egy alkalmazás olyan oldalhoz fér hozzá, amely nem található a RAM-ban, PageFault kivétel lép fel. Az esemény kezelőjének ellenőriznie kell, hogy a kért oldalt korábban kicserélték-e, és ha benne van a swap fájlban, akkor vissza kell töltenie a memóriába.

Történelem

Kezdetben a csere alatt egy folyamat kirakodását a RAM egészéből értettük, aminek következtében az inaktív folyamatok teljesen hiányozhattak a RAM-ból. Amikor a folyamat aktiválási feltételei teljesültek, a memóriakezelő visszatöltötte a folyamatképet.

A kifejezés jelentése a 60 -as években megváltozott, amikor megjelent az operációs rendszerekben a virtuális memória támogatása : a csere az egyes oldalak be- és kirakodását kezdte jelenteni. A lapozást először az 1962-ben kiadott Atlas számítógépen hajtották végre.

Oldalhibák

A lapozási mechanizmus fő funkcióit akkor hajtják végre, amikor egy program olyan oldalakat próbál elérni, amelyek jelenleg nincsenek leképezve a fizikai memóriára (RAM). Ezt a helyzetet oldalhibának nevezik . Ezen a ponton az operációs rendszernek át kell vennie az irányítást, és a program számára átlátható módon kell kezelnie az oldalhibát. Tehát az operációs rendszernek szüksége van:

  1. Határozza meg a szükséges oldal helyét a másodlagos tárolóban.
  2. Szerezzen be egy üres oldalkeretet a fizikai memóriába adattárolóként való használatra.
  3. Töltse be a kért adatokat a kapott oldalkeretbe.
  4. Frissítse az oldaltáblázatot , hogy az új oldalkeretre mutasson.
  5. Átlátszó formában adja vissza a vezérlést a programnak az oldalhibát okozó utasítás újbóli végrehajtásával.

Ha üres oldalkeret fogadásakor nincs elég szabad RAM, akkor lefut az oldalcsere algoritmus, amely kiválasztja az egyik használt oldalkeretet kirakásra. Ha a lapozandó oldalkeret dinamikusan lett lefoglalva a program végrehajtása során, vagy a program adatszegmensének része, és a memóriába olvasása óta megváltozott (vagyis ha "piszkos lett"), akkor másodlagos tárhelyre mentve, mielőtt felszabadítanák. Egyébként a RAM-ban lévő oldalkeret tartalma megegyezik a másodlagos tárolóban lévő oldal tartalmával, tehát nem kell kilapozni. Ha egy betöltetlen oldalt a futás későbbi szakaszában érnek el, akkor újabb oldalhiba lép fel, és az oldalkeretet újra kell foglalni, hogy a másodlagos tárolóban lévő oldal tartalma újra betölthető legyen a RAM-ba.

A hatékony működés érdekében a lapozórendszernek azokat az oldalkereteket kell kijelölnie lapozáshoz, amelyekhez a legkevésbé valószínű a közeljövőben hozzáférni. Különféle oldalcsere algoritmusok léteznek . Az operációs rendszerek LRU ( Utoljára használt ) , FIFO ( First In First Out ) algoritmusokat vagy a folyamat munkakészletét figyelembe vevő algoritmusokat használnak [1] .  

A válaszidő további javítása érdekében a lapozórendszerek különböző stratégiákat alkalmazhatnak a következő oldallekérések előrejelzésére. Az ilyen rendszerek megpróbálják betölteni az oldalakat a fő memóriába jóval azelőtt, hogy a program hozzáférne.

Algoritmusok az elavult oldalak meghatározásához

Amikor helyet foglal egy új oldal számára, előfordulhat, hogy a memóriában lévő összes oldalt törölni kell. Az oldalcsere szabályok alapján dönthető el, hogy melyik oldalt kell eltávolítani a memóriából. Az ideális jelölt egy „halott” oldal, amelyre már nincs szüksége senkinek (például egy befejezett folyamatra utal). Ha nincsenek ilyen oldalak a memóriában (vagy nincs belőlük elég), akkor a helyi vagy globális oldalcsere szabálya érvényes:

A leggyakrabban használt keresési feltételek:

Csúszás

A legtöbb program nem használja egyszerre az összes számára lefoglalt memóriát, hanem csak egy részét, amelyet az éppen végrehajtott utasítások és az általuk igényelt adatok határoznak meg. Ha a program megfelel a lokalitás elvének , akkor a felhasznált memóriarész lényegesen kisebb lehet, mint a program számára lefoglalt teljes memória. Ennek a felhasználható résznek a mérete azt tükrözi, hogy a program elért valamilyen állandósult memóriafelhasználási állapotot, és gyakran munkakészletnek nevezik .

A virtuális memóriarendszerek akkor működnek hatékonyan, ha az összes folyamat munkakészleteinek összege nem haladja meg a fizikai RAM méretét. Ebben az esetben az oldalhibák kezeléséhez szükséges időnek nincs nagy hatása a teljesítményre. Előfordulhat azonban, hogy egy nagy adatstruktúrákkal működő program túl nagy munkakészlettel rendelkezik ahhoz, hogy a csererendszer hatékonyan tudjon szolgálni. Ez az oldalhibák folyamatos folyamát és a számítógép teljesítményének drasztikus csökkenését eredményezi. Ezt a helyzetet verésnek nevezik : az oldalak folyamatosan betöltődnek, majd hozzáférnek, ami gyakori oldalhibákat okoz.

A csépelés érdekessége, hogy egy bizonyos kritikus pontig az oldalhibák száma a munkakészlet növekedésével lassan növekszik. E kritikus pont elérése után az oldalhibák száma drámaian megnövekszik, és a feldolgozási teljesítmény nagy részét ezek feldolgozására fordítják.

A csúszás elkerülése érdekében a felhasználó a következő lépéseket teheti:

Hátrányok és leküzdésük lehetősége

A külső tárolóeszközökön (például merevlemezeken) elhelyezett virtuális memóriaadatok esetében, ahogy ez a legtöbbször előfordul, a memóriaelérés lelassul (a véletlen hozzáférésű tárolóeszközökhöz képest).

Nagy valószínűséggel az SSD-meghajtók cseréje (amelyeknek korlátozott számú írási ciklusa van) csökkenti azok élettartamát. De nagyban megnöveli a csere sebességét. Ha az SSD-t nem tervezik örökölni, akkor ez előnyös.

A 32 bites Windows XP, Vista, 7 rendszeren a swap fájl 3 gigabájtnál nagyobb RAM-ot használhat harmadik féltől származó memórialemez-készítő szoftver segítségével .

A Linux egy hasonló mechanizmust támogat, a zswap -ot , amely a swap-ot tömörített formában helyezi el a memóriában.

Fájlok és partíciók cseréje

A virtuális adattárolás megvalósítása a különböző operációs rendszerekben a kernelek és a fájlrendszerek architekturális jellemzői miatt eltérő .

Oldalfájl töredezettsége

Működés közben a swap fájl (lemezpartíció vagy partíción lévő fájl) töredezetté válhat, vagyis az összefüggő virtuális memóriaterületek számos különálló (nem folytonos) régióból állnak majd a swap fájlban. A virtuális memóriában lineárisan elhelyezkedő, de a lapozófájlon szétszórt oldaladatok olvasásakor és írásakor sok időt vesz igénybe a merevlemez-fejek áthelyezése a következő terület elejére. Ez a teljes rendszer teljesítményének csökkenéséhez vezethet a rengeteg lassú I/O kérés miatt.


Swap fájl helyére vonatkozó irányelvek

Biztonság cserefájllal végzett munka során

A swap fájlból (partícióból) gyakran lehetőség nyílik a számítási rendszer működése során használt bizalmas információk kinyerésére. Ezért, amikor titkos adatokkal dolgozik, a swap általában törlődik – például a biztonságos eltávolítási csomag swap segédprogramjával .

Ezenkívül számos olyan program, amely értékes információkat vagy titkosítást használ, szelektíven letilthatja a memóriatöredékek kiszivattyúzását.

Linuxon titkosíthatja a swap fájlt vagy partíciót (például az Ubuntu disztribúción ez automatikusan megtörténik, ha az operációs rendszer telepítése során kiválasztja a felhasználó kezdőkönyvtárának titkosítását). Ez a megoldás némileg megnöveli a processzor terhelését, de garantálja a bizalmas információk biztonságát akár hirtelen áramszünet esetén is.

A lapozófájl használata bizonyos operációs rendszerek számítógépes vírusokkal való megfertőzéséhez vezethet , mivel van egy biztonsági rés . , amely lehetővé teszi a futó programok virtuális memóriába tolását és a futó kód megváltoztatását a merevlemezhez való közvetlen hozzáféréssel.

Unix

A Unix és hasonló operációs rendszerekben a swap rendszerint egy külön merevlemez-partícióra kerül, ami korábban gyorsabbá tette az adatok elérését, mint a swap hely egy normál partíción. A 2.6-os és újabb Linux kerneleken a swap fájl teljesítménye ugyanolyan jó, mint egy swap partícióé [2] [3] .

Példa cserefájl létrehozására GNU/Linux számára:

# dd if=/dev/zero of=/swap bs=1024 count=128K # mkswap /csere # szinkron # csere/csere

Az Oracle Solaris használhatja a ZFS -köteteket swap partícióként:

# zfs létrehoz -V 2G pool/swap # swap -a /dev/zvol/dsk/pool/swap

Amellett, hogy a rendszer fut, egyes GNU/Linux disztribúciók swap partíciót használnak az alvó üzemmód megszervezéséhez ("hibernált", hibernált vagy "felfüggesztés a lemezre" - S4 ACPI mód ). Ennek az üzemmódnak a támogatásához a swap méretét a RAM méretével egyenlőre kell állítani, 10-15% -kal növelve.

Microsoft Windows és Windows NT

A merevlemez cserére szánt területe egy külön fájlban található, melynek neve swap file , swap file (az angol  swap fájlból ). A neve pagefile.sys , és alapértelmezés szerint a rendszer hozza létre a C: meghajtó gyökérkönyvtárában . A jövőben a felhasználó szabályozhatja a lapozófájl méretét és elhelyezését, például a vezérlőpult Rendszer elemével .

A Windows 9x rendszerben a swap fájl neve win386.swp , és a Windows könyvtárában található. A system.ini fájl szerkesztésével azonban áthelyezhető a gyökérkönyvtárba, hogy később megoszthassa a Windows NT-vel.

Ezenkívül a Windows Vista-tól kezdve lehetővé vált egy dedikált swap partíció létrehozása, amely hasonló a UNIX rendszerekben használthoz.

Jegyzetek

  1. Peter J. Denning. Thrashing: annak okai és megelőzése  // Proceedings AFIPS, Fall Joint Computer Conference. - 1968. - T. 33 . – S. 915–922 .
  2. "Jesper Juhl": Re: Hogyan küldjünk szünetet? - kiíratni fagyasztott 64 bites linuxról . LKML (2006. május 29.). Letöltve: 2010. október 28. Archiválva az eredetiből: 2012. június 19.
  3. Andrew Morton: Re: Swap partíció vs swap fájl . LKML. Letöltve: 2010. október 28. Archiválva az eredetiből: 2012. június 19.