Output dari 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
Namun /sbin/init
executable muncul sebagai 32-bit:
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
Aspek-aspek lain dari sistem tampaknya juga bertentangan dengan hal-hal:
root@debian:~ # echo $HOSTTYPE
i486
root@debian:~ # getconf LONG_BIT
32
linux
64bit
32bit
cpu-architecture
kiiwii
sumber
sumber
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 memilikilm
benderanya, itu adalah CPU 64-bit.Secara default,
uname -m
atauarch
memperlihatkan arsitektur tempat kernel dikompilasi. Linux dapat mengatur "kepribadian" dari suatu proses (denganpersonality
) panggilan sistem. Anda dapat menjalankan subproses dalam kepribadian yang berbeda dengansetarch
perintah;setarch i686 someprogram
ataulinux32 someprogram
menjalankan program yang ditentukan di lingkungan tempatuname -m
pengembaliani686
sementarasetarch amd64 someprogram
ataulinux64 someprogram
menjalankan program yang ditentukan di lingkungan tempatuname -m
pengembalianamd64
.file /sbin/init
memberi tahu Anda apa arsitekturinit
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 arsitekturbash
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 mencetaksizeof(void*)
atausizeof(size_t)
memanggilgetconf
hanya dapat memberikan informasi tentang apa yanggetconf
dianggap sebagai kompiler default.sumber