Tous les processeurs qui prennent en charge le jeu d'instructions x64 (également appelé x86_64 ou amd64) prennent également en charge le jeu d' instructions x86 (également appelé i386 ou i686, qui sont des versions spécifiques à proprement parler de x86). Il en va de même pour ARM A64 (le nouveau jeu d'instructions 64 bits apparaissant dans ARMv8) et A32 (le nom du jeu d'instructions «classique» 32 bits), pour SPARC64 et SPARC , et je crois pour MIPS64 et MIPS . Donc, sur toutes ces familles d'architecture, si un processeur peut exécuter du code 64 bits, il peut également exécuter du code 32 bits.
Le noyau Linux prend en charge l'exécution de code utilisateur 32 bits avec un noyau 64 bits (sur toutes les familles d'architecture mentionnées ci-dessus, je pense). Le noyau doit être homogène (tous 64 bits ou tous 32 bits), et chaque processus doit être homogène, mais vous pouvez avoir un mélange de processus 32 bits et 64 bits sur un noyau 64 bits. L'inverse n'est pas possible: avec un noyau 32 bits, vous ne pouvez pas exécuter des processus 64 bits.
Il s'agit d'un choix de conception sous Linux, motivé par le désir d'exécuter des binaires 32 bits existants sur des installations 64 bits. D'autres variantes Unix ont fait des choix différents: Solaris peut exécuter des programmes 64 bits sur un noyau 32 bits ainsi que l'inverse, tandis qu'OpenBSD ne peut pas exécuter des programmes 32 bits sur un noyau 64 bits.
Vous pouvez obtenir des informations sur le CPU dans /proc/cpuinfo
. Si votre CPU x86 a le lm
drapeau, c'est un CPU 64 bits.
Par défaut, uname -m
ou arch
affiche l'architecture pour laquelle le noyau a été compilé. Linux peut définir la «personnalité» d'un processus (avec personality
) l'appel système. Vous pouvez exécuter un sous-processus dans une personnalité différente avec la setarch
commande; setarch i686 someprogram
ou linux32 someprogram
exécute le programme spécifié dans un environnement où uname -m
retourne i686
tandis que setarch amd64 someprogram
ou linux64 someprogram
exécute le programme spécifié dans un environnement où uname -m
retourne amd64
.
file /sbin/init
vous indique pour quelle architecture le init
programme est compilé. Bien qu'il soit possible de mélanger des exécutables 32 bits et 64 bits dans une installation, généralement tous les programmes OS de base proviennent de la même architecture, car ils sont beaucoup plus faciles à gérer.
$HOSTYPE
est une variable bash et vous indique pour quelle architecture le bash
programme a été compilé.
getconf LONG_BIT
vous permet de savoir si le compilateur C par défaut est configuré pour compiler des programmes 32 bits ou 64 bits. Un test plus précis consiste à compiler et à exécuter un programme qui imprime sizeof(void*)
ou sizeof(size_t)
- appeler getconf
ne peut donner que des informations sur ce qui getconf
pense être le compilateur par défaut.