Virtuális memória

A számítástechnikában a virtuális memória mechanizmusát az 1960-as években fejlesztették ki . A szoftver által látott (virtuális) címek on-the-fly fordításának használatán alapul fizikai RAM- címekké . A virtuális memória lehetővé teszi:

Történelmi

Cikk referencia James Kilburn, 1962-ben megjelent, leírja az első számítógép egy lapozható virtuális memória rendszer segítségével dob , mint egy kiterjesztése a központi memória magok a ferrit  : az Atlas .

Ma minden számítógép rendelkezik virtuális memóriakezelési mechanizmussal, kivéve néhány szuperszámítógépet vagy valós idejű fedélzeti rendszert.

Lapozott virtuális memória

Az elv a következő:

Az oldal táblázatot az oldalszám indexálja. Minden sort „bejegyzés az oldaltáblázatnak” nevezünk ( oldaltáblázat bejegyzés , rövidítve PTE), és a keretszámot tartalmazza. Mivel az oldaltábla bárhol elhelyezhető a memóriában, egy speciális regisztráció (PTBR for Page Table Base Register ) tartja a címét.

A gyakorlatban a fordítási mechanizmus az MMU ( memóriakezelő egység ) nevű elektronikus áramkör része, amely az oldaltábla egy részét is tartalmazza, egy gyors regiszterekből álló asszociatív memóriában tárolva . Ezzel elkerülhető, hogy az egyes memória-hozzáférésekhez az oldal tábláját (a memóriában) keresse meg.

Itt van egy valódi példa egy olyan gépre, amelynek processzora virtuális 32 bites címeket generál, így képes elérni 4  GiB memóriát. Az oldal mérete  4KiB . Úgy levezetni, hogy az elmozdulás mező foglalja el a 12  legkevésbé szignifikáns bit , és az oldalszámot területén a 20 legjelentősebb bit.

Vegye figyelembe az egyes PTE-khez tartozó speciális mező jelenlétét. Az egyszerűség kedvéért a mező szélességét egy bitre csökkentettük: érvényességi bitre . Ha ez 0, akkor ez azt jelenti, hogy a keret száma érvénytelen. Ezért el kell sajátítani egy technikát, amely lehetővé teszi a PTE frissítését annak érvényessége érdekében.

Három eset fordulhat elő:

  1. A bejegyzés érvényes: az oldalszámot helyettesíti a fizikai cím kialakításához.
  2. Az oldaltáblázat bejegyzése érvénytelen. Ebben az esetben meg kell találnia egy szabad keretet a RAM-ban, és be kell töltenie a számát az oldaltábla ebbe a bejegyzésébe.
  3. Az oldaltáblázat bejegyzése érvényes, de megfelel a tömegmemóriában szereplő címnek, ahol a keret tartalma található. Egy mechanizmusnak kell visszahoznia ezeket az adatokat, hogy azokat a RAM-ba helyezze.

Igény szerint kiosztás

Az utolsó két esetben egy megszakítás - úgynevezett alapértelmezett oldal (vagy néha oldalhiba , angol fordítás angol oldalhibáról ) jön létre az anyagból, és kezet ad az operációs rendszernek. Ez a felelős azért, hogy a fő memóriában találjon egy rendelkezésre álló keretet, hogy lefoglalja azt az oldalhibáért felelős folyamatnak, és esetleg feltöltse a keret tartalmát a tömegmemóriába mentett tartalommal (jelenleg a merevlemez egy merevlemezen). csere területnek vagy csere területnek nevezett terület ).

Előfordulhat, hogy nincs több szabad keret a fő memóriában: ez akkor 100% -ban elfoglalt. Ebben az esetben egy paginációs algoritmus felelős az „áldozat” oldal kiválasztásáért. Ezt az oldalt vagy azonnal hozzárendelik a kérelmező folyamathoz, vagy először a merevlemezre menti, és az oldal táblában szereplő bejegyzés frissül. Az áldozati oldal nagyon jól tartozhat a helyhiányos folyamathoz.

