Interface binária do aplicativo

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

Uma comparação de alto nível de APIs e ABIs in-kernel e kernel-to-userspace
O kernel do Linux e a biblioteca GNU C definem a API do Linux . Após a compilação, os binários oferecem uma ABI. Manter esta ABI estável por muito tempo é importante para ISVs .

Em software de computador , uma interface binária de aplicativo ( ABI ) é uma interface entre dois módulos de programa binários. Muitas vezes, um desses módulos é uma biblioteca ou instalação do sistema operacional , e o outro é um programa que está sendo executado por um usuário.

Uma ABI define como as estruturas de dados ou rotinas computacionais são acessadas em código de máquina , que é um formato de baixo nível e dependente de hardware. Por outro lado, uma API define esse acesso no código-fonte , que é um formato de nível relativamente alto, independente de hardware e geralmente legível por humanos . Um aspecto comum de uma ABI é a convenção de chamada , que determina como os dados são fornecidos como entrada ou lidos como saída de rotinas computacionais. Exemplos disso são as convenções de chamada x86 .

Aderir a uma ABI (que pode ou não ser oficialmente padronizada) geralmente é o trabalho de um compilador , sistema operacional ou autor de biblioteca. No entanto, um programador de aplicativos pode ter que lidar diretamente com uma ABI ao escrever um programa em uma mistura de linguagens de programação ou até mesmo compilar um programa escrito na mesma linguagem com compiladores diferentes.

Descrição

Os detalhes cobertos por uma ABI incluem o seguinte:

  • Conjunto de instruções do processador, com detalhes como estrutura do arquivo de registro, organização da pilha, tipos de acesso à memória, etc.
  • Tamanhos, layouts e alinhamentos de tipos de dados básicos que o processador pode acessar diretamente
  • Convenção de chamada , que controla como os argumentos das funções são passados ​​e os valores de retorno recuperados; por exemplo, ele controla o seguinte:
    • Se todos os parâmetros são passados ​​na pilha ou alguns são passados ​​em registradores
    • Quais registradores são usados ​​para quais parâmetros de função
    • Se o primeiro parâmetro de função passado na pilha é enviado primeiro ou por último
  • Como um aplicativo deve fazer chamadas de sistema para o sistema operacional, e se a ABI especificar chamadas de sistema diretas em vez de chamadas de procedimento para stubs de chamada de sistema , os números de chamada do sistema
  • No caso de um sistema operacional completo ABI, o formato binário de arquivos de objetos , bibliotecas de programas, etc.

ABIs completos

Uma ABI completa, como o Intel Binary Compatibility Standard (iBCS), [1] permite que um programa de um sistema operacional que suporte essa ABI seja executado sem modificações em qualquer outro sistema, desde que as bibliotecas compartilhadas necessárias estejam presentes e pré-requisitos semelhantes sejam realizada.

ABIs também podem padronizar detalhes como o nome C++ mangling , [2] propagação de exceção , [3] e convenção de chamada entre compiladores na mesma plataforma, mas não requerem compatibilidade entre plataformas.

ABIs incorporados

Uma interface binária de aplicativo incorporado (EABI) especifica convenções padrão para formatos de arquivo , tipos de dados, uso de registros, organização de quadros de pilha e passagem de parâmetros de função de um programa de software incorporado , para uso com um sistema operacional incorporado .

Compiladores que suportam o EABI criam código objeto que é compatível com código gerado por outros compiladores, permitindo que os desenvolvedores vinculem bibliotecas geradas com um compilador com código objeto gerado com outro compilador. Os desenvolvedores que escrevem seu próprio código em linguagem assembly também podem interagir com o assembly gerado por um compilador compatível.

Os EABIs são projetados para otimizar o desempenho dentro dos recursos limitados de um sistema embarcado. Portanto, os EABIs omitem a maioria das abstrações feitas entre o kernel e o código do usuário em sistemas operacionais complexos. Por exemplo, a vinculação dinâmica pode ser evitada para permitir executáveis ​​menores e carregamento mais rápido, o uso de registro fixo permite pilhas e chamadas de kernel mais compactas e a execução do aplicativo no modo privilegiado permite acesso direto à operação de hardware personalizada sem a indireta de chamar um driver de dispositivo. [4] A escolha do EABI pode afetar o desempenho. [5] [6]

Os EABIs amplamente utilizados incluem PowerPC , [4] Arm EABI [7] e MIPS EABI. [8] Implementações de software específicas como a biblioteca C podem impor limitações adicionais para formar ABIs mais concretas; um exemplo é o GNU OABI e o EABI para ARM, ambos subconjuntos do ARM EABI . [9]

Veja também

Referências

  1. ^ Padrão de compatibilidade binária Intel (iBCS)
  2. ^ "Itanium C++ ABI" .(compatível com várias arquiteturas)
  3. ^ "Itanium C++ ABI: Tratamento de Exceções" .(compatível com várias arquiteturas)
  4. ^ a b "Resumo EABI". Interface binária do aplicativo incorporado PowerPC: Implementação de 32 bits (PDF) (versão 1.0 ed.). Freescale Semiconductor, Inc. 1 de outubro de 1995. pp. 28–30.
  5. ^ "Debian ARM acelera via porta EABI" . Linuxdevices. com. 16 de outubro de 2016. Arquivado a partir do original em 21 de janeiro de 2007 . Recuperado em 11 de outubro de 2007 .
  6. Andrés Calderón e Nelson Castillo (14 de março de 2007). "Por que o EABI da ARM é importante" . Linuxdevices. com. Arquivado a partir do original em 31 de março de 2007 . Recuperado em 11 de outubro de 2007 .
  7. ^ "ABI para a arquitetura do braço" . Developer.arm.com . Recuperado em 4 de fevereiro de 2020 .
  8. ^ Eric Christopher (11 de junho de 2003). "Mips eabi documentação" . [email protected] (Lista de discussão) . Recuperado em 19 de junho de 2020 .
  9. ^ "ArmEabiPort" . Wiki Debian . Estritamente falando, tanto o antigo quanto o novo ARM ABIs são subconjuntos da especificação ARM EABI, mas no uso diário o termo "EABI" é usado para significar o novo descrito aqui e "OABI" ou "old-ABI" para significar o antigo 1.

Links externos