Virtuális memória - Virtual memory

A virtuális memória a DASD aktív RAM -ját és inaktív memóriáját ötvözi, és így számos szomszédos címet alkot.

A számítástechnika , virtuális memória , vagy virtuális tároló egy memória kezelési technikát, amely egy „idealizált absztrakció a tárolási erőforrások, amelyek ténylegesen rendelkezésre álló egy adott gépen”, ami „azt az illúziót kelti, hogy a felhasználók egy nagyon nagy (fő) memória”.

A számítógép operációs rendszer , egy kombinált hardver és szoftver, térképek memória címek által használt program, az úgynevezett virtuális címek , a fizikai címek a számítógép memóriájában . Fő tároló , ahogy azt egy folyamat vagy feladat, úgy tűnik, mint egy egybefüggő címtartomány vagy gyűjtése szomszédos szegmensek . Az operációs rendszer kezeli a virtuális címtereket és a valódi memória hozzárendelését a virtuális memóriához. A CPU -ban található címfordító hardver, amelyet gyakran memóriakezelő egységnek (MMU) neveznek , automatikusan lefordítja a virtuális címeket fizikai címekké. Az operációs rendszeren belüli szoftverek kibővíthetik ezeket a képességeket, például lemeztárolót használva, hogy olyan virtuális címteret biztosítsanak, amely meghaladhatja a valós memória kapacitását, és így több memóriára utalhat, mint amennyi a számítógépben ténylegesen megtalálható.

A virtuális memória elsődleges előnyei közé tartozik az alkalmazások mentesítése a megosztott memóriaterület kezelése alól, a könyvtárak által használt memória megosztása a folyamatok között, a memória elszigeteltsége miatt megnövelt biztonság, valamint az, hogy fogalmilag több memóriát használhat fel, mint amennyi fizikailag rendelkezésre áll. a lapozás vagy szegmentálás technikája .

Tulajdonságok

A virtuális memória megkönnyíti az alkalmazások programozását azáltal, hogy elrejti a fizikai memória töredezettségét ; a kernelre ruházva a memóriahierarchia kezelésének terhét (megszüntetve annak szükségességét, hogy a program kifejezetten kezelje a fedvényeket ); és amikor minden folyamat a saját dedikált címterületében fut, kiküszöbölve a programkód áthelyezésének vagy a memória elérésének szükségességét relatív címzéssel .

A memória virtualizáció a virtuális memória fogalmának általánosításának tekinthető.

Használat

A virtuális memória a modern számítógépes architektúra szerves része ; A megvalósítások általában hardvertámogatást igényelnek, jellemzően a CPU -ba épített memóriakezelő egység formájában . Bár nem szükséges, az emulátorok és a virtuális gépek hardveres támogatást alkalmazhatnak a virtuális memória megvalósításainak teljesítményének növelésére. A régebbi operációs rendszerek, mint például az 1960-as évek nagyszámítógépei , és a nyolcvanas évek elején-közepén lévő személyi számítógépek (pl. DOS ), általában nem rendelkeznek virtuális memória funkciókkal, bár az 1960-as évek nagyszámítógépei közül kiemelkedő kivételek a következők:

Az 1960 -as és a 70 -es évek elején a számítógép memóriája nagyon drága volt. A virtuális memória bevezetése lehetővé tette a nagy memóriaigényű szoftverrendszerek számára, hogy kevesebb valós memóriájú számítógépen fussanak. Az ebből származó megtakarítások erős ösztönzést adtak arra, hogy minden rendszer virtuális memóriára váltson. A virtuális címterek biztosításának további lehetősége a biztonság és a megbízhatóság újabb szintjét növelte, ezáltal még vonzóbbá téve a virtuális memóriát a piacon.

A legtöbb modern operációs rendszer, amely támogatja a virtuális memóriát, szintén minden folyamatot a saját címterében futtat . Úgy tűnik tehát, hogy minden program kizárólagos hozzáféréssel rendelkezik a virtuális memóriához. Azonban néhány régebbi operációs rendszer (például az OS/VS1 és az OS/VS2 SVS ), sőt a modernek is (például az IBM i ) olyan egycímtérű operációs rendszerek , amelyek minden folyamatot egyetlen virtualizált memóriából álló címtérben futtatnak.