Az alábbiakban felsorolunk néhány példát algoritmusokra. Az első sor a referencia-láncnak felel meg , vagyis annak sorrendjében, amelyben a folyamat hozzáfér az oldalakhoz. Feltételezzük, hogy a fő memória három képkockából áll . Az áldozat kerete aláhúzva jelenik meg. A kezdeti oldalhibákat nem számoljuk (számuk megegyezik a választott algoritmustól függetlenül).

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 2 2 7
0 0 0 0 4 0 0 0
1 1 3 3 3 1 1
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 2 4 4 4 0 0 0 7 7 7
0 0 0 3 3 3 2 2 2 1 1 1 0 0
1 1 1 0 0 0 3 3 3 2 2 2 1
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7 2 2 4 4 4 0 1 1 1
0 0 0 0 0 0 3 3 3 0 0
1 1 3 3 2 2 2 2 2 7

Viszonylag könnyű lehet megtalálni azokat a kóros eseteket, amelyek használhatatlanná teszik az algoritmust. Például az LRU algoritmus esetében ez egy olyan program lenne, amely 5 oldalt használ egy hurokban egy olyan gépen, amelynek csak 4 kerete van. Először az első 4 keretet fogja egymás után használni (1, 2, 3, 4), majd egy oldalhiba lép fel, és ez az 1. oldal, a legrégebbi betöltés, amely az áldozat lesz. A használt oldalak most (5, 2, 3, 4). Mivel a program ciklusos, az 1. oldalra van szüksége (folytatás az 5. oldalról). Ezúttal az áldozati oldal a 2. oldal, helyébe 1: (5, 1, 3, 4), majd (5, 1, 2, 4), (5, 1, 2, 3) stb. Minden iterációnál egy oldalhiba keletkezik ...

Belady anomáliája

Intuitív módon az oldalkeretek számának növelésével (vagyis a fő memória növelésével) csökkenteni kell az oldalhibák számát.

Bélády „s anomália (1970) egy ellenpélda, amely azt mutatja, hogy ez nem feltétlenül igaz a FIFO algoritmus , sőt az olvasó képes lesz ellenőrizni a maga számára, hogy a szekvencia referenciák (3, 2, 1, 0, 3, 2 , 4, 3, 2, 1, 0, 4) vezet

Megjegyzés  : ennek a kíváncsiságnak a mértékét nem szabad eltúlozni. Ez minden bizonnyal azt mutatja, hogy a FIFO algoritmus általában nem rendelkezik olyan tulajdonsággal, amelyet elvárhatott volna (a memória hozzáadása csökkenti az oldalhibákat), de nem azt mutatja, hogy átlagosan nincs meg . És különben sem a FIFO algoritmust soha nem használják oldalcserére.

Ezenkívül kimutatható, hogy bizonyos oldalcsere- algoritmusok ( például LRU ) nem tartoznak ilyen típusú rendellenességek alá.

Allokációs módszer egy többprogramozott rendszerben

A sértett oldal kiválasztásának fent említett módszerei alkalmazhatók akár egy folyamathoz tartozó oldalakon (akkor beszélünk a „helyi allokációról”), vagy az összes oldalra, tehát az összes memóriára (ebben az esetben az allokációs technika „globálisnak” mondják).

Globális allokációs rendszerben a folyamat végrehajtási ideje példányonként nagyon eltérő lehet, mivel az oldalhibák száma nem függ magától a folyamattól. Másrészt ez a rendszer lehetővé teszi a folyamathoz rendelt vezetők számának fejlődését.

Memória megosztása lapozott rendszerben

Az alábbi ábra három futó folyamatot mutat be, például egy Ed nevű szövegszerkesztőt. A három példány mind ugyanazokon a virtuális címeken található (1, 2, 3, 4, 5). Ez a program két külön memóriaterületet használ: a kódot tartalmazó oldalakat, vagyis a programot leíró utasításokat, és az adatterületet, a szerkesztett fájlt. Elég, ha ugyanazokat a bejegyzéseket tartja az oldaltáblázatban, hogy a három példány megossza a kódterületet. Másrészt az adatoldalaknak megfelelő bejegyzések megkülönböztethetők.

Védelem

