Binær applikationsgrænseflade - Application binary interface

Image
En sammenligning på højt niveau af API'er og ABI'er i kernen og kernen til brugerområdet
Image
Den Linux-kernen og GNU C-bibliotek definerer Linux API . Efter kompilering tilbyder binærerne et ABI. At holde denne ABI stabil over lang tid er vigtigt for ISV'er .

I computersoftware er en applikations binær grænseflade ( ABI ) en grænseflade mellem to binære programmoduler. Ofte er et af disse moduler et bibliotek eller et operativsystem , og det andet er et program, der køres af en bruger.

En ABI definerer, hvordan datastrukturer eller beregningsrutiner tilgås i maskinkode , som er et hardware-afhængigt format på lavt niveau. I modsætning hertil definerer en API denne adgang i kildekoden , som er et relativt højt niveau, hardwareuafhængigt, ofte menneskeligt læseligt format. Et fælles aspekt af en ABI er opkaldskonventionen , som bestemmer, hvordan data leveres som input til eller læses som output fra, beregningsrutiner. Eksempler på dette er opkaldskonventionerne x86 .

Overholdelse af en ABI (som måske eller måske ikke er officielt standardiseret) er normalt en kompilator , operativsystem eller biblioteksforfatter. En applikationsprogrammerer kan dog have at gøre med et ABI direkte, når han skriver et program i en blanding af programmeringssprog, eller endda kompilerer et program, der er skrevet på samme sprog med forskellige kompilatorer.

Beskrivelse

ABI'er dækker detaljer som:

  • et processorinstruktionssæt (med detaljer som registerfilstruktur, stakorganisation, hukommelsesadgangstyper, ...)
  • størrelser, layout og justeringer af grundlæggende datatyper, som processoren kan få direkte adgang til
  • den kaldekonvention , som styrer, hvordan de argumenter funktioner er gået, og returværdier hentes. For eksempel styrer den:
    • om alle parametre er videregivet på stakken, eller nogle er videregivet i registre;
    • hvilke registre der bruges til hvilke funktionsparametre;
    • og om den første funktionsparameter, der sendes på stakken, skubbes først eller sidst.
  • hvordan en ansøgning skal foretage systemkald til operativsystemet, og hvis ABI angiver direkte systemkald stedet procedure opkald til systemet opkald stubbe , systemet opkaldsnumre.
  • og for et komplet operativsystem ABI, det binære format på objektfiler , programbiblioteker og så videre.

Komplet ABI'er

Et komplet ABI, såsom Intel Binary Compatibility Standard (iBCS), tillader et program fra ét operativsystem, der understøtter, at ABI kan køre uden ændringer på ethvert andet sådant system, forudsat at nødvendige delte biblioteker er til stede, og lignende forudsætninger er opfyldt.

Andre ABI'er standardiserer detaljer, f.eks. Manglende C ++ -navne , spredning af undtagelser og opkaldskonvention mellem kompilatorer på den samme platform, men kræver ikke kompatibilitet på tværs af platforme.

Indlejrede ABI'er

En embedded-application binær grænseflade (EABI) angiver standardkonventioner for filformater , datatyper, registerbrug, stakrammeorganisation og funktionsparameteroverførsel af et integreret softwareprogram til brug med et integreret operativsystem .

Kompilatorer, der understøtter EABI, opretter objektkode, der er kompatibel med kode genereret af andre sådanne kompilatorer, hvilket gør det muligt for udviklere at linke biblioteker genereret med en kompilator med objektkode genereret med en anden kompilator. Udviklere, der skriver deres egen samlingssprogkode , kan også interagere med samling genereret af en kompatibel kompiler.

EABI'er er designet til at optimere til ydeevne inden for de begrænsede ressourcer i et integreret system. Derfor udelader EABI'er de fleste abstraktioner, der foretages mellem kerne og brugerkode i komplekse operativsystemer. For eksempel kan dynamisk linkning undgås for at tillade mindre eksekverbare filer og hurtigere indlæsning, fast registerbrug muliggør mere kompakte stakke og kerneopkald, og kørsel af applikationen i privilegeret tilstand giver direkte adgang til brugerdefineret hardwaredrift uden indirekte opkald til en enhedsdriver. Valget af EABI kan påvirke ydeevnen.

Udbredte EABI'er omfatter PowerPC , Arm EABI og MIPS EABI. Specifikke softwareimplementeringer som C -biblioteket kan pålægge yderligere begrænsninger for at danne mere konkrete ABI'er; et eksempel er GNU OABI og EABI for ARM, som begge er undersæt af ARM EABI.

Se også

Referencer

eksterne links