A beágyazott rendszerek és más speciális célú számítógépes rendszerek, amelyek nagyon gyors és/vagy nagyon következetes válaszidőt igényelnek, dönthetnek úgy, hogy nem használják a virtuális memóriát a csökkent determinizmus miatt ; A virtuális memóriarendszerek kiszámíthatatlan csapdákat váltanak ki , amelyek nem kívánt és előre nem látható késleltetéseket okozhatnak a bemenetre adott válaszban, különösen akkor, ha a csapda megköveteli, hogy az adatokat a másodlagos memóriából olvassák be a fő memóriába. A virtuális címek fizikai címekké történő lefordításához használt hardver tipikusan jelentős chipterületet igényel, és nem minden beágyazott rendszerekben használt chip tartalmazza ezt a hardvert, ami egy másik oka annak, hogy néhány ilyen rendszer nem használ virtuális memóriát.

Történelem

Az 1940 -es és 1950 -es években minden nagyobb programnak tartalmaznia kellett az elsődleges és másodlagos tárolás, például az átfedés kezelésének logikáját . A virtuális memóriát ezért nemcsak az elsődleges memória bővítésére vezették be, hanem annak érdekében, hogy a programozók a lehető legkönnyebben használhassák ezt a kiterjesztést. A multiprogramozás és a multitasking lehetővé tétele érdekében sok korai rendszer megosztotta a memóriát több virtuális memória nélküli program között, például a PDP-10 korai modelljei regisztereken keresztül .

Az állítás, hogy a koncepció a virtuális memória először fejlesztette német fizikus Fritz-Rudolf Güntsch a Technische Universität Berlin 1956-ban doktori disszertáció, logikai tervezése digitális számítógép Multiple aszinkron forgó dobokkal és az Automatikus nagy sebességű memória működését nem áll egészen alapos vizsgálatig. A Güntsch által javasolt számítógép (de soha nem épült meg) 10 5 szóból álló címtartománnyal rendelkezik, amely pontosan illeszkedik a dobok 10 5 szavához , azaz a címek valódi címek voltak, és nem volt semmilyen közvetett leképezés, ami a virtuális memória. Amit Güntsch kitalált, az a gyorsítótár-memória egy formája volt , mivel nagysebességű memóriájának néhány kódblokk másolatát vagy a dobból vett adatokat kellett tartalmaznia. Valójában ezt írta (a fordításban idézve): „A programozónak nem kell tiszteletben tartania az elsődleges memória létezését (nem is kell tudnia, hogy létezik), mert csak egyfajta cím ( sic ) létezik, amellyel programozni lehet mintha csak egy tároló lenne. ” Pontosan ez a helyzet a gyorsítótáras memóriával rendelkező számítógépeknél, amelyek egyik legkorábbi kereskedelmi példája az IBM System/360 Model 85 volt. A 85 -ös modellben minden cím valódi cím volt, amely a fő magtárra hivatkozott. A felhasználó számára láthatatlan félvezető gyorsítótár -tároló tárolta a fő tároló részeinek tartalmát az éppen futó programban. Ez pontosan analóg a Güntsch rendszerével, amelyet a teljesítmény javítására, nem pedig a többprogramozással kapcsolatos problémák megoldására terveztek.

Az első igazi virtuális memóriarendszer a Manchesteri Egyetemen volt, amely egyszintű tárolórendszert hozott létre az Atlas Computer részeként . Régen a lapozás mechanizmus feltérképezésére virtuális címeket áll a programozó a valós memória állt 16.384 szó elsődleges alapvető memória egy további 98.304 szavak másodlagos dob memóriát . Az első Atlas 1962 -ben került üzembe, de 1959 -re kifejlesztették a személyhívás működő prototípusait. 1961 -ben a Burroughs Corporation önállóan kiadta az első virtuális memóriával rendelkező kereskedelmi számítógépet, a B5000 -t , szegmentálással, nem pedig lapozással.

Mielőtt a virtuális memóriát a mainstream operációs rendszerekben megvalósíthatták volna, sok problémával kellett foglalkozni. A dinamikus címfordítás drága és nehezen megépíthető speciális hardvert igényelt; a kezdeti implementációk kissé lelassították a memóriához való hozzáférést. Aggodalomra ad okot, hogy a másodlagos tárolást használó új, rendszerszintű algoritmusok kevésbé lesznek hatékonyak, mint a korábban használt alkalmazásspecifikus algoritmusok. 1969 -re véget ért a vita a kereskedelmi számítógépek virtuális memóriájáról; egy IBM által vezetett kutatócsoport David Sayre azt mutatta, hogy a virtuális memória ráépül következetesen dolgozott jobb, mint a legjobb kézi vezérlésű rendszerekben. Az 1970-es években az IBM 370 sorozat, amely a virtuális tárolóra épülő operációs rendszereit futtatta, lehetőséget biztosított az üzleti felhasználók számára, hogy több régebbi rendszert kevesebb, hatékonyabb nagyszámítógépbe telepítsenek, amelyek javították az árat/teljesítményt. Az első miniszámítógép, amely bevezette a virtuális memóriát, a norvég NORD-1 volt ; az 1970 -es években más miniszámítógépek virtuális memóriát alkalmaztak, különösen a VMS -t futtató VAX modellek .