Néhány bitvédelem hozzáadódik az oldaltábla minden bejegyzéséhez. Így könnyen meg tudjuk különböztetni a kernelhez rendelt, csak olvasható stb. Oldalakat. Lásd az alábbi példát.

Hatékonyság

Három fő probléma van:

  1. Az oldaltábla mérete: egy olyan architektúra esetében, ahol az oldalszámhoz 20 bit van fenntartva, a táblázat minimum 4 millió memóriát foglal el  (2 20 = 1 millió PTE, mindegyik PTE hossza 4 bájt). Ezt a problémát több oldaltábla felhasználásával oldják meg: az oldalszám mező több részre lesz felosztva, amelyek mindegyike a legalacsonyabb szintű táblázatra való elmozdulást jelzi. A VAX és a Pentiums két szintet támogat, a SPARC három, négy ... A Motorola 680x0 az oldal táblázatot is szegmentálhatja.
  2. Hozzáférési idő: az oldaltábla a memóriában található, kérésenként két memória-hozzáférésre lenne szükség a processzortól. A probléma kiküszöbölése érdekében a leggyakrabban használt bejegyzéseket egy asszociatív memóriában ( gyorsítótárban) tárolják, amelyet TLB for Translation Lookaside Buffer néven hívnak . A processzor minden virtuális címét a TLB keresi; ha van egyezés, akkor a TLB bejegyzést kell használni, ellenkező esetben megszakítást vált ki, és a TLB-t frissíteni kell a memóriában tárolt oldaltáblázat bejegyzéssel, mielőtt a sértő utasítás újraindulna. Minden jelenlegi mikroprocesszor rendelkezik TLB-vel.
  3. Thrashing jelenség : minél jobban növekszik a multiprogramozás sebessége , annál kevesebb oldalt osztanak ki az egyes folyamatok. Egy idő után a rendszer túlterheli, mert túl sok oldalhiba keletkezik. A szemetes jelenség akkor jelenik meg, amikor egy hierarchikus tároló rendszerben az egyik szint túlterhelt. Ez a helyzet például akkor, ha a cache memória túl kicsi. Ezen a ponton a hierarchiában felfelé és lefelé irányuló szüntelen oda-vissza adatok jelentősen csökkentik a számítógép teljesítményét. Ennek a viselkedésnek a csökkentését hardveres erőforrások hozzáadásával (memória hozzáadásával), a több programozási sebesség csökkentésével vagy a folyamatok prioritásának módosításával lehet csökkenteni.

A lokalitás elve

A programok viselkedése nem kaotikus: a program elindul, meghívja azokat a funkciókat (vagy kódrészeket), amelyek viszont másokat hívnak stb. Ezen hívások mindegyike meghatároz egy régiót. Valószínű, hogy a program sok időt tölthet el néhány régión belüli futással: ez a lokalitás elve. Ugyanez az elv alkalmazható az adatokat tartalmazó oldalakra is.

Más szavakkal, egy program gyakran elér egy kis oldalkészletet, és ez az oldalhalmaz az idő múlásával lassan változik.

Ha képesek vagyunk megőrizni a memóriában ezeket a gyakran elérhető tereket, akkor csökkentjük annak esélyét, hogy egy program elkezdjen kukába kezdeni , vagyis azt állítsa, olyan oldalakra hivatkoznak, amelyeket a közelmúltban távolítottak el belőle.

A munkakészlet  : munkaterület

Meghatározhatunk egy paramétert, Δ, amely a folyamat által egy bizonyos időtartam alatt elérett oldalakra történő hivatkozások száma. Az alábbi ábra a munkaterület értékét mutatja két különböző időpontban:

A Δ értékét körültekintően kell megválasztani: túl kicsi nem fedi le a folyamat névleges munkaterületét ; túl nagy, felesleges oldalakat tartalmaz. Ha Δ egyenlő a végtelenséggel, akkor természetesen a teljes programot lefedi.

Egyetlen folyamat esetében grafikusan ábrázolhatjuk, hogy a memória hogyan van hozzárendelve, és vizualizálhatjuk a munkaterületeket:

