Todos los procesadores que admiten el conjunto de instrucciones x64 (también conocido como x86_64 o amd64) también admiten el conjunto de instrucciones x86 (también conocido como i386 o i686, que son estrictamente versiones específicas de x86). Lo mismo ocurre con ARM A64 (el nuevo conjunto de instrucciones de 64 bits que aparece en ARMv8) y A32 (el nombre del conjunto de instrucciones "clásico" de 32 bits), para SPARC64 y SPARC , y creo que para MIPS64 y MIPS . Entonces, en todas estas familias de arquitectura, si un procesador puede ejecutar código de 64 bits, también puede ejecutar código de 32 bits.
El kernel de Linux admite la ejecución de código de usuario de 32 bits con un kernel de 64 bits (creo que en todas las familias de arquitectura mencionadas anteriormente). El núcleo debe ser homogéneo (todos de 64 bits o todos de 32 bits), y cada proceso debe ser homogéneo, pero puede tener una mezcla de procesos de 32 bits y 64 bits en un núcleo de 64 bits. Lo contrario no es posible: con un núcleo de 32 bits, no puede ejecutar procesos de 64 bits.
Esta es una opción de diseño en Linux, motivada por el deseo de ejecutar binarios existentes de 32 bits en instalaciones de 64 bits. Otras variantes de Unix han hecho diferentes elecciones: Solaris puede ejecutar programas de 64 bits en un kernel de 32 bits y viceversa, mientras que OpenBSD no puede ejecutar programas de 32 bits en un kernel de 64 bits.
Puede obtener información sobre la CPU en /proc/cpuinfo. Si su CPU x86 tiene la lmbandera, es una CPU de 64 bits.
Por defecto, uname -mo archmuestra la arquitectura para la que se compiló el núcleo. Linux puede establecer la "personalidad" de un proceso (con la personality) llamada al sistema. Puede ejecutar un subproceso en una personalidad diferente con el setarchcomando; setarch i686 someprogramo linux32 someprogramejecuta el programa especificado en un entorno donde uname -mregresa i686while setarch amd64 someprogramo linux64 someprogramejecuta el programa especificado en un entorno donde uname -mregresa amd64.
file /sbin/initle dice para qué arquitectura initse compila el programa. Aunque es posible mezclar ejecutables de 32 bits y 64 bits en una instalación, generalmente todos los programas principales del sistema operativo son de la misma arquitectura, porque es mucho más fácil de administrar.
$HOSTYPEes una variable bash y te dice para qué arquitectura bashse compiló el programa.
getconf LONG_BITle permite saber si el compilador C predeterminado está configurado para compilar programas de 32 bits o de 64 bits. Una prueba más precisa es compilar ay ejecutar un programa que imprima sizeof(void*)o sizeof(size_t): las llamadas getconfsolo pueden proporcionar información sobre lo que getconfcree que es el compilador predeterminado.