Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

См. Также [ править ]

  • Совместимость двоичного кода
  • Байт-код
  • Сравнение виртуальных машин приложений
  • Символ отладки
  • Интерфейс внешней функции
  • Привязка к языку
  • Непрозрачный указатель
  • PowerOpen Environment
  • Таблица символов
  • SWIG
  • Детали нестабильности Visual C ++ ABI

Ссылки [ править ]

  1. ^ Стандарт двоичной совместимости Intel (iBCS)
  2. ^ "Itanium C ++ ABI" . (совместим с несколькими архитектурами)
  3. ^ «Itanium C ++ ABI: обработка исключений» . (совместим с несколькими архитектурами)
  4. ^ a b "Резюме 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 для архитектуры руки" . Developer.arm.com . Проверено 4 февраля 2020 года .
  8. Эрик Кристофер (11 июня 2003 г.). "Документация по mips eabi" . [email protected] (список рассылки) . Проверено 19 июня 2020 .
  9. ^ "ArmEabiPort" . Debian Wiki . Строго говоря, как старый, так и новый ARM ABI являются подмножествами спецификации ARM EABI, но в повседневном использовании термин «EABI» используется для обозначения описанного здесь нового, а «OABI» или «старый-ABI» - для обозначения старого. один.

Внешние ссылки [ править ]

  • Политики / проблемы двоичной совместимости с C ++  - сборник практических правил разработки, позволяющих не нарушать двоичную совместимость между выпусками библиотек
  • Руководство по вызову функций OS X ABI
  • Перенос Debian ARM EABI
  • μClib: Motorola 8/16-битный встроенный ABI
  • Двоичный интерфейс приложения AMD64 (x86-64) на Wayback Machine (архивировано 28 мая 2008 г.)
  • Двоичный интерфейс приложения (ABI) для архитектуры ARM
  • Документация MIPS EABI
  • Компиляторы Sun Studio 10 и AMD64 ABI на Wayback Machine (архивировано 14 января 2015 г.) - сводка и сравнение некоторых популярных ABI
  • M • основных приложения Бинарных стандарты интерфейса Руководства для Freescale M · CO процессоров