x64命令セット(x86_64またはamd64とも呼ばれます)をサポートするすべてのプロセッサは、x86命令セット(i386またはi686とも呼ばれ、厳密には特定のバージョンのx86です)もサポートします。SPARC64とSPARCのARM A64(ARMv8に登場する新しい64ビット命令セット)とA32(「クラシック」32ビット命令セットの名前)についても同じことが言えます。私はMIPS64とMIPSを信じています。したがって、これらすべてのアーキテクチャファミリでは、プロセッサが64ビットコードを実行できる場合、32ビットコードも実行できます。
Linuxカーネルは、64ビットカーネルでの32ビットユーザーランドコードの実行をサポートします(上記のすべてのアーキテクチャファミリーで)。カーネルは同種(すべて64ビットまたはすべて32ビット)である必要があり、各プロセスは同種である必要がありますが、64ビットカーネルで32ビットと64ビットのプロセスを混在させることができます。逆は不可能です。32ビットのカーネルでは、64ビットのプロセスを実行できません。
これは、64ビットインストールで既存の32ビットバイナリを実行したいという欲求に動機づけられたLinuxの設計上の選択です。他のUnixバリアントは異なる選択をしました:Solarisは32ビットカーネルで64ビットプログラムを実行でき、その逆も可能ですが、OpenBSDは64ビットカーネルで32ビットプログラムを実行できません。
あなたは得ることができますCPUの情報では/proc/cpuinfo
。x86 CPUにlm
フラグがある場合、それは64ビットCPUです。
デフォルトでは、uname -m
またはarch
カーネルがコンパイルされたアーキテクチャを示します。Linuxは、プロセスpersonality
コールの「パーソナリティ」をシステムコールで設定できます。setarch
コマンドを使用して、別のパーソナリティでサブプロセスを実行できます。setarch i686 someprogram
またはlinux32 someprogram
がuname -m
戻る環境で指定されたプログラムを実行するi686
一方、setarch amd64 someprogram
またはlinux64 someprogram
が戻る環境で指定されたプログラムを実行しuname -m
ますamd64
。
file /sbin/init
init
プログラムがどのアーキテクチャ用にコンパイルされているかを示します。インストール内で32ビットと64ビットの実行可能ファイルを混在させることは可能ですが、通常、すべてのコアOSプログラムは同じアーキテクチャのものです。管理がはるかに簡単だからです。
$HOSTYPE
bash変数であり、bash
プログラムがコンパイルされたアーキテクチャを示します。
getconf LONG_BIT
デフォルトのCコンパイラが32ビットまたは64ビットのプログラムをコンパイルするように設定されているかどうかを通知します。より正確なテストは、をコンパイルして実行するプログラムです。印刷sizeof(void*)
またはsizeof(size_t)
—呼び出しでは、デフォルトコンパイラであると考えgetconf
られるものに関する情報のみを提供できgetconf
ます。