ハードウェアとオペレーティングシステムのビット数を確認するにはどうすればよいですか?

ハードウェアとオペレーティングシステムのビット数を確認するにはどうすればよいですか?

uname私のRHEL 5.4システムでは、-aの出力は次のようになります。

Linux <machine name> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

これは、ハードウェアが64ビット(おそらく最初のx86_64)で、OSも64ビット(最後のx86_64)という意味ですか?

また、これらのx86_64インスタンスはすべて何ですか?
32ビットオペレーティングシステムに64ビット仮想マシンをインストールできますか?それともその逆も可能ですか?

答え1

ハードウェア、カーネル、およびユーザー空間プログラムは、単語サイズが異なる場合があります。

  • 次の場合に確認できます。CPUflagsファイルの行を調べて、64ビット、32ビット、またはその両方がサポートされているかどうかを確認できます/proc/cpuinfo。アーキテクチャスイートで考えられる兆候を理解する必要があります。たとえば、i386/amd64 プラットフォームでは、このlmフラグは amd64 をサポートする CPU を識別します (このフラグのない CPU は i386 のみです)。

      grep -q '^flags *:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
  • アーキテクチャを照会して、カーネルが32ビットか64ビットかを確認できますuname -m。たとえば、i[3456]8632ビットですが、64ビットx86_64です。一部のアーキテクチャでは、64ビットカーネルが32ビットユーザーモードプログラムを実行できるため、64uname -mビットカーネルが表示されても64ビットライブラリを使用できるという保証はありません。

      [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    
  • クエリを使用すると、ユーザー空間で利用可能な項目を確認できます。最下位ビットサポート課lsb_release注文する。より正確には、サポートされているLSB機能の区切りリストをlsb_release -s印刷します。:すべての特徴に形があります。例えば、ix86 Cライブラリーの可用性はとしてマークされていますが、amd64用のエミュレーションライブラリーはとしてマークされています。ただし、すべてのディストリビューションが使用可能なすべてのLSBモジュールを宣言するわけではないため、この方法で検出できるよりも多くのLSBモジュールがある可能性があります。module-version-architecturecore-2.0-ia32core-2.0-amd64

  • などのコマンドを使用するには、システムのアーキテクチャプログラムがどのアーキテクチャで構築されているかを確認できますfile /bin/ls。混合システムも可能です。lsシステムに64ビットプログラムであっても、32ビットプログラムを実行するためのライブラリがインストールされている可能性があり、その逆もあります(あまり一般的ではありません)。

  • sizeof(void*)あるいは、(Cコンパイラが利用可能であると仮定)を印刷する5行のCプログラムをコンパイルして、開発に好まれる単語サイズを確認することもできますsizeof(size_t)。コマンドを実行すると、少し信頼性の低い方法で同じ情報を取得できますgetconf LONG_BIT

      #include <stdio.h>
      int main() {
          printf("%d\n", (int)sizeof(void*));
          return 0;
      }
    

仮想マシンの場合、32ビットシステムで64ビット仮想マシンを実行できるかどうか、またはその逆を実行できるかどうかは、仮想マシン技術によって異なります。特に参照 32ビットLinuxに64ビットLinux仮想マシンをインストールする方法は?

1 「ワード長」は「ビット数」の一般名です。²誰かが別のターゲットアーキテクチャを使用して代替Cコンパイラをインストールしたがシステムのデフォルト値をそのままにしている場合は、信頼できない可能性があり
ますgetconf

答え2

知りたいuname複数のx86_64が発生します。

x86_64 x86_64 x86_64

以下は3つの値です。「不明な場合は、-pと-iを省略してください。」)

    -m, --machine 
          print the machine hardware name
    -p, --processor
          print the processor type or "unknown"
    -i, --hardware-platform
          print the hardware platform or "unknown"

に属しませんので-pご注意ください-iPOSIX規格。この値はunknownDebian にあるので、uname は x86_64 を一度だけ印刷します。 Red Hat / CentOSはこの値を定義します。

また読んでください:Linuxはどのようにuname -m情報を取得しますか?そしてuname -pとuname -mとArch出力が異なるアーキテクチャを出力するのはなぜですか?

答え3

見るman uname

64ビットシステムでは32ビットプログラムをコンパイルして実行できますが(特別な設定が必要です)、32ビットシステムで64ビットバイナリを実行することはできません。多くの仮想マシンにも同様に適用されます。しかし、すべてではありません*。したがって、64ビットカーネルがある場合、ハードウェアは32ビットにすることはできません。

バイナリのビット数をテストするには、を実行しますfile /path/to/the/program

*これは、特定の仮想マシンが実行されるレベルによって異なります。ホストCPUでバイナリコードを(ほぼ)直接実行する仮想マシンは、32ビットホストで64ビットコードを実行できません。それらシミュレーション一部のCPUはこれを実行できますが、エミュレーションレベルのため効率が悪くなります。

関連情報