A virtuális memóriát az Intel 80286 processzor védett módjával vezették be az x86 architektúrába , de szegmenscsere technikája rosszul méretezett nagyobb szegmensméretekre. Az Intel 80386 lapozó támogatást vezetett be a meglévő szegmentálási réteg alá, lehetővé téve, hogy az oldalhiba kivétel kettős hiba nélkül láncoljon más kivételekkel . A szegmensleírók betöltése azonban költséges művelet volt, ezért az operációs rendszer tervezői szigorúan a személyhívásra támaszkodtak, nem pedig a lapozás és a szegmentálás kombinációjára.

Paged virtuális memória

Szinte az összes jelenlegi megvalósítása a virtuális memória osztani a virtuális címtartomány a lapok , tömbök összefüggő virtuális memória címeket. A modern rendszerek oldalai általában legalább 4 kilobájt méretűek; a nagy virtuális címtartományokkal vagy valódi memóriával rendelkező rendszerek általában nagyobb oldalméretet használnak.

Oldal táblázatok

Laptáblák használják lefordítani a virtuális címek látható a kérelmet fizikai címek által használt hardver folyamat utasítások; az ilyen hardvert, amely ezt a fordítást kezeli, gyakran memóriakezelő egységnek nevezik . Az oldaltáblázat minden bejegyzésében van egy zászló, amely jelzi, hogy a megfelelő oldal a valós memóriában van -e vagy sem. Ha valós memóriában van, akkor az oldaltábla -bejegyzés tartalmazza azt a valós memóriacímet, amelyen az oldal tárolásra kerül. Ha egy hivatkozás történik egy oldalt a hardver, ha az oldal táblázat bejegyzés lap azt jelzi, hogy jelenleg nem a valós memória, hardver felvet laphiba kivétel hivatkozva a lapozás felügyelő eleme a operációs rendszer .

A rendszerek egy oldaltáblával rendelkezhetnek az egész rendszerre, külön oldalas táblákkal minden alkalmazáshoz és szegmenshez, egy oldaltáblák fájával a nagy szegmensekhez vagy ezek kombinációjával. Ha csak egy oldaltábla van, akkor az egyidejűleg futó különböző alkalmazások egyetlen virtuális címtartomány különböző részeit használják. Ha több oldalas vagy szegmenses tábla van, akkor több virtuális címtér és párhuzamos alkalmazás is létezik, külön oldaltáblákkal, amelyek különböző valós címekre irányítanak át.

Néhány korábbi rendszer kisebb valós méretű memóriát, mint az SDS 940 , használt oldal regiszterek helyett laptáblák a memóriában címfordítás.

Lapozó felügyelő

Az operációs rendszer ezen része oldaltáblákat hoz létre és kezel. Ha a hardver oldalhiba -kivételt hoz létre, a lapozófelügyelő hozzáfér a másodlagos tárolóhoz, visszaadja azt az oldalt, amelynek virtuális címe az oldalhibát okozta, frissíti az oldaltáblákat, hogy tükrözze a virtuális cím fizikai helyét, és közli a fordítási mechanizmussal, hogy indítsa újra a kérést.

Ha az összes fizikai memória már használatban van, akkor a lapozófelügyelőnek ki kell szabadítania egy oldalt az elsődleges tárolóban a kicserélt oldal tárolásához. A felügyelő számos oldalcserélő algoritmus egyikét használja, például a legutóbb használt módszert annak meghatározására, hogy melyik oldalt szabadítsa fel.

Rögzített oldalak

Az operációs rendszerek rögzített memóriaterületekkel rendelkeznek (soha nem cserélték másodlagos tárolóra). Más használt kifejezések zárolt , rögzített vagy vezetékes oldalak. Például a megszakítási mechanizmusok egy sor mutatóra támaszkodnak a kezelőik felé, például az I/O befejezése és az oldalhiba . Ha az ezeket a mutatókat vagy az általuk idézett kódot tartalmazó oldalak oldalazhatóak lennének, a megszakításkezelés sokkal összetettebbé és időigényesebbé válna, különösen az oldalhibák megszakítása esetén. Ezért az oldaltáblázat -struktúrák egy része nem lapozható.

