Tất cả các bộ xử lý hỗ trợ tập lệnh x64 (còn được gọi là x86_64 hoặc amd64) cũng hỗ trợ tập lệnh x86 (còn được gọi là i386 hoặc i686, là các phiên bản cụ thể của x86). Điều tương tự cũng xảy ra với ARM A64 (bộ hướng dẫn 64 bit mới xuất hiện trong ARMv8) và A32 (tên của bộ hướng dẫn 32-bit classic classic), cho SPARC64 và SPARC , và tôi tin cho MIPS64 và MIPS . Vì vậy, trên tất cả các họ kiến trúc này, nếu bộ xử lý có thể chạy mã 64 bit, thì nó cũng có thể chạy mã 32 bit.
Nhân Linux hỗ trợ chạy mã vùng người dùng 32 bit với nhân 64 bit (tôi nghĩ rằng trên tất cả các họ kiến trúc được đề cập ở trên). Hạt nhân phải đồng nhất (tất cả 64 bit hoặc tất cả 32 bit) và mỗi quy trình phải đồng nhất, nhưng bạn có thể có hỗn hợp các quy trình 32 bit và 64 bit trên nhân 64 bit. Điều ngược lại là không thể: với kernel 32 bit, bạn không thể chạy các tiến trình 64 bit.
Đây là một lựa chọn thiết kế trong Linux, được thúc đẩy bởi mong muốn chạy các tệp nhị phân 32 bit hiện có trên các bản cài đặt 64 bit. Các biến thể Unix khác đã đưa ra các lựa chọn khác nhau: Solaris có thể chạy các chương trình 64 bit trên kernel 32 bit cũng như cách khác, trong khi OpenBSD không thể chạy các chương trình 32 bit trên kernel 64 bit.
Bạn có thể nhận được thông tin về CPU trong /proc/cpuinfo
. Nếu CPU x86 của bạn có lm
cờ, đó là CPU 64 bit.
Theo mặc định, uname -m
hoặc arch
hiển thị kiến trúc mà kernel đã được biên dịch. Linux có thể thiết lập tính cách cá nhân trên mạng của một quá trình (với personality
) cuộc gọi hệ thống. Bạn có thể chạy một quy trình con trong một tính cách khác với setarch
lệnh; setarch i686 someprogram
hoặc linux32 someprogram
chạy chương trình đã chỉ định trong môi trường uname -m
trả về i686
trong khi setarch amd64 someprogram
hoặc linux64 someprogram
chạy chương trình đã chỉ định trong môi trường uname -m
trả vềamd64
.
file /sbin/init
cho bạn biết kiến trúc nào init
chương trình được biên dịch cho. Mặc dù có thể kết hợp các tệp thực thi 32 bit và 64 bit trong một bản cài đặt, nhưng thông thường tất cả các chương trình HĐH cốt lõi đều có cùng kiến trúc, bởi vì nó dễ quản lý hơn rất nhiều.
$HOSTYPE
là một biến bash và cho bạn biết kiến trúc nào bash
chương trình được biên dịch cho.
getconf LONG_BIT
cho bạn biết liệu trình biên dịch C mặc định được thiết lập để biên dịch các chương trình 32 bit hay 64 bit. Một thử nghiệm chính xác hơn là biên dịch a và chạy một chương trình in sizeof(void*)
hoặc sizeof(size_t)
- gọi getconf
chỉ có thể cung cấp thông tin về những gì getconf
được cho là trình biên dịch mặc định.