
出力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
ただし、/sbin/init
実行可能ファイルは32ビットで表示されます。
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
システムの他の側面も矛盾しているようです。
root@debian:~ # echo $HOSTTYPE
i486
root@debian:~ # getconf LONG_BIT
32
答え1
サポートされるすべてのプロセッサx64命令セット(x86_64またはamd64とも呼ばれます)は、以下をサポートします。x86命令セット(i386またはi686とも呼ばれ、厳密にはx86の特定のバージョン)。以下にも適用されます。腕A64(ARMv8に表示される新しい64ビット命令セット)とA32(「クラシック」32ビット命令セットの名前)スパック64そしてスパッキー、私は信じるMIPS64そしてMeaps。したがって、これらすべてのアーキテクチャスイートでプロセッサが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ビットの実行可能ファイルを混在させることは可能ですが、通常は同じアーキテクチャですべてのコアオペレーティングシステムプログラムを管理する方が簡単です。
$HOSTYPE
bash
プログラムがどのアーキテクチャに合わせてコンパイルされたかを示すbash変数です。
getconf LONG_BIT
デフォルトのCコンパイラが32ビットプログラムまたは64ビットプログラムをコンパイルするように設定されていることを確認できます。より正確なテストは、基本コンパイラに関する情報のみを提供できる印刷プログラムまたはsizeof(void*)
呼び出しsizeof(size_t)
プログラムをコンパイルして実行することです。getconf
getconf
答え2
64ビットカーネルはDebian 32ビットにインストールできます。 amd64カーネルが32ビットDebianで利用可能であることがわかります。包装ページ。これは、PAE サポートカーネルを使用する代わりに、合計 4G 以上の RAM をサポートするために使用できます。 32ビットバイナリはまだプロセスあたり約3G以上のRAMにアクセスできません。