Előfordulhat, hogy egyes oldalakat rövid időre, másokat hosszú ideig rögzítenek, míg mások véglegesen rögzíthetők. Például:

  • A lapozófelügyeleti kódot és a másodlagos tárolóeszközök illesztőprogramjait, amelyeken az oldalak találhatók, állandóan rögzíteni kell, mivel különben a lapozás nem is működik, mert a szükséges kód nem áll rendelkezésre.
  • Az időzítéstől függő komponensek rögzíthetők a különböző lapozási késések elkerülése érdekében.
  • A közvetlen memóriahozzáférést vagy I/O csatornát használó perifériás eszközök által közvetlenül hozzáférhető adatpuffereknek rögzített oldalakon kell tartózkodniuk, amíg az I/O művelet folyamatban van, mert az ilyen eszközök és a buszok , amelyekhez kapcsolódnak, azt várják, hogy találjanak adatpuffereket fizikai memóriacímeken; Függetlenül attól, hogy a buszon van -e memóriakezelő egység az I/O számára , az átvitelt nem lehet leállítani, ha oldalhiba lép fel, majd újraindítani, amikor az oldalhiba feldolgozásra került.

Az IBM System/370 és az azt követő rendszerek operációs rendszereiben a kifejezés "rögzített", és az ilyen oldalak lehetnek hosszú távúak, vagy rövid távúak, vagy nem rögzítettek (azaz lapozhatók). A rendszervezérlő struktúrák gyakran hosszú távú rögzítésűek (a falióra, azaz a másodpercben mért idő, nem pedig az egy másodperc tört része), míg az I/O pufferek általában rövid távúak (általában jelentősen kevesebb, mint a falióra ideje, esetleg több tíz ezredmásodpercig). Valójában az operációs rendszernek van egy speciális lehetősége ezeknek a rövid távú rögzített adatpuffereknek a gyors rögzítésére (a javítás időigényes felügyeleti hívási utasítás igénybevétele nélkül történik ).

Multics a "vezetékes" kifejezést használta. Az OpenVMS és a Windows az ideiglenesen nem lapozhatóvá tett oldalakat (például az I/O puffereket) "zároltnak", és egyszerűen "nem lapozhatónak" nevezi a soha nem lapozható oldalakra. Az Egységes UNIX specifikáció a "zárolt" kifejezést is használja a specifikációban , mint sok más Unix-szerű rendszer kézi oldala . mlock()mlock()

Virtuális-valós működés

Az OS/VS1 és hasonló operációs rendszerekben a rendszermemória egyes részeit "virtuális-valós" módban kezelik, az úgynevezett "V = R". Ebben a módban minden virtuális cím ugyanazon valós címnek felel meg. Ezt az üzemmódot használják megszakítási mechanizmusokhoz, a személyhívó felügyelőhöz és a régebbi rendszerek oldaltábláihoz, valamint nem szabványos I/O kezelést használó alkalmazásprogramokhoz. Például az IBM z/OS-nek 3 módja van (virtuális-virtuális, virtuális-valós és virtuális-rögzített).

Dörömbölés

A lapozás és az oldallopás használatakor „ ütésnek ” nevezett probléma léphet fel, amelyben a számítógép alkalmatlanul sok időt tölt az oldalak átvitelével a háttértárolóba és onnan, ezáltal lelassítva a hasznos munkát. A feladat munkakészlete az a minimális oldalak száma, amelyeknek memóriában kell lenniük ahhoz, hogy hasznosan haladhassanak. A verés akkor következik be, ha nincs elegendő memória az összes aktív program munkakészleteinek tárolására. A valódi memória hozzáadása a legegyszerűbb válasz, de az alkalmazástervezés, az ütemezés és a memóriahasználat javítása segíthet. Egy másik megoldás az aktív feladatok számának csökkentése a rendszeren. Ez csökkenti a valódi memória iránti igényt egy vagy több folyamat teljes munkakészletének kicserélésével.

Szegmentált virtuális memória

Egyes rendszerek, mint például a Burroughs B5500, a lapozás helyett a szegmentálást használják, és a virtuális címtereket változó hosszúságú szegmensekre osztják. A virtuális cím itt egy szegmensszámból és a szegmensen belüli eltolásból áll. Az Intel 80286 opcionálisan támogatja a hasonló szegmentálási sémát, de ritkán használják. A szegmentálás és a lapozás együtt használható, ha az egyes szegmenseket oldalakra osztjuk; az ilyen memóriaszerkezettel rendelkező rendszerek, mint például a Multics és az IBM System/38 , általában a lapozást uralják, a szegmentálás memóriavédelmet biztosít.

