Executați în loc - Execute in place
În informatică , executarea în loc ( XIP ) este o metodă de executare a programelor direct din stocarea pe termen lung, mai degrabă decât copierea în RAM . Este o extensie a utilizării memoriei partajate pentru a reduce cantitatea totală de memorie necesară.
Efectul său general este că textul programului nu consumă nici o memorie scrisă, salvându-l pentru date dinamice și că toate instanțele programului sunt rulate dintr-o singură copie.
Pentru ca acest lucru să funcționeze, trebuie îndeplinite mai multe criterii:
- Depozitarea trebuie să furnizeze o interfață similară cu CPU ca memorie regulată (sau un strat adaptiv trebuie să fie prezent).
- Această interfață trebuie să furnizeze operații de citire suficient de rapide cu un model de acces aleatoriu .
- Sistemul de fișiere , dacă este utilizat, trebuie să expună funcții de mapare adecvate.
- Programul trebuie fie să fie conectat pentru a fi conștient de adresa la care apare stocarea în sistem, fie să fie independent de poziție .
- Programul nu trebuie să modifice datele din imaginea încărcată.
Cerințele de stocare sunt îndeplinite, de obicei, utilizând memoria flash NOR sau EEPROM , care pot fi adresate ca cuvinte individuale pentru operații de citire, deși este puțin mai lent decât memoria RAM de sistem normală în majoritatea configurărilor.
XIP în timpul încărcării de pornire
De obicei, First Stage Boot Loader este un program XIP care este conectat pentru a rula la adresa la care cipurile flash sunt mapate la pornire și conține un program minim pentru a configura memoria RAM a sistemului (care depinde de componente folosit pe plăcile individuale și nu poate fi suficient de generalizat astfel încât secvența corectă să poată fi încorporată în hardware-ul procesorului) și apoi încarcă bootloader-ul din a doua etapă sau nucleul OS în RAM.
În timpul acestei inițializări, este posibil ca memoria înscriibilă să nu fie disponibilă, astfel încât toate calculele trebuie efectuate în registrele procesorului. Din acest motiv, încărcătoarele de pornire din prima etapă tind să fie scrise în limbajul asamblătorului și fac doar minimul pentru a oferi un mediu de execuție normal pentru următorul program. Unele procesoare fie încorporează o cantitate mică de SRAM în cipul în sine, fie permit utilizarea memoriei cache la bord ca memorie RAM, pentru a face acest încărcător de boot din prima etapă mai ușor de scris folosind un limbaj la nivel înalt.
Pentru un kernel sau un bootloader, spațiul de adresă este în general atribuit intern, astfel încât, pentru a utiliza XIP pentru ei, este suficient să instruiască linkerul să plaseze date nemodificabile și modificabile în diferite intervale de adrese și să ofere un mecanism pentru copierea datelor modificabile. în memoria înscrierii înainte de a rula orice cod care presupune că datele pot fi accesate în mod normal. Acest lucru se poate face ca parte a etapei anterioare sau într-un segment de cod mic la începutul programului.
Dacă spațiul de adresă este atribuit extern, cum ar fi într-un program de aplicație care este rulat pe un sistem care nu furnizează memorie virtuală , compilatorul trebuie să acceseze toate datele modificabile adăugând un offset la un pointer la o copie privată a zonei de date. În acest caz, încărcătorul extern este responsabil pentru configurarea zonelor de memorie specifice instanței.
BIOS și UEFI utilizează XIP pentru a inițializa memoria principală .
XIP ca sistem de fișiere
XIP plasează cerințe în sistemele de fișiere care sunt adesea dificil de îndeplinit. În sistemele fără tabel de pagini , întregul fișier trebuie stocat în octeți consecutivi și nu trebuie să fie fragmentat, în timp ce sistemele de fișiere bazate pe bliț au adesea scopul de a distribui date în sectoare ale cipului bliț care au cele mai puține cicluri de ștergere și uniformizează uzura pe cipul, prelungindu-și durata de viață.
Toate aceste complicații și compromiterea vitezei înseamnă că XIP este utilizat în general numai pentru bootloadere în prima etapă sau când RAM este în cantitate extrem de redusă. În special, consolele de jocuri video de a doua până la a patra generație conectează adresa cartușului ROM și magistrala de date la cea a consolei, ceea ce permite (de exemplu) Atari 2600 să funcționeze doar cu 128 de octeți de memorie RAM în IC-ul său de interfață joystick .
Un sistem de fișiere relativ nou pentru Linux, numit AXFS ( Advanced XIP File System ), își propune să depășească unele dintre neajunsurile asociate cu XIP, în special în ceea ce privește execuția în loc a aplicațiilor de spațiu utilizator. De exemplu, face posibilă împărțirea unui fișier binar executabil în „regiuni XIP”, evitând astfel restricționarea fragmentării menționată mai sus.
O implementare NetBSD este, de asemenea, în curs de dezvoltare.
Vezi si
Referințe
- ^ Samsung S3C2416X are SRK încorporat de 64kB disponibil pe magistrala de sistem
- ^ Broadcom BCM2835 folosește memoria cache de nivel 2 ca RAM de încărcare înainte de inițializarea SDRAM
- ^ Brevetul SUA 4485457A , Richard K. Balaska, Robert L. Hunter și Scott S. Robinson, „Sistem de memorie, inclusiv RAM și ROM comutabilă de pagină”, emis 1984-11-27, atribuit CBS Inc.
- ^ Uebayashi, Masao (05.04.2010). „Suport eXecute-In-Place (XIP) pentru NetBSD” (PDF) . BSDCan .
linkuri externe
- Bird, Tim R. (2004). „Metode de îmbunătățire a timpului de pornire în Linux” (PDF) . Simpozionul Ottawa Linux .
- Hulbert, Jared (2008). „Prezentarea sistemului avansat de fișiere XIP” (PDF) . Simpozionul Ottawa Linux .
- Wilshire, Phil (28-08-2002). "Prezentare generală eXecute In Place (XIP)" . uCdot . Arhivat din original în data de 20-10-2007 . Adus 25-09-2007 .
- Wellhöfer, Sören (2009-09-17). „Aplicație eXecute-In-Place (XIP) cu Linux și AXFS” . Adus 17-09-2009 .
- "Configurați Linux pentru XIP (Executare în loc) pe PowerPC" . Inginerie software DENX.
- „Kernel XIP” . Wiki Linux încorporat .
- „Aplicația Linux XIP” . Wiki Linux încorporat .
- "Executați în loc driverul sistemului de fișiere - xip2fs" . Linux pentru S / 390 .