stringtranslate.com

Interfaz binaria de la aplicación

Una comparación de alto nivel de las API y ABI en el kernel y del kernel al espacio de usuario
El núcleo de Linux y la biblioteca C de GNU definen la API de Linux . Después de la compilación, los binarios ofrecen una ABI. Mantener esta ABI estable durante un largo tiempo es importante para los ISV .

En el ámbito del software informático , una interfaz binaria de aplicación ( ABI ) es una interfaz entre dos módulos de programa binario. A menudo, uno de estos módulos es una biblioteca o una función del sistema operativo , y el otro es un programa que ejecuta un usuario.

Una ABI define cómo se accede a las estructuras de datos o rutinas computacionales en código de máquina , que es un formato de bajo nivel que depende del hardware. Por el contrario, una interfaz de programación de aplicaciones (API) define este acceso en código fuente , que es un formato de relativamente alto nivel, independiente del hardware y a menudo legible por humanos . Un aspecto común de una ABI es la convención de llamada , que determina cómo se proporcionan los datos como entrada o se leen como salida de las rutinas computacionales. Ejemplos de esto son las convenciones de llamada x86 .

Cumplir con una ABI (que puede estar o no oficialmente estandarizada) suele ser tarea de un compilador , un sistema operativo o un autor de biblioteca. Sin embargo, un programador de aplicaciones puede tener que lidiar con una ABI directamente al escribir un programa en una mezcla de lenguajes de programación, o incluso al compilar un programa escrito en el mismo lenguaje con diferentes compiladores.

Descripción

Los detalles cubiertos por un ABI incluyen lo siguiente:

ABIs completos

Una ABI completa, como el Estándar de compatibilidad binaria de Intel (iBCS), [1] permite que un programa de un sistema operativo que soporte esa ABI se ejecute sin modificaciones en cualquier otro sistema similar, siempre que estén presentes las bibliotecas compartidas necesarias y se cumplan requisitos previos similares.

Las ABI también pueden estandarizar detalles como la alteración de nombres de C++ , [2] la propagación de excepciones , [3] y la convención de llamada entre compiladores en la misma plataforma, pero no requieren compatibilidad entre plataformas.

ABIs integradas

Una interfaz binaria de aplicación integrada (EABI) especifica convenciones estándar para formatos de archivos , tipos de datos, uso de registros, organización del marco de pila y paso de parámetros de función de un programa de software integrado , para su uso con un sistema operativo integrado .

Los compiladores que admiten EABI crean código objeto que es compatible con el código generado por otros compiladores similares, lo que permite a los desarrolladores vincular bibliotecas generadas con un compilador con código objeto generado con otro compilador. Los desarrolladores que escriben su propio código en lenguaje ensamblador también pueden interactuar con el ensamblador generado por un compilador compatible.

Los EABI están diseñados para optimizar el rendimiento dentro de los recursos limitados de un sistema integrado. Por lo tanto, los EABI omiten la mayoría de las abstracciones que se realizan entre el núcleo y el código de usuario en sistemas operativos complejos. Por ejemplo, se puede evitar la vinculación dinámica para permitir ejecutables más pequeños y una carga más rápida, el uso de registros fijos permite pilas y llamadas al núcleo más compactas, y la ejecución de la aplicación en modo privilegiado permite el acceso directo a la operación de hardware personalizada sin la indirección de llamar a un controlador de dispositivo. [4] La elección del EABI puede afectar el rendimiento. [5] [6]

Las EABI ampliamente utilizadas incluyen PowerPC , [4] Arm EABI [7] y MIPS EABI. [8] Las implementaciones de software específicas como la biblioteca C pueden imponer limitaciones adicionales para formar ABI más concretas; un ejemplo es GNU OABI y EABI para ARM, ambos subconjuntos de ARM EABI. [9]

Véase también

Referencias

  1. ^ Estándar de compatibilidad binaria de Intel (iBCS)
  2. ^ "ABI de Itanium C++".(compatible con múltiples arquitecturas)
  3. ^ "Itanium C++ ABI: manejo de excepciones".(compatible con múltiples arquitecturas)
  4. ^ ab "Resumen de EABI". Interfaz binaria de aplicación integrada PowerPC: implementación de 32 bits (PDF) (versión 1.0 ed.). Freescale Semiconductor, Inc. 1 de octubre de 1995. págs. 28-30.
  5. ^ "Debian ARM acelera a través del puerto EABI". Linuxdevices.com. 16 de octubre de 2016. Archivado desde el original el 21 de enero de 2007. Consultado el 11 de octubre de 2007 .
  6. ^ Andrés Calderón y Nelson Castillo (14 de marzo de 2007). "Why ARM's EABI matters". Linuxdevices.com. Archivado desde el original el 31 de marzo de 2007. Consultado el 11 de octubre de 2007 .
  7. ^ "ABI para la arquitectura Arm". Developer.arm.com . Consultado el 4 de febrero de 2020 .
  8. ^ Eric Christopher (11 de junio de 2003). «mips eabi documentation». [email protected] (lista de correo) . Consultado el 19 de junio de 2020 .
  9. ^ "ArmEabiPort". Wiki de Debian . Estrictamente hablando, tanto las ABI de ARM antiguas como las nuevas son subconjuntos de la especificación EABI de ARM, pero en el uso cotidiano el término "EABI" se utiliza para referirse a la nueva que se describe aquí y "OABI" o "old-ABI" para referirse a la antigua.

Enlaces externos