GNU/Linux >> Linux の 問題 >  >> Linux

Linux での 32 ビット、64 ビット CPU op モード

lscpu は、アーキテクチャが i686 (Intel 32 ビット CPU) であり、CPU が 32 ビットと 64 ビットの両方の動作モードをサポートしていることを示しています。 x64 アーキテクチャ専用に構築されているため、x64 で構築されたアプリケーションをインストールすることはできません。

特定の CPU は、i386 または i686 ビルド パッケージのいずれかを処理できます。アーキテクチャと OS の設定を確認するには、さまざまな方法があります。

lscpu

すでにお気づきのように、コマンド lscpu を使用できます。これは、CPU の能力を大まかに把握するのに役立ちます。

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
CPU(s):                4
Thread(s) per core:    2
Core(s) per socket:    2
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 37
Stepping:              5
CPU MHz:               1199.000
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

/proc/cpuinfo

これは実際には、lscpu などのほとんどのツールが提供するカーネルによって提供されるデータです。 表示するために使用します。この出力は、特定の CPU に関するモデル番号情報を示しているという点で、少し良いと思います。また、CPU に搭載されている各コアのセクションも表示されます。

シングルコアの出力は次のとおりです:

$ cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz
stepping    : 5
cpu MHz     : 1466.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5319.74
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

コアの各セクションの最初の 3 行は次のようになります:

$ grep processor -A 3 /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
--
processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
--
processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
--
processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37

/proc/cpuinfo からの出力 また、表示されるさまざまなフラグを介して、CPU が提供しているアーキテクチャのタイプを知ることもできます。上記のコマンドの次の行に注意してください:

$ grep /proc/cpuinfo | head -1
    flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid

_lm で終わるフラグ プロセッサが「ロングモード」をサポートしていることを伝えます。ロング モードは 64 ビットの別名です。

ウナメ

このコマンドを使用して、カーネルがサポートするように構築されたプラットフォームを判別できます。例:

64 ビット カーネル

$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

32 ビット カーネル

$ uname -a
Linux skinner.bubba.net 2.6.18-238.19.1.el5.centos.plus #1 SMP Mon Jul 18 10:07:01 EDT 2011 i686 i686 i386 GNU/Linux

この出力は、スイッチ [-m|--machine] を使用してさらに絞り込むことができます。 、 [-p|--processor] 、および [-i|--hardware-platform] .

上記の同じシステムの出力は次のとおりです。

64 ビット

$ uname -m; uname -p; uname -i
x86_64
x86_64
x86_64

32 ビット

$ uname -m; uname -p; uname -i
i686
i686
i386

注: uname -m の短縮版もあります スタンドアロン コマンドとして実行できる arch . uname -m とまったく同じものを返します . arch について詳しく読むことができます

抜粋

<ブロック引用>

arch はマシンのハードウェア名を出力し、「uname -m」と同等です。

hwinfo

おそらく、ハードウェアを分析するための最良のツールは hwinfo に違いありません .このパッケージは、端末から直接、ハードウェアについて知りたい/知る必要があるほとんどすべてを表示できます。システムのマザーボード上のチップから情報が必要な場合や、PCI スロットのボードのリビジョンを知る必要がある場合に、何十回も節約できます。

コンピューターのさまざまなサブシステムに対してクエリを実行できます。この場合、cpu を調べます。 サブシステム。

$ hwinfo --cpu
01: None 00.0: 10103 CPU                                        
  [Created at cpu.301]
  Unique ID: rdCR.a2KaNXABdY4
  Hardware Class: cpu
  Arch: X86-64
  Vendor: "GenuineIntel"
  Model: 6.37.5 "Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz"
  Features: fpu,vme,de,pse,tsc,msr,pae,mce,cx8,apic,sep,mtrr,pge,mca,cmov,pat,pse36,clflush,dts,acpi,mmx,fxsr,sse,sse2,ss,ht,tm,pbe,syscall,nx,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,rep_good,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,smx,est,tm2,ssse3,cx16,xtpr,pdcm,sse4_1,sse4_2,popcnt,aes,lahf_lm,ida,arat,tpr_shadow,vnmi,flexpriority,ept,vpid
  Clock: 2666 MHz
  BogoMips: 5319.74
  Cache: 3072 kb
  Units/Processor: 16
  Config Status: cfg=new, avail=yes, need=no, active=unknown

繰り返しますが、/proc/cpuinfo と同様です このコマンドは、マルチコア システム内の個々のコアの構成を表示します。アイデアを提供するために、コアの各セクションの最初の行を次に示します。

$ hwinfo --cpu | grep CPU
01: None 00.0: 10103 CPU
  Model: 6.37.5 "Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz"
02: None 01.0: 10103 CPU
  Model: 6.37.5 "Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz"
03: None 02.0: 10103 CPU
  Model: 6.37.5 "Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz"
04: None 03.0: 10103 CPU
  Model: 6.37.5 "Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz"

getconf

これはおそらく、CPU が OS に提​​示しているアーキテクチャを知る最も明白な方法です。 getconf の利用 、システム変数 LONG_BIT を照会します。これは環境変数ではありません。

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

hwinfo と同様の機能を持つさらに別のツール .基礎となるハードウェアについて知りたいことはほとんど何でも照会できます。例:

# 64-bit Kernel
$ lshw -class cpu
  *-cpu                   
   description: CPU
   product: Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz
   vendor: Intel Corp.
   physical id: 6
   bus info: [email protected]
   version: Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz
   slot: None
   size: 1199MHz
   capacity: 1199MHz
   width: 64 bits
   clock: 133MHz
   capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid cpufreq
   configuration: cores=2 enabledcores=2 threads=4


