Jump to content

Бинарный интерфейс приложения

Высокоуровневое сравнение API и ABI внутри ядра и между ядром и пользовательским пространством.
Ядро Linux и библиотека GNU C определяют API Linux . После компиляции двоичные файлы предлагают ABI. важно поддерживать стабильность этого ABI в течение длительного времени Для независимых поставщиков программного обеспечения .

В компьютерном программном обеспечении ( двоичный интерфейс приложения ABI ) — это интерфейс между двумя двоичными программными модулями. Часто один из этих модулей представляет собой библиотеку или средство операционной системы , а другой — программу, запускаемую пользователем.

ABI определяет, как осуществляется доступ к структурам данных или вычислительным процедурам в машинном коде , который представляет собой низкоуровневый аппаратно-зависимый формат. Напротив, интерфейс прикладного программирования (API) определяет этот доступ в исходном коде , который представляет собой относительно высокоуровневый, аппаратно-независимый, часто удобочитаемый формат. Общим аспектом ABI является соглашение о вызовах , которое определяет, как данные предоставляются в качестве входных данных или считываются как выходные данные вычислительных процедур. Примерами этого являются соглашения о вызовах x86 .

Соблюдение ABI (который может быть официально стандартизирован, а может и не быть) обычно является задачей автора компилятора , операционной системы или библиотеки. Однако программисту приложения, возможно, придется иметь дело непосредственно с ABI при написании программы на нескольких языках программирования или даже при компиляции программы, написанной на одном и том же языке, с помощью разных компиляторов.

Описание

[ редактировать ]

Подробности, охватываемые ABI, включают следующее:

  • Набор инструкций процессора с такими подробностями, как структура файла регистров, организация стека, типы доступа к памяти и т. д.
  • Размеры, макеты и выравнивание основных типов данных , к которым процессор может иметь прямой доступ.
  • Соглашение о вызовах , которое управляет передачей аргументов функций и получением возвращаемых значений; например, он контролирует следующее:
    • Передаются ли все параметры в стеке или некоторые из них передаются в регистрах
    • Какие регистры используются для каких параметров функции
    • Будет ли первый параметр функции, переданный в стек, помещен первым или последним
    • Ответственен ли за очистку стека после вызова функции вызывающий или вызываемый объект.
  • Как приложение должно выполнять системные вызовы операционной системы, и если ABI указывает прямые системные вызовы, а не вызовы процедур для заглушек системных вызовов , номера системных вызовов
  • В случае полной операционной системы ABI используется двоичный формат объектных файлов , программных библиотек и т. д.

Полные ABI

[ редактировать ]

Полный ABI, такой как стандарт Intel Binary Compatibility Standard (iBCS), [1] позволяет программе из одной операционной системы, поддерживающей этот ABI, запускаться без изменений в любой другой такой системе при условии наличия необходимых общих библиотек и выполнения аналогичных предварительных условий.

ABI также могут стандартизировать такие детали, как искажение имен C++ , [2] исключений , распространение [3] и соглашение о вызовах между компиляторами на одной платформе, но не требуют межплатформенной совместимости.

Встроенные ABI

[ редактировать ]

Двоичный интерфейс встроенного приложения (EABI) определяет стандартные соглашения для форматов файлов , типов данных, использования регистров, организации кадров стека и передачи функциональных параметров встроенной программы для использования со встроенной операционной системой .

Компиляторы , поддерживающие EABI, создают объектный код , совместимый с кодом, созданным другими такими компиляторами, что позволяет разработчикам связывать библиотеки, созданные с помощью одного компилятора, с объектным кодом, созданным с помощью другого компилятора. Разработчики, пишущие собственный код на языке ассемблера, также могут взаимодействовать со сборкой, созданной совместимым компилятором.

EABI предназначены для оптимизации производительности в рамках ограниченных ресурсов встроенной системы. Таким образом, EABI опускает большинство абстракций, возникающих между ядром и пользовательским кодом в сложных операционных системах. Например, можно избежать динамического связывания , чтобы обеспечить меньший размер исполняемых файлов и более быструю загрузку, использование фиксированного регистра обеспечивает более компактные стеки и вызовы ядра, а запуск приложения в привилегированном режиме обеспечивает прямой доступ к пользовательским операциям оборудования без косвенного вызова драйвера устройства. [4] Выбор EABI может повлиять на производительность. [5] [6]

Широко используемые EABI включают PowerPC , [4] Рука ЕАБИ [7] и MIPS EABI. [8] Конкретные реализации программного обеспечения, такие как библиотека C, могут налагать дополнительные ограничения для формирования более конкретных ABI; Одним из примеров являются GNU OABI и EABI для ARM, оба из которых являются подмножествами ARM EABI. [9]

См. также

[ редактировать ]
  1. ^ Стандарт двоичной совместимости Intel (iBCS)
  2. ^ «Итаниум C++ ABI» . (совместим с несколькими архитектурами)
  3. ^ «Itanium C++ ABI: обработка исключений» . (совместим с несколькими архитектурами)
  4. ^ Перейти обратно: а б «Резюме ЕАБИ». Двоичный интерфейс встроенного приложения PowerPC: 32-битная реализация (PDF) (изд. версии 1.0). Freescale Semiconductor, Inc., 1 октября 1995 г., стр. 28–30.
  5. ^ «Debian ARM ускоряется через порт EABI» . Linuxdevices.com. 16 октября 2016 года. Архивировано из оригинала 21 января 2007 года . Проверено 11 октября 2007 г.
  6. ^ Андрес Кальдерон и Нельсон Кастильо (14 марта 2007 г.). «Почему EABI от ARM имеет значение» . Linuxdevices.com. Архивировано из оригинала 31 марта 2007 года . Проверено 11 октября 2007 г.
  7. ^ «ABI для архитектуры руки» . Разработчик.arm.com . Проверено 4 февраля 2020 г.
  8. ^ Эрик Кристофер (11 июня 2003 г.). "Документация mips eabi" . [электронная почта защищена] (список рассылки) . Проверено 19 июня 2020 г.
  9. ^ «АрмЭабиПорт» . Дебиан Вики . Строго говоря, и старый, и новый ARM ABI являются подмножествами спецификации ARM EABI, но в повседневном использовании термин «EABI» используется для обозначения нового, описанного здесь, а «OABI» или «old-ABI» — для обозначения старого. один.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4f60157feec3aa380b12dca61e9b41df__1708294920
URL1:https://arc.ask3.ru/arc/aa/4f/df/4f60157feec3aa380b12dca61e9b41df.html
Заголовок, (Title) документа по адресу, URL1:
Application binary interface - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)