Az oldalmemória a virtuális memória rendszerezésének egyik módja , amelyben a virtuális címek oldalról oldalra vannak leképezve a fizikai címekre. 32 bites x86 architektúra esetén a minimális oldalméret 4096 bájt. [egy]
Ezt a módot a legtöbb 32 bites és 64 bites processzor támogatja. Ez a mód szinte minden modern operációs rendszerhez klasszikus, beleértve a Windowst és a UNIX családot is . Egy ilyen mód széleskörű elterjedése a VAX processzorral és a VMS operációs rendszerrel kezdődött az 1970-es évek végétől (egyes források szerint az első megvalósítás). Az x86 családban a támogatás a 386-os generáció óta jelent meg, ami egyben az első 32 bites generáció.
A gépi kódban használt címet, azaz a mutató értékét "virtuális címnek" nevezzük.
A processzor által a buszra helyezett címet "lineáris címnek" nevezik (amit később fizikai címmé alakítanak át).
Az oldaltábla bejegyzés általában a következő információkat tartalmazza:
Az egy táblázatban lévő rekordok száma korlátozott, és a rekord méretétől és az oldalmérettől függ. A táblák többszintű rendszerezését használják, gyakran 2 vagy 3 szintet, néha 4 szintet (64 bites architektúrák esetén).
2 szint esetén az oldalak "katalógusa" használatos, amely az oldaltáblázatok fizikai címére mutató bejegyzéseket tárolja . A táblázatok olyan rekordokat tartalmaznak, amelyek adatoldalakra mutatnak.
Háromszintű szervezés használatakor egy szuperkönyvtár kerül hozzáadásra, amely több könyvtárra mutató bejegyzéseket tartalmaz.
A virtuális cím felső bitjei a címtár bejegyzésének számát, a középső bitek a táblázat bejegyzésének számát, az alsó bitek (az oldalon belüli cím) fordítás nélkül a fizikai címre mennek.
A táblázatbejegyzések formátuma, mérete, oldalmérete és a táblázatok felépítése függ a processzor típusától, és esetenként a működési módjától is.
A történelem során az x86 32 bites PTE-ket, 32 bites virtuális címeket, 4 KB-os oldalakat, 1024 táblabejegyzést és kétszintű táblákat használt. A virtuális cím felső 10 bitje a címtár bejegyzésének száma, a következő 10 a táblázat bejegyzésének száma, az alsó 12 az oldalon belüli cím.
A Pentium Pro-tól kezdve a processzor 4 MB oldalakat támogat. Ahhoz azonban, hogy a rendszer és a rajta futó programok ekkora oldalakat használhassanak, a 4 MB-os oldaltechnológiát (hugepages) megfelelően engedélyezni kell, és az alkalmazást be kell állítani, hogy ekkora oldalakat használjon.
Az x86-os processzor PAE (Physical Address Extension) módban és x86_64 (hosszú mód) módban 64 bites PTE-ket használ (amelyekből valójában nem minden fizikai címbitet használnak, a PAE 36-tól 48-ig bizonyos x86_64-ben), 32 bites virtuális címek, 4 KB-os oldalak, 512 táblabejegyzés, háromszintű táblák négy könyvtárral és négy szuperkönyvtár bejegyzéssel. A virtuális cím felső 2 bitje a szuperkönyvtár bejegyzésének száma, a következő 9 bit a könyvtárban, a következő 9 bit a táblázatban található. A címtár vagy szuperkönyvtár fizikai címe betöltődik a processzor egyik vezérlőregiszterébe .
PAE használatakor 2 MB oldalakat használ a rendszer a 4 MB nagy oldalak helyett. Lásd még: PSE .
Az x86_64 architektúrán 4 kilobájtos (4096 bájt), 2 megabájtos és (egyes AMD64-eknél) 1 gigabájt méretű oldalak használhatók.
Ha a memóriaelérés nem fordítható le a TLB -n keresztül , akkor a processzor mikrokódja hozzáfér az oldaltáblázatokhoz, és onnan próbálja betölteni a PTE-t a TLB-be. Ha a problémák egy ilyen próbálkozás után is fennállnak, akkor a processzor egy speciális megszakítást hajt végre, amelyet „ oldalhibának ” neveznek (oldalhiba). Ennek a megszakításnak a kezelője az operációs rendszer kernel virtuális memória alrendszerében található.
Egyes processzorok (MIPS) nem rendelkeznek mikrokóddal, amely hozzáfér a táblához, és a TLB-ben történt sikertelen keresés után azonnal oldalhibát generál, a tábla elérése és értelmezése már hozzá van rendelve az oldalhiba-kezelőhöz. Ez megfosztja az oldaltáblázatokat attól a követelménytől, hogy hardverszinten megfeleljenek a kemény kódolt formátumnak.
Az oldal meghibásodásának okai ( oldalhiba ):
A kernel hibakezelője betöltheti a kívánt oldalt egy fájlból vagy a swap területről (lásd csere ), létrehozhat egy írásvédett másolatot az oldalról, vagy kivételt hozhat létre (UNIX kifejezéssel - SIGSEGV jel ) ebben a folyamatban.
Minden folyamatnak saját oldaltáblázata van . Az oldalkönyvtár-regiszter minden folyamatkörnyezetkapcsolónál újratöltődik . Szintén vissza kell állítani a TLB azon részét, amely erre a folyamatra vonatkozik.
A legtöbb esetben az OS kernel ugyanabba a címtérbe kerül, mint a folyamatok, és az egyes folyamatok 32 bites címterének felső 1-2 gigabájtja van lefoglalva számára. Ez azért történik, hogy elkerüljük az oldaltáblák közötti váltást a kernelbe való belépéskor és kilépéskor. A rendszermag oldalai a felhasználói mód kódja számára elérhetetlennek vannak jelölve.
A kernelrégió memóriája gyakran minden folyamatnál pontosan ugyanaz, de a kernelrégió egyes alrégiói (például a Windows-régió, ahol a grafikus alrendszer és a videó-illesztőprogram található) eltérőek lehetnek a folyamatok (munkamenetek) különböző csoportjainál.
Mivel a kernelmemória minden folyamatnál azonos, a megfelelő TLB-ket nem kell újratölteni egy folyamatváltás után. Ehhez az optimalizáláshoz az x86 támogatja a "globális" jelzőt a PTE-n.
A kernelben lévő laphiba-kezelő képes kiolvasni az adott oldalt a fájlból.
Ez lehetővé teszi a memória-leképezett fájlok egyszerű megvalósítását. Elméletileg ez ugyanaz, mint a memória lefoglalása és a fájl egy részének beolvasása, azzal a különbséggel, hogy az olvasás implicit módon „igény szerint” történik, ami a hozzáférési kísérlet során bekövetkező laphibával fejeződik ki.
Ennek a megközelítésnek a második előnye - csak olvasható megjelenítés esetén - ugyanaz a fizikai memória megosztása az összes, egy adott fájlt megjelenítő folyamat között (minden folyamatnak saját lefoglalt memóriája van).
A harmadik előny a leképezett oldalak egy részének „eldobása” anélkül, hogy a lefoglalt memóriához szükséges csereterületre cserélnénk őket. Egy oldal ismételt igénye esetén gyorsan újra betölthető a fájlból.
A negyedik előny a lemez gyorsítótárának használata ebben a módban, ami megtakarítást jelent az adatok gyorsítótárból a kívánt régióba másolásakor. A kis méretű műveleteket optimalizáló lemezgyorsítótár előnyei, valamint az azonos adatok ismételt kiolvasása teljes oldalak, de még inkább oldalcsoportok olvasásakor teljesen eltűnnek, a kötelező plusz másolás hátránya viszont megmarad.
A Windows és UNIX operációs rendszerek a memórialeképezett fájlokat futtatható modulok és dinamikus könyvtárak betöltésére használják. A GNU grep segédprogram is használja őket a bemeneti fájl olvasására, valamint számos grafikus alrendszerbe betűkészletek betöltésére.
A lapozható virtuális memória óriási előnye a szegmentálthoz képest a „közeli” és „távoli” mutatók hiánya.
Az ilyen koncepciók jelenléte a programozásban csökkenti a mutató aritmetika alkalmazhatóságát, és óriási problémákhoz vezet az ilyen architektúrákból/-be való kódhordozhatóság terén. Így például a nyílt forráskódú szoftverek jelentős része eredetileg szegmens nélküli, oldalmemóriával rendelkező 32 bites platformokra lett kifejlesztve, és komoly átdolgozás nélkül nem vihető át szegmensarchitektúrákra.
Ezenkívül a szegmensarchitektúrákkal van a legnehezebb probléma az SS != DS, amely az 1990-es évek elején széles körben ismert volt a Windows 16 bites verziói alatti programozásban. Ez a probléma nehézségekhez vezet a dinamikus könyvtárak megvalósításában, mivel saját DS-sel és a jelenlegi folyamat SS-jével rendelkeznek, ami lehetetlenné teszi a "közeli" mutatók használatát. Ezenkívül, ha saját DS van a könyvtárakban, javításokra (MakeProcInstance) van szükség a helyes DS érték beállításához a könyvtárból a hívó alkalmazásba történő visszahívásokhoz.
A memória-leképezett fájlok támogatása megköveteli, hogy az operációs rendszer kernelje támogassa az "egy adott fájl szegmenseit tartalmazó fizikai oldalak halmaza" struktúrát. A fájl memóriába való leképezése úgy történik, hogy a táblázatbejegyzéseket egy adott szerkezetű oldalakra mutató hivatkozásokkal töltik ki.
Teljesen nyilvánvaló, hogy ez a szerkezet egy kész lemezgyorsítótár. A gyorsítótárként való használata megoldja az olvasási/írási fájl és a memórialeképezett fájl közötti koherencia problémáját is.
Így a lemezfájl gyorsítótárazott I/O-útvonalai (FsRtlCopyRead Windows rendszeren és generic_file_read() Linuxon) az adatok másolataiként valósulnak meg egy fájlhoz leképezett fizikai oldalakon.
Ez a gyorsítótár-szervezés az egyetlen a Windowsban, ez az operációs rendszer egyáltalán nem rendelkezik klasszikus blokklemez-gyorsítótárral. A fájlrendszer metaadatait hamis fájlok (IoCreateStreamFileObject) létrehozásával és oldalgyorsítótár létrehozásával tárolják a gyorsítótárban.
Kezdetben az x86 architektúra nem rendelkezett "nem végrehajtható oldal" ( NX ) jelzővel.
A jelző támogatása megjelent az x86 architektúrában a PAE (Physical Address Extension) mód részeként a Pentium 4 generációjában, a biztonsági szakemberek nagy nyomása alatt (lásd az NTBugTraq archívumot). Ennek a jelzőnek a verem- és kupacoldalakon történő beállítása lehetővé teszi a hardveres adatvégrehajtás elleni védelem megvalósítását, ami lehetetlenné teszi számos rosszindulatú program működését, beleértve például az Internet Explorer számos hibájának rosszindulatú kihasználását (2008. decemberi hiba, lásd: MS-ismeretek Az alap nem használható, ha a DEP engedélyezve van ).
A Windows PAE támogatást , amely lehetővé teszi az adatvégrehajtás védelmét , a Windows 2000 rendszerben vezették be, és alapértelmezés szerint engedélyezve van a Windows szerververzióiban, és letiltva az ügyfélverziókban.
A PCI-eszközök, beleértve a videokártya memóriáját is, általában csak a 32 bites címeket támogatják. Ezért a 4 GB-os jelölés alatti fizikai címeket kell megadni. Ez a „rekesznyílás” a látható fizikai memória mennyiségét a 4 GB-os jelzés alatt körülbelül 3,2 GB-ra csökkenti. A fizikai memória fennmaradó részét a vezérlő a 4 GB-os jelölés fölé képezi át.
A 4 GB feletti (azaz körülbelül 3,2 GB-nál nagyobb) memória-hozzáféréshez a vezérlőnek (azaz a lapkakészlet északi hídjának) támogatnia kell ezt a konfigurációt. A modern lapkakészletek (például Intel G33) rendelkeznek ilyen támogatással.
Ehhez szükség van egy BIOS-beállításra is, az úgynevezett memória újrakiosztására , amely a [3,2...4] régiót a [4...4,8]-ra képezi le.
A PAE módon kívüli x86-os processzor 32 bites PTE-ket és fizikai címeket használ, vagyis 4 GB-nál több nem áll rendelkezésére (lásd még a PSE-36- ot a korlátozás egyik módjáról). Így ahhoz, hogy több mint körülbelül 3,2 GB memóriát használhasson egy operációs rendszerben, támogatnia kell a PAE-t. Windows esetén ez a rendszerindítási lehetőség, Linux esetén pedig a kernel felépítése.
Ezenkívül a Microsoft politikai és marketing okokból erőszakkal letiltotta a 4 GB-nál nagyobb fizikai címek támogatását a következő operációs rendszerekben:
A 4 GB-nál nagyobb fizikai címek támogatása a következő verziókban érhető el:
Így a 3,2 GB feletti memória használatához a Windows rendszerben a következőkre van szüksége:
Azonban még a 4 GB-nál nagyobb címeket nem támogató Windows „lecsupaszított” verzióján is érdemes mindig PAE-t használni, mert (lásd fent) a Data Execution Protection ( DEP ) is megköveteli a PAE-t. A PAE engedélyezése egy kis szoftver, például a Windows Mobile emulátor működésképtelenségét okozhatja. A Microsoft hivatalos verziója szerint a 4 GB-os címterület-korlát bevezetése a 36 bites címterület egyes eszközmeghajtók általi hiányzó vagy gyenge támogatásának tudható be, ezt szem előtt kell tartani, hardveres korlátok vagy nem megfelelő illesztőprogramok esetén lehetetlen engedélyezni a PAE-t azokon a verziókon, amelyek támogatják a 4 GB-nál nagyobb fizikai címeket. A PAE engedélyezésének vagy letiltásának lehetősége nem függ az illesztőprogramoktól, de ha néhány régi PCI-eszköz illesztőprogramja nem támogatja megfelelően a fizikai címeket, amelyek nem férnek el 32 bitben, akkor ez az eszköz nem fog megfelelően működni, és az egész számítógépet fagy.
Az operációs rendszerek szempontjai | |||||
---|---|---|---|---|---|
| |||||
Típusok |
| ||||
Sejtmag |
| ||||
Folyamatmenedzsment _ |
| ||||
Memóriakezelés és címzés | |||||
Betöltési és inicializálási eszközök | |||||
Héj | |||||
Egyéb | |||||
Kategória Wikimedia Commons Wikikönyvek Wikiszótár |