# 32-bit Kernel
$ lshw -class cpu
  *-cpu:0
   description: CPU
   product: Intel(R) Core(TM)2 CPU          4300  @ 1.80GHz
   vendor: Intel Corp.
   physical id: 400
   bus info: [email protected]
   version: 6.15.2
   serial: 0000-06F2-0000-0000-0000-0000
   slot: Microprocessor
   size: 1800MHz
   width: 64 bits
   clock: 800MHz
   capabilities: boot fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe x86-64 constant_tsc pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm
   configuration: id=1
 *-logicalcpu:0
      description: Logical CPU
      physical id: 1.1
      width: 64 bits
      capabilities: logical
 *-logicalcpu:1
      description: Logical CPU
      physical id: 1.2
      width: 64 bits
      capabilities: logical

CPU オペモード?

いくつかのコマンドは、32 ビット CPU のように見えるものが 32 ビットおよび 64 ビット モードをサポートしていると報告しています。これは少し混乱して誤解を招く可能性がありますが、CPU、特に Intel の歴史を理解していれば、CPU が 16 ビットをサポートする命令セットを備えている製品でゲームをプレイした歴史があることがわかります。ただし、2^16 よりも多くの RAM をアドレス指定できます。

これらのCPUでも同じことが起こっています。ほとんどの人は、32 ビット CPU が 2^32 =4GB の RAM しかアドレス指定できないことを知っています。しかし、より多くのアドレスに対応できるバージョンの CPU があります。これらの CPU は、多くの場合、接尾辞 PAE - Physical Address Extension を持つ Linux カーネルを使用します。このハードウェアと共に PAE 対応カーネルを使用すると、32 ビット システムで最大 64GB をアドレス指定できます。

では、なぜ 64 ビット アーキテクチャが必要なのでしょうか?これらの CPU の問題は、単一プロセスのスペースが 2^32 に制限されていることです。そのため、RAM に 2^32 を超えるアドレス可能なスペースを必要とする大規模なシミュレーションまたは計算プログラムがある場合、これは役に立たないでしょう。

詳細については、P6 マイクロアーキテクチャ (i686) のウィキペディア ページを参照してください。

TL;DR - 一体、私の CPU のアーキテクチャは何ですか?

一般に、上記の多くのコマンドと方法論では「アーキテクチャ」という用語が大まかに使用されているため、混乱する可能性があります。基盤となる OS が 32 ビットか 64 ビットかを知りたい場合は、次のコマンドを使用してください:

  • lscpu
  • getconf LONG_BIT
  • うなめ

一方、CPU のアーキテクチャを知りたい場合は、次のコマンドを使用してください:

  • /proc/cpuinfo
  • hwinfo
  • lshw

具体的には、lshw などのツールを使用している場合は、「幅:64」や「幅:32」などのフィールドを探します。 、またはフラグを探します:

  • lm :ロング モード (x86-64:amd64、Intel 64 とも呼ばれる、つまり 64 ビット対応)
  • lahf_lm :LAHF/SAHF ロングモード

これら 2 つのフラグの表示は、CPU が 64 ビットであることを示しています。それらの不在は、それが 32 ビットであることを示しています。

CPU フラグの追加情報については、これらの URL を参照してください。

  • /proc/cpuinfo のフラグは何を意味していますか?
  • CPU 機能フラグとその意味

参考文献

man ページ

  • lscpu のマニュアル ページ
  • /proc/cpuinfo リファレンス ページ
  • uname のマニュアル ページ
  • hwinfo のマニュアル ページ
  • getconf のマニュアル ページ

記事:

  • マシンが 64 ビットまたは 32 ビットのプロセッサ/Linux OS で実行されているかどうかを確認しますか?
  • プロセッサが 32 ビットか 64 (Linux) かを調べる
  • ヘルプ:Linux の 32 ビット / 64 ビット チェック

カーネルが 32 ビット Linux カーネルの場合、プロセッサがサポートしていても、64 ビット プログラムを実行することはできません。

64 ビットを実行するには、64 ビット カーネル (およびもちろん OS 全体) をインストールします


完全を期すために:ほとんどの 64 ビット アーキテクチャでは、カーネル空間とユーザー空間の両方で 32 ビット コードを実行できるため、実際には 4 つの可能な組み合わせがあることを忘れてはなりません。

  • 32 ビット カーネル上の 32 ビット ユーザー空間
  • 64 ビット カーネル上の 64 ビット ユーザー空間
  • 64 ビット カーネル上の 32 ビット ユーザー空間
  • 両方 64 ビット カーネル上の 64 ビットおよび 32 ビットのユーザー空間

uname カーネルバリアントを決定するための通常の方法です。ユーザー空間の場合、file 実行可能ファイルの認識に非常に優れています:file $SHELL または file /sbin/init 便利なイディオムです。 両方の存在だけで /lib/*.so そして /lib64/*.so これは通常、システムが両方のユーザー空間バリアントを備えていることを示しています。


Linux
  1. 特定の Linux が 32 ビットか 64 ビットかを判別する方法は?

  2. gcc/cmake を使用して 64 ビット Linux マシンで 32 ビット バイナリをコンパイルする方法

  3. 64 ビット Linux での 32 ビット プロセスのアドレス空間

  1. LinuxでプロセスのCPU使用率を制限する方法

  2. Linux の 32 ビット プログラムで 64 ビットの time_t を取得する方法はありますか?

  3. 64 ビット Linux での 32 ビット ライブラリの検索

  1. Linux OS サービス「cpuspeed」

  2. ビット数(32または64)を返すLinuxコマンド?

  3. Linux バイナリ ファイルが 32 ビットか 64 ビットかを判断する方法は?