Interfejs binarny aplikacji - Application binary interface

Wysokopoziomowe porównanie interfejsów API i ABI w jądrze i jądrze do przestrzeni użytkownika
Jądro Linux i biblioteka GNU C zdefiniować API Linux . Po kompilacji pliki binarne oferują ABI. Utrzymanie stabilnego ABI przez długi czas jest ważne dla niezależnych dostawców oprogramowania .

W oprogramowaniu komputerowym , interfejs binarny aplikacji ( ABI ) to interfejs między dwoma modułami programowymi binarnych. Często jeden z tych modułów to biblioteka lub funkcja systemu operacyjnego , a drugi to program uruchamiany przez użytkownika.

ABI definiuje sposób struktury danych lub procedury obliczeniowe są dostępne w kodzie maszynowym , który jest na niskim poziomie, format zależny od sprzętu. W przeciwieństwie do tego API definiuje ten dostęp w kodzie źródłowym , który jest formatem stosunkowo wysokiego poziomu, niezależnym od sprzętu, często czytelnym dla człowieka . Typowym aspektem ABI jest konwencja wywoływania , która określa, w jaki sposób dane są dostarczane jako dane wejściowe lub odczytywane jako dane wyjściowe z procedur obliczeniowych. Przykładem tego są konwencje wywoływania x86 .

Przestrzeganie ABI (które może, ale nie musi być oficjalnie ustandaryzowane) jest zwykle zadaniem kompilatora , systemu operacyjnego lub autora biblioteki. Jednak programista aplikacji może mieć do czynienia z ABI bezpośrednio, pisząc program w różnych językach programowania, a nawet kompilując program napisany w tym samym języku za pomocą różnych kompilatorów.

Opis

ABI obejmują szczegóły, takie jak:

  • zestaw instrukcji procesora (ze szczegółami, takimi jak struktura pliku rejestru, organizacja stosu, typy dostępu do pamięci, ...)
  • rozmiary, układy i wyrównania podstawowych typów danych , do których procesor ma bezpośredni dostęp;
  • konwencja wywoływania , który określa, jak argumenty funkcji są przekazywane, a zwracane wartości pobierane. Na przykład kontroluje:
    • czy wszystkie parametry są przekazywane na stosie, czy niektóre są przekazywane w rejestrach;
    • które rejestry są używane dla jakich parametrów funkcji;
    • i czy pierwszy parametr funkcji przekazany na stos jest odkładany jako pierwszy czy ostatni.
  • jak aplikacja powinna wywołań systemowych do systemu operacyjnego, a jeśli układ bezpośredniego ABI Określa wywołuje raczej niż wywołań procedur zadzwonić układ króćców , numerów wywołań systemowych.
  • aw przypadku kompletnego systemu operacyjnego ABI, binarny format plików obiektowych , bibliotek programów i tak dalej.

Kompletne ABI

Kompletny ABI, taki jak Intel Binary Compatibility Standard (iBCS), pozwala programowi z jednego systemu operacyjnego obsługującego ten ABI działać bez modyfikacji na innym takim systemie, pod warunkiem, że istnieją niezbędne biblioteki współdzielone i spełnione są podobne wymagania.

Inne interfejsy ABI standaryzują szczegóły, takie jak C++ mangling nazw , propagacja wyjątków i konwencja wywoływania między kompilatorami na tej samej platformie, ale nie wymagają zgodności między platformami.

Wbudowane ABI

Osadzony-aplikacja binarna interfejs (EABI) określa standardowe konwencje dotyczące formatów plików , typów danych, zarejestruj użytkowania, rama stos organizacji, a parametr funkcji zdaniu wbudowanego oprogramowania, do stosowania z wbudowanym systemem operacyjnym .

Kompilatory obsługujące EABI tworzą kod obiektowy zgodny z kodem wygenerowanym przez inne tego typu kompilatory, umożliwiając programistom łączenie bibliotek wygenerowanych za pomocą jednego kompilatora z kodem wynikowym wygenerowanym za pomocą innego kompilatora. Deweloperzy piszący własny kod języka asemblerowego mogą również łączyć się z asemblerem generowanym przez zgodny kompilator.

EABI mają na celu optymalizację wydajności przy ograniczonych zasobach systemu wbudowanego. Dlatego EABI pomijają większość abstrakcji, które są tworzone między jądrem a kodem użytkownika w złożonych systemach operacyjnych. Na przykład można uniknąć dynamicznego łączenia, aby umożliwić mniejsze pliki wykonywalne i szybsze ładowanie, stałe użycie rejestru umożliwia bardziej zwarte stosy i wywołania jądra, a uruchamianie aplikacji w trybie uprzywilejowanym umożliwia bezpośredni dostęp do niestandardowego działania sprzętu bez pośredniego wywoływania sterownika urządzenia. Wybór EABI może wpłynąć na wydajność.

Powszechnie stosowane EABI obejmują PowerPC , Arm EABI i MIPS EABI. Specyficzne implementacje oprogramowania, takie jak biblioteka C, mogą nakładać dodatkowe ograniczenia, aby tworzyć bardziej konkretne ABI; jednym z przykładów są GNU OABI i EABI dla ARM, które są podzbiorami ARM EABI .

Zobacz też

Bibliografia

Zewnętrzne linki