stringtranslate.com

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

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

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

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

Соблюдение 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] Arm EABI [7] и MIPS EABI. [8] Конкретные реализации программного обеспечения, такие как библиотека C, могут налагать дополнительные ограничения для формирования более конкретных ABI; Одним из примеров являются GNU OABI и EABI для ARM, оба из которых являются подмножествами ARM EABI. [9]

Смотрите также

Рекомендации

  1. ^ Стандарт двоичной совместимости Intel (iBCS)
  2. ^ "Итаниум C++ ABI" .(совместим с несколькими архитектурами)
  3. ^ «Itanium C++ ABI: обработка исключений».(совместим с несколькими архитектурами)
  4. ^ ab "Резюме EABI". Двоичный интерфейс встроенного приложения 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». [email protected] (список рассылки) . Проверено 19 июня 2020 г.
  9. ^ "АрмЕабиПорт". Дебиан Вики . Строго говоря, и старый, и новый ARM ABI являются подмножествами спецификации ARM EABI, но в повседневном использовании термин «EABI» используется для обозначения нового, описанного здесь, а «OABI» или «old-ABI» — для обозначения старого. один.

Внешние ссылки