Semua prosesor yang mendukung set instruksi x64 (juga dikenal sebagai x86_64 atau amd64) juga mendukung set instruksi x86 (juga dikenal sebagai i386 atau i686, yang merupakan versi spesifik dari x86). Hal yang sama berlaku untuk ARM A64 (set instruksi 64-bit baru muncul di ARMv8) dan A32 (nama untuk set instruksi 32-bit "klasik"), untuk SPARC64 dan SPARC , dan saya percaya untuk MIPS64 dan MIPS . Jadi pada semua keluarga arsitektur ini, jika sebuah prosesor dapat menjalankan kode 64-bit, ia juga dapat menjalankan kode 32-bit.
Kernel Linux mendukung menjalankan kode userland 32-bit dengan kernel 64-bit (pada semua keluarga arsitektur yang disebutkan di atas, saya kira). Kernel harus homogen (semua 64-bit atau 32-bit), dan setiap proses harus homogen, tetapi Anda dapat memiliki campuran proses 32-bit dan 64-bit pada kernel 64-bit. Kebalikannya tidak mungkin: dengan kernel 32-bit, Anda tidak dapat menjalankan proses 64-bit.
Ini adalah pilihan desain di Linux, dimotivasi oleh keinginan untuk menjalankan binari 32-bit yang ada pada instalasi 64-bit. Varian Unix lain telah membuat pilihan berbeda: Solaris dapat menjalankan program 64-bit pada kernel 32-bit dan sebaliknya, sementara OpenBSD tidak dapat menjalankan program 32-bit pada kernel 64-bit.
Anda dapat memperoleh informasi tentang CPU di /proc/cpuinfo
. Jika CPU x86 Anda memiliki lm
benderanya, itu adalah CPU 64-bit.
Secara default, uname -m
atau arch
memperlihatkan arsitektur tempat kernel dikompilasi. Linux dapat mengatur "kepribadian" dari suatu proses (dengan personality
) panggilan sistem. Anda dapat menjalankan subproses dalam kepribadian yang berbeda dengan setarch
perintah; setarch i686 someprogram
atau linux32 someprogram
menjalankan program yang ditentukan di lingkungan tempat uname -m
pengembalian i686
sementara setarch amd64 someprogram
atau linux64 someprogram
menjalankan program yang ditentukan di lingkungan tempat uname -m
pengembalian amd64
.
file /sbin/init
memberi tahu Anda apa arsitektur init
program ini dikompilasi. Meskipun mungkin untuk menggabungkan executable 32-bit dan 64-bit dalam instalasi, biasanya semua program inti OS berasal dari arsitektur yang sama, karena jauh lebih mudah untuk dikelola.
$HOSTYPE
adalah variabel bash dan memberi tahu Anda apa arsitektur bash
program itu dikompilasi.
getconf LONG_BIT
memberi tahu Anda apakah kompiler C default telah diatur untuk mengkompilasi program 32-bit atau 64-bit. Tes yang lebih tepat adalah dengan mengkompilasi dan menjalankan program yang mencetak sizeof(void*)
atau sizeof(size_t)
memanggil getconf
hanya dapat memberikan informasi tentang apa yang getconf
dianggap sebagai kompiler default.