La sortie de uname
:
root@debian:~ # uname -a
Linux 5asnb 2.6.32-5-amd64 #1 SMP Mon Jun 13 05:49:32 UTC 2011 x86_64 GNU/Linux
Cependant, l' /sbin/init
exécutable apparaît en 32 bits:
root@debian:~ # file /sbin/init
/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
D'autres aspects du système semblent également contredire les choses:
root@debian:~ # echo $HOSTTYPE
i486
root@debian:~ # getconf LONG_BIT
32
linux
64bit
32bit
cpu-architecture
kiiwii
la source
la source
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 lelm
drapeau, c'est un CPU 64 bits.Par défaut,
uname -m
ouarch
affiche l'architecture pour laquelle le noyau a été compilé. Linux peut définir la «personnalité» d'un processus (avecpersonality
) l'appel système. Vous pouvez exécuter un sous-processus dans une personnalité différente avec lasetarch
commande;setarch i686 someprogram
oulinux32 someprogram
exécute le programme spécifié dans un environnement oùuname -m
retournei686
tandis quesetarch amd64 someprogram
oulinux64 someprogram
exécute le programme spécifié dans un environnement oùuname -m
retourneamd64
.file /sbin/init
vous indique pour quelle architecture leinit
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 lebash
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 imprimesizeof(void*)
ousizeof(size_t)
- appelergetconf
ne peut donner que des informations sur ce quigetconf
pense être le compilateur par défaut.la source