Arquitetura do kernel versus arquitetura do SO

1

Qual é a diferença entre a arquitetura do kernel e a arquitetura do sistema operacional? Qual destes é relevante ao tentar descobrir qual arquitetura para compilar os binários?

Pelo que li, é possível instalar um kernel de 64 bits apesar de usar um sistema operacional de 32 bits em algumas distribuições.

O que uname -i imprime, a arquitetura do kernel ou a arquitetura do sistema operacional? Que tal dpkg --print-architecture e arch ?

    
por just.kidding 18.11.2017 / 15:20

1 resposta

1

A arquitetura do kernel é a arquitetura "preferida" do kernel; é a arquitetura dada por uname -m e arch (que são equivalentes). Por exemplo, em um kernel de 64 bits em execução em uma CPU compatível com x86 de 64 bits, será x86_64 .

Em algumas plataformas, o kernel pode executar binários para múltiplas arquiteturas; por exemplo, um kernel x86 de 64 bits também pode executar binários de 32 bits (com duas ABIs, o "antigo" i386 / i686 ABI e x32 ). Ele suporta isso instruindo a CPU a ser executada no modo de 32 bits ao executar esses binários e fornecendo conversão entre as chamadas de sistema de 32 bits e suas chamadas de sistema de 64 bits nativas. Com a adição de emulação de usuário em terra via QEMU, o kernel também pode executar binários para qualquer arquitetura suportada pelo QEMU: por exemplo, armhf em uma CPU Intel de 64 bits. Além dos próprios binários e da camada de tradução necessária, você também precisará das bibliotecas apropriadas, na mesma arquitetura do binário. é isso que o multi-arch ajuda e, antes da multi-arch, a divisão de trabalho /lib32 / /lib64 . (E se você acha que lidar com duas ou três ABIs é muito, dê uma olhada nos sistemas MIPS ...)

Neste contexto, "arquitetura do sistema operacional" pode significar várias coisas: pode ser a arquitetura usada na instalação do sistema ou a arquitetura usada pela maioria dos binários do sistema, etc. Nos derivados do Debian, é a arquitetura do pacote dpkg instalado, conforme fornecido por dpkg --print-architecture .

Quando você cria um binário, a arquitetura mais fácil de segmentar é a arquitetura de destino padrão do seu compilador, supondo que você também tenha as bibliotecas apropriadas. Normalmente, essa será a arquitetura do sistema operacional, seja lá o que isso signifique. A arquitetura do kernel não é particularmente significativa aqui. Nos derivados do Debian, a expansão de multi-arch para cobrir a compilação cruzada significa que está ficando mais fácil construir binários para qualquer arquitetura Debian suportada, em qualquer sistema Debian; mas esse é um caso de uso bastante específico e ainda requer um nível razoável de familiaridade com as restrições de compilação cruzada. Então, fique com a arquitetura padrão ...

uname -i imprime uma variante da arquitetura do kernel, quando imprime qualquer coisa; uname -p -i são desconhecidos lhe dirão mais sobre isso.

    
por 18.11.2017 / 20:17