Alle Prozessoren, die den x64- Befehlssatz (auch als x86_64 oder amd64 bezeichnet) unterstützen, unterstützen auch den x86- Befehlssatz (auch als i386 oder i686 bezeichnet, bei denen es sich streng genommen um bestimmte Versionen von x86 handelt). Gleiches gilt für ARM A64 (der neue 64-Bit-Befehlssatz in ARMv8) und A32 (der Name für den „klassischen“ 32-Bit-Befehlssatz) für SPARC64 und SPARC , und ich glaube für MIPS64 und MIPS . Wenn in all diesen Architekturfamilien ein Prozessor 64-Bit-Code ausführen kann, kann er auch 32-Bit-Code ausführen.
Der Linux-Kernel unterstützt das Ausführen von 32-Bit-Userland-Code mit einem 64-Bit-Kernel (bei allen oben genannten Architekturfamilien, glaube ich). Der Kernel muss homogen sein (alle 64-Bit oder alle 32-Bit), und jeder Prozess muss homogen sein. Sie können jedoch eine Mischung aus 32-Bit- und 64-Bit-Prozessen auf einem 64-Bit-Kernel verwenden. Das Umgekehrte ist nicht möglich: Mit einem 32-Bit-Kernel können Sie keine 64-Bit-Prozesse ausführen.
Dies ist eine Design-Wahl unter Linux, die durch den Wunsch motiviert ist, vorhandene 32-Bit-Binärdateien auf 64-Bit-Installationen auszuführen. Andere Unix-Varianten haben andere Entscheidungen getroffen: Solaris kann 64-Bit-Programme auf einem 32-Bit-Kernel ausführen und umgekehrt, während OpenBSD keine 32-Bit-Programme auf einem 64-Bit-Kernel ausführen kann.
Sie können erhalten Informationen über die CPU in /proc/cpuinfo
. Wenn Ihre x86-CPU das lm
Flag hat, handelt es sich um eine 64-Bit-CPU.
Standardmäßig uname -m
oder arch
zeigt die Architektur an, für die der Kernel kompiliert wurde. Linux kann die „Persönlichkeit“ eines Prozesses (mit dem personality
) Systemaufruf festlegen . Mit dem setarch
Befehl können Sie einen Unterprozess in einer anderen Persönlichkeit ausführen . setarch i686 someprogram
oder linux32 someprogram
führt das angegebene Programm in einer Umgebung aus, in der uname -m
zurückgegeben wird, i686
während setarch amd64 someprogram
oder linux64 someprogram
das angegebene Programm in einer Umgebung ausgeführt wird, in der uname -m
zurückgegeben wird amd64
.
file /sbin/init
Hier erfahren Sie, für welche Architektur das init
Programm kompiliert wurde. Obwohl es möglich ist, ausführbare 32-Bit- und 64-Bit-Dateien in einer Installation zu mischen, stammen normalerweise alle Kernprogramme des Betriebssystems von derselben Architektur, da die Verwaltung viel einfacher ist.
$HOSTYPE
ist eine Bash-Variable und gibt an, für welche Architektur das bash
Programm kompiliert wurde.
getconf LONG_BIT
Hier erfahren Sie, ob der Standard-C-Compiler zum Kompilieren von 32-Bit- oder 64-Bit-Programmen eingerichtet ist. Ein genauerer Test besteht darin, ein Programm zu kompilieren und auszuführen, das druckt sizeof(void*)
oder sizeof(size_t)
aufruft. Es getconf
kann nur Informationen darüber geben, was getconf
der Standard-Compiler für möglich hält.