Anwendung Binärschnittstelle

Ein hochrangiger Vergleich von In-Kernel- und Kernel-zu-Benutzer-APIs und Abis
Das Linux Kernel und GNU C -Bibliothek definiere das Linux -API. Nach der Zusammenstellung bieten die Binärdateien einen ABI. Es ist wichtig, diesen ABI über eine lange Zeit stabil zu halten Isvs.

Im Computer Software, ein Anwendung Binärschnittstelle (Abi) ist ein Schnittstelle Zwischen zwei binären Programmmodulen. Oft ist eines dieser Module a Bibliothek oder Betriebssystem Einrichtung und das andere ist ein Programm, das von einem Benutzer ausgeführt wird.

Ein Abi definiert, wie auf Datenstrukturen oder Rechenroutinen zugegriffen werden Maschinensprache, was ein hardwareabhängiges Format mit niedrigem Niveau ist. Dagegen eine API definiert diesen Zugriff in Quellcode, was ein relativ hochrangiger, hardwareunabhängiger, oft ist für Menschen lesbar Format. Ein häufiger Aspekt eines ABI ist der Konvention anrufen, was bestimmt, wie Daten als Eingabe für Rechenroutinen bereitgestellt oder als Ausgabe gelesen werden. Beispiele hierfür sind die x86 Konventionen anrufen.

Das Festhalten an einem ABI (der offiziell standardisiert werden kann oder nicht) ist normalerweise die Aufgabe von a Compiler, Betriebssystem oder Bibliotheksautor. Ein Anwendungsprogrammierer muss sich jedoch möglicherweise direkt mit einem ABI befassen, wenn ein Programm in einer Mischung aus Programmiersprachen geschrieben oder sogar ein Programm zusammengestellt wird, das in derselben Sprache mit verschiedenen Compilern geschrieben wurde.

Beschreibung

Details, die von einem ABI behandelt werden, enthalten Folgendes:

  • Prozessoranweisungssatz mit Details wie Registerdateistruktur, Stapelorganisation, Speicherzugriffstypen usw.
  • Größen, Layouts und Ausrichtung von grundlegender Datentypen dass der Prozessor direkt zugreifen kann
  • Konvention anrufen, was kontrolliert, wie die Argumente von Funktionen werden übergeben und Rückgabeteile abgerufen; Zum Beispiel steuert es Folgendes:
    • Ob alle Parameter auf den Stapel weitergegeben werden oder einige in Registern übergeben werden
    • Welche Register werden verwendet, für welche Funktionsparameter
    • Ob der erste Funktionsparameter, der den Stapel übergeben hat
  • Wie eine Bewerbung machen sollte Systemaufrufe im Betriebssystem und wenn der ABI direkte Systemaufrufe angibt, anstatt Verfahrensaufrufe zum Systemanruf Stubs, die Systemaufrufnummern
  • Im Falle eines vollständigen Betriebssystems ABI das binäre Format von Objektdateien, Programmbibliotheken usw.

Vollständige Abis

Ein vollständiger ABI, wie der Intel Binary Compatibility Standard (IBCS),[1] Ermöglicht ein Programm von einem Betriebssystem, das diese ABI unterstützt, ohne Änderungen in einem anderen solchen System auszuführen, vorausgesetzt, dass die erforderlichen gemeinsam genutzten Bibliotheken vorhanden sind und ähnliche Voraussetzungen erfüllt sind.

ABIS kann auch Details wie die standardisieren C ++ Name Mangling,[2] Ausnahme Vermehrung,[3] und die Konvention zwischen Compilern auf derselben Plattform aufzurufen, erfordert jedoch keine plattformübergreifende Kompatibilität.

Eingebettete Abis

Ein Binärgrenzfläche für eingebettete Anwendung (EABI) legt Standardkonventionen für an Dateiformate, Datentypen, Registrierungsnutzung, Stapelrahmen Organisations- und Funktionsparameter Weitergabe von a eingebettet Softwareprogramm zur Verwendung mit einem eingebettetes Betriebssystem.

Compiler Das unterstützt die EABI Create Objektcode Dies ist mit Code kompatibel, der von anderen solchen Compilern generiert wird und es Entwicklern ermöglicht, Bibliotheken zu verknüpfen, die mit einem Compiler mit einem mit einem anderen Compiler generierten Objektcode generiert werden. Entwickler schreiben ihre eigenen Montagesprache Der Code kann auch mit der von einem konformen Compiler generierten Assemblierung eine Schnittstelle übernehmen.

EABIs sind so konzipiert, dass sie die Leistung innerhalb der begrenzten Ressourcen eines eingebetteten Systems optimieren können. Daher lässt EBIS die meisten Abstraktionen aus, die zwischen Kernel und Benutzercode in komplexen Betriebssystemen hergestellt werden. Zum Beispiel, Dynamische Verknüpfung Kann vermieden werden, um kleinere ausführbare und schnellere Ladene zu ermöglichen, ermöglicht die Verwendung von fester Registrierung mehr kompakte Stapel und Kernel -Anrufe, und das Ausführen der Anwendung im privilegierten Modus ermöglicht den direkten Zugriff auf benutzerdefinierten Hardware -Betrieb, ohne dass ein Gerätetreiber aufgerufen wird.[4] Die Wahl von EABI kann die Leistung beeinflussen.[5][6]

Weit verbreitete eabis umfassen Powerpc,[4] Arm EABI[7] und MIPS EABI.[8] Spezifische Software -Implementierungen wie die C -Bibliothek können zusätzliche Einschränkungen auferlegen, um konkrete ABIs zu bilden. Ein Beispiel ist das Gnu Oabi und EABI für Arm, die beide Teilmengen des Arm EABI sind.[9]

Siehe auch

Verweise

  1. ^ Intel Binary Compatibility Standard (IBCs)
  2. ^ "Itanium C ++ ABI". (kompatibel mit mehreren Architekturen)
  3. ^ "Itanium C ++ ABI: Ausnahmebehandlung". (kompatibel mit mehreren Architekturen)
  4. ^ a b "EABI -Zusammenfassung". PowerPC Embedded Application Binärschnittstelle: 32-Bit-Implementierung (PDF) (Version 1.0 ed.). Freescale Semiconductor, Inc. 1. Oktober 1995. S. 28–30.
  5. ^ "Debian Arm beschleunigt über EABI Port". LinuxDevices.com. 16. Oktober 2016. archiviert von das Original am 21. Januar 2007. Abgerufen 11. Oktober 2007.
  6. ^ Andrés Calderón und Nelson Castillo (14. März 2007). "Warum Arm's Eabi wichtig ist". LinuxDevices.com. Archiviert von das Original am 31. März 2007. Abgerufen 11. Oktober 2007.
  7. ^ "Abi für die Armarchitektur". Entwickler.arm.com. Abgerufen 4. Februar 2020.
  8. ^ Eric Christopher (11. Juni 2003). "MIPS EABI -Dokumentation". [email protected] (Mailingliste). Abgerufen 19. Juni 2020.
  9. ^ "Armeabiport". Debian Wiki. Streng genommen sind sowohl die alten als auch die neuen Armabis Untergruppen der Arm EABI-Spezifikation eines.

Externe Links