A „tálcák” azok a területek, ahol nincs oldalhiba: a lefoglalt hely elég nagy ahhoz, hogy tartalmazzon minden olyan keretet, amelyre a folyamatnak viszonylag hosszú ideig szüksége van. Az oldalhibák az átmenet növekvő részében fordulnak elő, míg a memória felszabadul, ha a görbe visszaesik a következő munkaterületre: az egyensúlyi zónára.

Az operációs rendszer feladata az algoritmusok megvalósítása, hogy a Δ értéke optimális legyen, hogy a multiprogramozás és a központi egység használata maximális legyen. Más szavakkal: kerülje a szemetet . Ha az egyes folyamatok munkaterületeinek összege nagyobb, mint a rendelkezésre álló képkockák száma, szükségszerűen összeomlik.

Előkészület

A virtuális memória egyik előnye, hogy képes elindítani a program futtatását, amint az első kódlapja be van töltve a memóriába. Az előkészítés nem csak az első oldalt tölti be, hanem a következő néhányat is, amelyek elérésének valószínűsége nagyon nagy.

Néhány számítógép oldalmérete

Itt bitek, a teljes címezhető terület, a mezők szélessége, az oldalszám és az elmozdulás van feltüntetve.
Gép Címezhető hely Oldal szám mezők "Elmozdulás" mezők
Atlasz 11. 9.
PDP-10 9. 9.
IBM-370 13 vagy 12 11 vagy 12
Pentium Pro 12 vagy 20 20 vagy 12
Alfa 21064 13. 30

Példa

A címek 32 bitre vannak kódolva  (4  GiB a teljes terület) Az oldal mérete 1  KiB (10 bites kódolású  ). Az oldaltáblázat bejegyzései a következő formátumban vannak: 3 3 2 2 2 2 2 1 0 7 3 2 1 0 0 +---+------+-----+---+---+---+------------------------------------------------+ | V | PROT | | N | M | U | NDP | +---+------+-----+---+---+---+------------------------------------------------+

Az M, U, N és NDP mezők csak akkor érvényesek, ha a V bit 1. Ha V értéke 0, akkor az NDP mező tartalmazza a címet azon a merevlemezen, ahol az oldal található.

A PROT mezőt a következőképpen kell értelmezni (a mező értéke binárisan van megadva 4 biten):
Érték Védelem
0000 Nincs hozzáférés
1000 Olvasás a kernel számára
1100 Olvasás / írás a kernel számára
1010 Felhasználó és kernel olvasható
1110 Felhasználó olvas, kernel ír / ír
1111 A felhasználó és a rendszermag olvasása / írása

A 24. bit, N ( N be van rejtve) azt jelenti, hogy az oldal nincs gyorsítótárban, és a rendszernek közvetlenül a memóriába vagy a memóriából kell olvasnia vagy írnia.

Az M ( M odified) bitet a hardver módosítja, ha az oldal tartalma módosul.

Az U bit ( U tilisée) azt jelzi, hogy az oldalt egy folyamat olvasta-e vagy írta-e. Hasznos a többiekkel együtt egy folyamat Munkakészletének meghatározásához (lásd fent).

Szegmentálás

A szegmentálás a memóriának olyan nézetet nyújt, amely összhangban van a felhasználóéval. Valójában ez nem (vagy ritkán!) A memóriát oldalak sorozatának tekinti, sokkal inkább szóközöknek vagy régióknak, amelyeket például egy adott felhasználásra szánnak: egy program kódja, az adatok, a verem, a halmaz. alprogramok, modulok, tömb stb. A szegmentálás ezt a szervezetet tükrözi.

Minden logikai objektumot egy szegmens jelöl. Egy szegmensben a címzés elmozdulás segítségével történik. A forgatónyomaték (szegmens, elmozdulás) egy memóriacímre lesz lefordítva egy két mezőt, határt és alapot tartalmazó szegmenstábla segítségével . Az alap a szegmens kezdő címe, és korlátozza ugyanannak a szegmensnek az utolsó címét:

Töredezettségi probléma

A lapozott rendszereknek belső töredezettségi problémájuk van : az oldal végén helyet vesztegetnek. A szegmentált rendszereknek külső töredezettségi problémájuk van  : a szegmensek közötti terek túl kicsik ahhoz, hogy új töredékeket fogadjanak, így a hely elpazarolható.

