Az XIP ( eng. execute-in-place - execution in place ) egy olyan technológia, amely lehetővé teszi a programkód közvetlen végrehajtását arról a perzisztens tárolóeszközről , amelyen az található, anélkül, hogy először be kellene töltenie a RAM -ba . Széles körben használják számítógépek kezdeti betöltésére , beágyazott rendszerekben a RAM erőforrások megtakarítása miatt, esetenként nagy rendszerekben is használják . A 2010-es évek óta használható bájtcímezhető , nem felejtő memóriával rendelkező kiszolgálói Linux rendszerekbenegy általánosabb technológia váltja fel - DAX .
A technológia működéséhez a támogatását három szinten kell megvalósítani: tárolás , operációs rendszerben és maguk a végrehajtható programok .
Először az 1990-es PCMCIA specifikáció írja le a technológia kifejezett támogatását a tárolóeszköz oldalán, valamint annak rövidítését és dekódolását, és inkább a nem írható eszközökkel való használatra irányul [1] . A technológiát kezdetben csak a PCMCIA-val és annak speciális specifikációjával társították, amely meghatározta a bináris kód elhelyezésének szabályait, illetve az olvasási és végrehajtási sorrendet [2] , de mint ilyen technikát más interfészekre és meghajtókra is implementálták, minden tárolóeszköznél erősebb lett.
Ahhoz, hogy az XIP mód működjön azon a meghajtón, amelyen a program található, a központi processzor által a RAM eléréséhez használt interfészhez hasonló interfészt kell megvalósítani. Ennek támogatása köztes szoftver szinten vagy fájlrendszeren keresztül valósul meg . Az XIP módban munkát biztosító köztes eszközök közé tartozik az MTD ( Memory Technology Device ) alrendszer , illetve a blokkszinten túl MTD-n dolgozó fájlrendszereknek támogatniuk kell a megfelelő hívásokat az XIP működéséhez. Ugyanakkor nem minden MTD-n keresztül működő fájlrendszer támogatja az XIP-et, mivel sok közülük, amelyek eredetileg a hordozható technológiára összpontosítottak, tömörítést valósítottak meg, e tekintetben az XIP megvalósítása bennük nem triviális, ilyen fájlrendszerek közé tartozik a JFFS2 , YAFFS2 , LogFS , UBIFS [3] . Vannak azonban MTD-n működő XIP-képes tömörítési fájlrendszerek, például az AXFS , amely az XIP mód működését emeli ki meghatározó jellemzőként ( advanced XIP filesystem ) [3] . A főbb blokkszintű tömörítési fájlrendszerek az állandó tároláshoz, a cramfs és squashfs nem támogatják az XIP-et, de van egy javítás a tömörítetlen XIP támogatására, és a legtöbb Linux-alapú mobiltelefon a cramfs ezen változatát használta [3] .
A blokkszinten felül futó általános célú fájlrendszerek közül az Ext2 és Ext3 támogatás biztosított ; Az Ext4 megkezdte az XIP támogatás portolását, de 2014-ben felváltották az általánosabb közvetlen elérési módok - DAX [ [4] .
Annak ellenére, hogy a technológiát már jóval a 2000 -es évek előtt használták beágyazott rendszerekben, firmware -ben és számos valós idejű operációs rendszerben [5] , az általános célú operációs rendszerek oldalán a támogatást először a Linux kernel 2.6-os verziójában vezették be. 2005-ben [6] .
2006-ban a technológiát az IBM zSeries nagyszámítógépek támogatták, ahol a z/Linux sok különböző példányának futtatására volt szükség z/VM környezetből , közös kernellel és megosztott könyvtárakkal , de eltérő adatrégiókkal [7 ] . Ha a z/OS -hez korábban is létezett hasonló szolgáltatás , akkor ennek közvetlen megvalósítása Linuxra jelentős változtatásokat igényelne az operációs rendszer kernelkódjában, így az XIP támogatás átkerült a kernel ágba az s390 architektúránál , és számos további szolgáltatás támogatottak, beleértve a támogatást az Ext2 oldalon [8] . Ezen túlmenően az IBM nagyszámítógépes technológiájának támogatása volt a hajtóereje az XIP Linuxon való megvalósításának [9] .
2010-ben a NetBSD [5] támogatására került a technológia , ahol a megvalósítás a virtuális memória-kezelő alrendszer és a puffer-gyorsítótár adottságai miatt viszonylag egyszerűnek bizonyult, ráadásul a fájlrendszerek számára is transzparens (vagyis részükről nem igényel különösebb támogatást).
Ahhoz, hogy a program XIP módban működjön, a fordítási szakaszban tájékoztatni kell az adatszegmensek és a kódszegmensek területeinek elkülönítésének lehetőségéről (mivel az adatszegmenst RAM-ban kell létrehozni, ill. a kódszegmensnek a fájlrendszerben kell maradnia) . A GCC ehhez a -msep-data opciót használja , és emellett az XIP-programok általában a -mid-shared-library opciót igénylik olyan kód létrehozásához, amely lehetővé teszi a könyvtárak azonosítóval történő hívását [10] . Ezen opciók bármelyikének beállítása az -fPIC jelzőt , amely a pozíciófüggetlen fordítást jelenti, beállítja.
A technológia fő célja az eszköz RAM-jának mentése. A RAM megtakarítás legjelentősebb hatása akkor érhető el, ha a program több példányát kell futtatni, ilyenkor az írásvédett memóriaeszközön ugyanazt a helyet használják az összes indítás kiszolgálására, ahelyett, hogy mindegyik RAM-ban egy területet lefoglalnának. példa. Egy másik hatás az eszköz energiafogyasztásának csökkentése az ingadozó RAM-hoz való hozzáférések számának csökkentésével [11] .
Egy másik gyakran használt hatás a perzisztens tárhelyről történő gyors rendszerindítás, különösen egy kellően nagy monolitikus Linux kernel esetén, amelyet hagyományos módon kezdetben a RAM-ba kell másolni, XIP-ben pedig közvetlenül a meghajtóról is végrehajtható.
Flash meghajtók használatakor az XIP legnagyobb hatását a bájtcímű eszközökkel éri el, mint például a NOR flash [5] (míg a NAND flash , a merevlemezekhez hasonlóan blokkcímzett , és egyetlen utasítás elérése általában 4 KB olvasását jelenti, legalább 512 bájt). Ez magyarázza a NOR flash használatát a csak olvasható memóriákban és a beágyazott rendszerekben, annak ellenére, hogy magasabb költsége és alacsonyabb felvételi sűrűsége van (a 2010-es évek körülményei között).
Egy másik hatás az állandó tárolóeszközök megosztott memóriaként való használatának képessége a programok végrehajtásához a gazdagép fő memóriaerőforrásainak használata, valamint a program- és adatszegmensek szétválasztása nélkül, a nagyszámítógépekben megvalósított módon .
2014-ben a Linux kernel XIP kódja alapján (a 3.14-es verziótól) egy általánosabb technológiát vezettek be - a DAX-t ( közvetlen hozzáférés ), amely mindkét XIP képességet egyesíti, és az oldal gyorsítótárát megkerülve biztosítja a szükséges hívásokat a közvetlen adateléréshez [9] . A fájlrendszerek közül a technológiát először Ext4 -re implementálták , később megjelent az XFS támogatása .
Az általánosítás fő motívuma a 2010-es évek közepén a nagy kapacitású, bájtcímezhető, nem felejtő NVDIMM és a 3D XPoint eszközök megjelenése volt szerverrendszerekhez, amelyek kapcsán mindkét futó programkód relevanciája a főre való átvitel nélkül. memória és közvetlen hozzáférés az adatokhoz, közbenső RAM-ba másolás nélkül. Az ilyen eszközökre összpontosító fájlrendszerekben, mint például a NOVA , PMFS , SCMFS , Aerie [12] , a DAX támogatás a kezdetektől fogva megvalósul, és ez a funkció az egyik legfontosabb jellemzőjük.