ABI

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Application binary interface (ABI) je v informatice označení pro nízkoúrovňové rozhraní. Jde o soubor pravidel, která definují spolupráci na úrovni strojového kódu mezi procesyjádrem operačního systému, procesy a jimi používanými knihovnami nebo mezi součástmi aplikací. ABI umožňuje již zkompilovanému programu fungovat beze změn na všech systémech, které mají kompatibilní ABI.

Rozdíl mezi ABI a API[editovat | editovat zdroj]

Rozdíl mezi ABI a API je ten, že API definuje rozhraní mezi zdrojovým kódem a knihovnami, takže ho používá programátor. Naproti tomu ABI je systémová záležitost, která je používána na úrovni strojového kódu. ABI definuje buď tvůrce operačního systému (firma MicrosoftMicrosoft Windows) nebo tvůrce překladače (překladač GCCLinuxu) nebo tvůrce procesoru (EABI pro RISC procesory).

Charakteristika[editovat | editovat zdroj]

ABI obsahují informace o:

  • velikosti, vzhledu a zarovnání datových typů
  • volací konvence, které kontrolují, jaké parametry jsou funkcím předávány a jaké parametry funkce vrací; například: jestli jsou všechny parametry uloženy na zásobník nebo jestli jsou některé parametry předány do registrů, které registry jsou použité pro které parametry funkcí, a jestli je jako první odebrán ze zásobníku ten parametr, který byl na zásobník uložen jako poslední.
  • jak by měla aplikace provádět systémová volání operačního systému, a jestli ABI upřednostňuje přímá systémová volání před voláním procedur
  • a, v případě ABI celého operačního systému, objektové soubory, programové knihovny a tak dále.

Kompletní ABI, jakým je Intel Binary Compatibility Standard (iBCS), umožňuje programu z jednoho operačního systému podporujícímu toto ABI běžet beze změn na kterémkoli jiném operačním systému za předpokladu, že jsou přítomny potřebné knihovny a jsou splněny určité předpoklady.

Ostatní ABI popisují detaily, např změny názvů v C++[1], šíření výjimek a volací konvence mezi překladači na stejné platformě, ale nevyžadují multiplatformní kompatibilitu.

EABI[editovat | editovat zdroj]

Embedded-application binary interface (EABI) specifikuje konvence formátu souborů, datových typů, použití registrů, organizace zásobníku a předávání parametrů funkcí embedded programů.

Překladače, které podporují EABI, vytvoří objektový kód, který je kompatibilní s kódem vygenerovaným jinými kompilátory, a tím umožňují vývojářům linkovat knihovny vytvořené jedním překladačem k objektovému kódu vygenerovanému jiným překladačem. Vývojáři píšící kód v jazyce symbolických adres mohou využít EABI k interakci se strojovým kódem vytvořeným jiným překladačem.

Hlavními rozdíly mezi EABI a ABI, které se týkají hlavního využití v operačních systémech, jsou, že v aplikačním kódu jsou povoleny privilegované instrukce, dynamické linkování není vyžadováno (někdy dokonce ani není povoleno) a je použita lepší organizace zásobníku za účelem šetření pamětí.

Široce používaná EABI obsahují PowerPC[2], ARM EABI2[3]MIPS EABI.[4]

Výběr EABI může ovlivnit strojový výkon.[5][6]

Reference[editovat | editovat zdroj]

  1. http://mentorembedded.github.io/cxx-abi/
  2. PowerPC EABI (IBM)
  3. ARM EABI2
  4. MIPS EABI
  5. Debian ARM accelerates via EABI port [online]. . Dostupné online. (anglicky)  – neplatný odkaz !
  6. Why ARM's EABI matters [online]. . Dostupné online. (anglicky)  – neplatný odkaz !