Az Intel 80386 és későbbi IA-32 processzorokban a szegmensek 32 bites lineáris, lapozott címtérben találhatók. A szegmensek be- és kihelyezhetők a térből; az ott található oldalak "lapozhatnak" a fő memóriában, és ki is léphetnek belőle, két szintű virtuális memóriát biztosítva; kevesen, ha bármilyen operációs rendszer ezt teszi, hanem csak lapozást használnak. A korai, hardveresen nem támogatott x86 - os virtualizációs megoldások kombinálták a lapozást és a szegmentálást, mert az x86-os lapozás csak két védelmi tartományt kínál, míg a virtuális gépek , a vendég operációs rendszer vagy a vendégalkalmazások kötege három. A személyhívó és szegmentáló rendszerek közötti különbség nem csak a memóriamegosztásban van; a szegmentálás a felhasználói folyamatok számára látható, a memóriamodell szemantikájának részeként. Ezért a memória helyett, amely egyetlen nagy térnek tűnik, több térre van felépítve.

Ennek a különbségnek fontos következményei vannak; a szegmens nem változó hosszúságú oldal vagy a címtér meghosszabbításának egyszerű módja. Az egyszintű memóriamodellt biztosítani képes szegmentálás, amelyben nincs különbség a folyamatmemória és a fájlrendszer között, csak a folyamat potenciális címterébe leképezett szegmensek (fájlok) listájából áll.

Ez nem ugyanaz, mint az olyan hívások által biztosított mechanizmusok, mint az mmap és a Win32 MapViewOfFile, mivel a fájlok közötti mutatók nem működnek, amikor a fájlokat félig tetszőleges helyekre képezi le. A Multics alkalmazásban egy fájl (vagy egy többszegmenses fájlból származó szegmens) a címtérben egy szegmenshez van leképezve, így a fájlok mindig egy szegmenshatáron vannak leképezve. Egy fájl összekapcsolási szakasza tartalmazhat olyan mutatókat, amelyeknél a mutató regisztrációba való betöltése vagy közvetett hivatkozása ezen keresztül csapdát okoz. A fel nem oldott mutató jelzi annak a szegmensnek a nevét, amelyre a mutató hivatkozik, és egy eltolást a szegmensen belül; a csapda kezelője leképezi a szegmenst a címtérbe, a szegmens számát a mutatóba helyezi, megváltoztatja a címke mezőjét a mutatóban, hogy az ne okozzon többé csapdát, és visszatér a kódhoz, ahol a csapda történt, újra végrehajtva a csapdát okozó utasítás. Ez szükségtelenné teszi a kapcsoló teljesen, és akkor működik, ha a különböző folyamatok feltérképezésére ugyanazt a fájlt különböző helyeken a privát címet terek.

Cím tér cseréje

Egyes operációs rendszerek lehetővé teszik a teljes címterek felcserélését , azon kívül, hogy milyen lehetőségeket kínálnak a lapozáshoz és a szegmentáláshoz. Amikor ez megtörténik, az operációs rendszer fájlokat cserél a valós memóriában lévő oldalakra és szegmensekre. A csere során az operációs rendszer visszaolvassa a cserefájlok adatait, de nem olvassa vissza automatikusan azokat az oldalakat, amelyek a kicserélési művelet idején voltak lapozva.

Az IBM MVS , az OS/VS2 Release 2 -től a z/OS -ig, lehetővé teszi a címtér nem cserélhető megjelölését; ezzel nem rögzít egyetlen oldalt sem a címtérben. Ezt a munka időtartama alatt megteheti, ha a program tulajdonságainak táblázatába beírja a jogosult főprogram nevét, és nem cserélhető. Ezenkívül a privilegizált kód ideiglenesen kikapcsolhatatlanná teheti a címteret a SYSEVENT Supervisor Call utasítás (SVC) használatával; a címtér tulajdonságainak bizonyos változásai megkövetelik, hogy az operációs rendszer kicserélje, majd visszacserélje a SYSEVENT TRANSWAP használatával.

A csere nem feltétlenül igényel memóriakezelő hardvert, ha például több feladatot cserélnek ki és ki ugyanazon a tárolóterületen.

Lásd még

Megjegyzések

Hivatkozások

További irodalom

  • Hennessy, John L .; és Patterson, David A .; Számítógép-architektúra, mennyiségi megközelítés ( ISBN  1-55860-724-2 )

Külső linkek