Бинарный интерфейс приложения
В компьютерном программном обеспечении ( двоичный интерфейс приложения 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]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Стандарт двоичной совместимости Intel (iBCS)
- ^ «Итаниум C++ ABI» . (совместим с несколькими архитектурами)
- ^ «Itanium C++ ABI: обработка исключений» . (совместим с несколькими архитектурами)
- ^ Перейти обратно: а б «Резюме ЕАБИ». Двоичный интерфейс встроенного приложения PowerPC: 32-битная реализация (PDF) (изд. версии 1.0). Freescale Semiconductor, Inc., 1 октября 1995 г., стр. 28–30.
- ^ «Debian ARM ускоряется через порт EABI» . Linuxdevices.com. 16 октября 2016 года. Архивировано из оригинала 21 января 2007 года . Проверено 11 октября 2007 г.
- ^ Андрес Кальдерон и Нельсон Кастильо (14 марта 2007 г.). «Почему EABI от ARM имеет значение» . Linuxdevices.com. Архивировано из оригинала 31 марта 2007 года . Проверено 11 октября 2007 г.
- ^ «ABI для архитектуры руки» . Разработчик.arm.com . Проверено 4 февраля 2020 г.
- ^ Эрик Кристофер (11 июня 2003 г.). "Документация mips eabi" . [электронная почта защищена] (список рассылки) . Проверено 19 июня 2020 г.
- ^ «АрмЭабиПорт» . Дебиан Вики .
Строго говоря, и старый, и новый ARM ABI являются подмножествами спецификации ARM EABI, но в повседневном использовании термин «EABI» используется для обозначения нового, описанного здесь, а «OABI» или «old-ABI» — для обозначения старого. один.
Внешние ссылки
[ редактировать ]- Политики/Проблемы двоичной совместимости с C++ — сборник практических правил разработки, позволяющих не нарушать двоичную совместимость между выпусками библиотек.
- Руководство по вызову функций OS X ABI
- Порт Debian ARM EABI
- μClib: 8/16-битный встроенный ABI Motorola
- Двоичный интерфейс приложения AMD64 (x86-64) на Wayback Machine (архивировано 28 мая 2008 г.)
- Двоичный интерфейс приложения (ABI) для архитектуры ARM
- Документация MIPS EABI
- Компиляторы Sun Studio 10 и ABI AMD64 на Wayback Machine (архивировано 14 января 2015 г.) - обзор и сравнение некоторых популярных ABI.
- Руководство по стандартам двоичного интерфейса приложений M•CORE Freescale M·CORE для процессоров