XIP ( eng. execute-in-place - execution in place ) on tekniikka, joka tarjoaa mahdollisuuden suorittaa ohjelmakoodia suoraan pysyvästä tallennuslaitteesta , jolla se sijaitsee, lataamatta sitä ensin RAM -muistiin . Sitä käytetään laajalti tietokoneiden alkulataukseen sulautetuissa järjestelmissä RAM-resurssien säästämisen vuoksi, joissain tapauksissa sitä käytetään myös suurissa järjestelmissä . 2010-luvulta lähtien se on korvattu yleisemmällä tekniikalla - DAX [ ⇨ .
Jotta tekniikka toimisi, sen tuki on toteutettava kolmella tasolla: tallennus , käyttöjärjestelmä ja itse suoritettavat ohjelmat .
Ensimmäistä kertaa selkeä tuki teknologialle tallennuslaitteen puolella sekä sen lyhenne ja dekoodaus on kuvattu vuoden 1990 PCMCIA -spesifikaatiossa , ja ne on tarkoitettu käytettäväksi ei-kirjoitettavan laitteen kanssa [1] . Aluksi tekniikka yhdistettiin vain PCMCIA:han ja sen erikoismääritykseen, jossa määriteltiin säännöt binäärikoodin sijoittamiselle sekä sen luku- ja suoritusjärjestys [2] , mutta sellaisena tekniikka otettiin käyttöön myös muihin liitäntöihin ja asemiin, siitä tuli vahvempi kaikille tallennuslaitteille.
Jotta XIP-tila toimisi asemassa, jossa ohjelma sijaitsee, on otettava käyttöön samanlainen liitäntä kuin keskusprosessori käyttää RAM-muistia. Tuki tälle toteutetaan joko väliohjelmistotasolla tai tiedostojärjestelmän avulla . Välityökaluja, jotka tarjoavat työtä XIP-tilassa, on MTD ( Memory Technology Device ) -alijärjestelmä , ja tiedostojärjestelmien, jotka työskentelevät MTD:llä lohkotason yli, on tuettava asianmukaisia kutsuja, jotta XIP toimii. Samanaikaisesti kaikki MTD:n kautta toimivat tiedostojärjestelmät eivät tue XIP:tä, koska monet niistä, jotka alun perin keskittyivät kannettavaan tekniikkaan, toteuttivat pakkaamisen , joten XIP:n toteutus niissä ei ole triviaali, tällaisia tiedostojärjestelmiä ovat JFFS2 , YAFFS2 , LogFS , UBIFS [3] . MTD:llä on kuitenkin myös XIP-yhteensopivat pakkaustiedostojärjestelmät, kuten AXFS , joka korostaa XIP-tilan toimintaa määrittävänä ominaisuutena ( edistynyt XIP-tiedostojärjestelmä ) [3] . Tärkeimmät lohkotason pakkaustiedostojärjestelmät jatkuvaa tallennusta varten, cramfs ja squashfs , eivät tue XIP:tä, mutta cramfs:lle on korjaustiedosto , joka tukee pakkaamatonta XIP:tä, ja useimmat Linux-pohjaiset matkapuhelimet käyttivät tätä cramfs-versiota [3] .
Lohkotason yläpuolella toimivien yleiskäyttöisten tiedostojärjestelmien joukossa on tuki Ext2 :ssa ja Ext3 :ssa ; Ext4 aloitti XIP-tuen siirtämisen, mutta vuonna 2014 se korvattiin yleisemmillä suorakäyttötavoilla - DAX [ [4] .
Huolimatta siitä, että tekniikkaa käytettiin sulautetuissa järjestelmissä, laiteohjelmistoissa ja useissa reaaliaikaisissa käyttöjärjestelmissä kauan ennen 2000 -lukua [5] , yleiskäyttöisten käyttöjärjestelmien puolella tuki otettiin ensimmäisen kerran käyttöön Linux-ytimen versiossa 2.6 . vuonna 2005 [6] .
Vuonna 2006 tekniikkaa tuettiin IBM zSeries -mainframeille , joissa oli tarpeen suorittaa useita erilaisia z/Linux -esiintymiä z/VM - ympäristöstä , jossa oli yhteinen ydin ja jaetut kirjastot , mutta eri tietoalueet [7 ] . Jos vastaava ominaisuus z/OS :lle oli olemassa aiemmin, niin sen suora käyttöönotto Linuxissa vaatisi merkittäviä muutoksia käyttöjärjestelmän ydinkoodiin, joten XIP-tuki siirrettiin ytimen haaraan s390 -arkkitehtuurille ja useita lisäominaisuuksia. tuettiin, mukaan lukien tuki Ext2-puolelle [8] . Lisäksi IBM:n tarpeen tukea keskustietokoneteknologiaa uskotaan olleen XIP:n käyttöönoton liikkeellepaneva voima Linuxissa [9] .
Vuonna 2010 tekniikkaa tuettiin NetBSD :ssä [5] , jossa toteutus osoittautui virtuaalisen muistinhallintaalijärjestelmän ja puskurivälimuistin ominaisuuksien vuoksi suhteellisen yksinkertaiseksi, lisäksi se on tiedostojärjestelmille läpinäkyvä (eli ei vaadi heidän erityistä tukeaan).
Jotta ohjelma toimisi XIP-tilassa, on käännösvaiheessa ilmoitettava mahdollisuudesta erottaa alueet datasegmenteille ja koodisegmenteille (koska datasegmentti on luotava RAM-muistiin, ja koodisegmentin on säilyttävä tiedostojärjestelmässä) . GCC käyttää tähän vaihtoehtoa -msep-data , ja lisäksi XIP-ohjelmat vaativat yleensä -mid-shared-library -vaihtoehdon luodakseen koodia, joka sallii kirjastojen kutsumisen tunnisteella [10] . Minkä tahansa näistä asetuksista asetetaan -fPIC -lippu , joka tarkoittaa sijainnista riippumatonta käännöstä .
Tekniikan päätarkoitus on säästää laitteen RAM-muistia. Merkittävin RAM-muistin säästämisen vaikutus saavutetaan, kun on tarpeen ajaa useita ohjelman esiintymiä, jolloin sama lukumuistilaitteen tila käytetään kaikkien laukaisujen palvelemiseen sen sijaan, että jokaiselle varattaisiin alue RAM-muistista. ilmentymä. Toinen vaikutus on vähentää laitteen virrankulutusta vähentämällä haihtuvan RAM-muistin käyttöjen määrää [11] .
Toinen usein käytetty efekti on nopea käynnistys pysyvästä tallennustilasta, erityisesti riittävän suurelle monoliittiselle Linux-ytimelle, joka perinteisillä tavoilla täytyy aluksi kopioida RAM:iin, XIP:ssä se voidaan suorittaa suoraan asemalta.
Flash-asemia käytettäessä XIP:n suurin vaikutus saavutetaan tavuosoitteisilla laitteilla, kuten NOR flash [5] (kun taas NAND flash , kuten kiintolevyt , ovat lohkoosoitteellisia ja yhden käskyn lukeminen tarkoittaa yleensä 4 kt:n lukemista vähintään 512 tavua). Tämä selittää myös NOR-flashin käytön vain luku -muistissa ja sulautetuissa järjestelmissä huolimatta sen korkeammista kustannuksista ja alhaisemmasta tallennustiheydestä (2010-luvun olosuhteissa).
Toinen vaikutus on kyky käyttää pysyviä tallennuslaitteita jaettuna muistina ohjelmien suorittamiseen ilman isännän päämuistiresursseja ja ohjelma- ja datasegmenttien erottamista, kuten keskuskoneissa on toteutettu .
Vuonna 2014 Linux-ytimen XIP-koodin perusteella (versiosta 3.14 lähtien) otettiin käyttöön yleisempi tekniikka - DAX ( suora pääsy ), joka yhdistää molemmat XIP-ominaisuudet ja tarjoaa tarvittavat kutsut suoraa dataa varten sivuvälimuistin ohittamiseen [9] . Tiedostojärjestelmistä tekniikka toteutettiin ensin Ext4 :lle , myöhemmin XFS -tuki ilmestyi .
Päämotiivina tällaiselle yleistämiselle oli 2010-luvun puolivälissä palvelinjärjestelmien kapasiteetin tavuosoitteisten haihtumattomien NVDIMM ja 3D XPoint -laitteiden ilmestyminen palvelinjärjestelmiin, joiden yhteydessä molempien käynnissä olevien ohjelmakoodien relevanssi siirtymättä pääjärjestelmään muisti ja suora pääsy tietoihin ilman välikopiointia RAM-muistiin. Tällaisiin laitteisiin keskittyneissä tiedostojärjestelmissä, kuten NOVA , PMFS , SCMFS , Aerie [12] , DAX-tuki on otettu käyttöön alusta alkaen ja tätä ominaisuutta pidetään yhtenä niiden avainominaisuuksista.