Helyre lehet állítani a memória tömörítésével, vagyis a szegmensek mozgatásával - miközben ezeket a módosításokat tükrözzük a szegmensek táblázataiban - úgy, hogy összefüggőek legyenek. Ez a művelet azonban drága.

Szegmensek megosztása

Lehetséges a szegmensek megosztása a folyamatok között, amint az az alábbi ábrán látható, ahol két Ed1 és Ed2 folyamat ugyanazt a kódszegmenst (programot) használja, de különböző méretű diszjunkt adatszegmensekkel rendelkezik.

Védelem szegmentált rendszerben

Ezt a védelmet a szegmens táblázatba felvett további bitek biztosítják, ugyanúgy, mint egy lapozott rendszer esetében.

Példa szegmentált memória architektúrájú mikroprocesszorokra

A legismertebb példa az Intel 8086 és négy regisztere:

A 8086 utódai is tagolódnak:

Vegyes oldalszámú / szegmentált rendszerek

Keverhető a két előző mód:

  1. a szegmentált lapozás, ahol az oldaltábla szegmentálódik. Más szóval, az oldalszámot p a pár (p, d) a virtuális címet kell értelmezni, mint egy szegmens (s, p „). Ez a rendszer megoldja az oldaltáblázat méretével kapcsolatos problémát.
  2. a lapozott szegmentáció , ahol minden szegmens meg van számozva. Más szavakkal, a virtuális cím párjának (s, d) d elmozdulási mezőjét oldalszámként és elmozdulásként (p, d ') értelmezzük.

Csere

Néha szükség van a folyamat összes oldalának vagy szegmensének törlésére a fő memóriából. Ebben az esetben azt mondják, hogy a folyamat felcserélődik , és a hozzá tartozó összes adat a tömegmemóriában lesz tárolva. Ez akkor fordulhat elő hosszú ideig alvó folyamatoknál, amikor az operációs rendszernek memóriát kell rendelnie az aktív folyamatokhoz. Az oldalakat vagy a kódszegmenseket (programot) soha nem cserélik fel , hanem egyszerűen átcsoportosítják, mert megtalálhatók a programnak megfelelő fájlban ( a futtatható fájl ). Emiatt az operációs rendszer tiltja az írásbeli hozzáférést egy futtatható fájlhoz, amely használatban van; szimmetrikusan nem lehet elindítani egy fájlt, amíg azt egy másik folyamat írási hozzáférésként tartja nyitva.

Virtuális memória tömörítés

A virtuális memória tömörítése javíthatja a virtuális memória rendszer teljesítményét. Ez a virtuális memóriakezelési technika adattömörítéssel csökkenti a segédtárhelyre irányuló és onnan érkező személyhívási kérelmek méretét vagy számát .

A virtuális memóriatömörítő rendszerben az oldalakat tömörítik és fizikai memóriában tárolják, általában RAM-ban , vagy tömörítve küldik kiegészítő tárhelyre, például merevlemezre vagy SSD-re . Mindkét esetben, a tartományban virtuális memória, amelynek tartalmát tömörített hozzáférhetetlen, így megkísérli elérni a tömörített oldalak ravaszt oldal hibákat , és visszafordítani a kompressziós folyamatot (kiszedésére háttértároló és a visszaállító). A tömörítési folyamat csökkenti a lapozott adatmennyiséget, és a felszabadított RAM-memóriát visszaküldi a rendelkezésre álló fizikai memóriakészletbe. Abban az esetben, ha a tömörített oldalakat a RAM memóriájában tárolják, a tömörített oldalak nyilván kevesebb helyet foglalnak el, mint az eredeti oldalak. Abban az esetben, ha a tömörített oldalakat kiegészítő tárhelyen tartják, a RAM memória teljesen felszabadul, és a kiegészítő memórián az írási és olvasási műveletek gyorsabbak, mintha az oldalakat nem tömörítették volna.

Hivatkozások

  1. US szabadalmi 5559978

Lásd is

Kapcsolódó cikkek

Bibliográfia