Linuxの32ビット、64ビットCPU動作モード

Linuxの32ビット、64ビットCPU動作モード

混乱しています。 Fedora Linuxを実行すると、lscpu次のようになります。

Architecture:            i686
CPU op-mode(s):          32-bit, 64-bit
...

しかし、64ビットプログラム(Chrome)をインストールしようとすると、次のエラーが発生します。

Package / ... x86_64.rpmにはx86_64と互換性のないアーキテクチャがあります。有効なアーキテクチャは['i686'、'i586'、'i486'、i386']です。

私はChromeをインストールできるかどうかよりも私のCPUが64ビットモードで実行できると言う理由に興味があります。lscpuそれは64ビットプログラムを実行できるという意味ではありません。誰でも明確にできますか?

ベストアンサー1

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

特定のCPUは、i386またはi686の組み込みパッケージを処理できます。アーキテクチャとオペレーティングシステムの基本設定を確認する方法はいくつかあります。

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/cpuについて

これは実際には、ほとんどのツール(たとえば)がそれを表示するために使用するカーネルによって提供されるデータです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 -marchこのコマンドの詳細については、以下で読むことができます。coreutils ドキュメント

抜粋

arch は、「uname -m」に対応するシステムハードウェア名を出力します。

ハードウェア情報

おそらく、ハードウェア分析のための最高のツールは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"

構成ファイルのインポート

これはおそらく、CPUがオペレーティングシステムに提供するアーキテクチャを伝える最も確実な方法です。を使用すると、getconfシステム変数LONG_BITを照会できます。これは環境変数ではありません。

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

長沙

同じことを行うもう一つのツールです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: cpu@0
   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: cpu@0
   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ビットモードと64ビットモードの両方をサポートする32ビットCPUとして表示されることを報告します。これは多少混乱して誤解を招く可能性がありますが、CPU、特にIntelの歴史を知っていれば、CPUが16ビットをサポートする命令セットを持つことができる製品でゲームをした歴史があることがわかります。ただし、アドレス指定が可能です。 2^16より多くのRAM。

このCPUでも同じことが起こります。ほとんどの人は、32ビットCPUが2 ^ 32 = 4 GBのRAMしか処理できないことを知っています。ただし、一部のバージョンのCPUはより多くのデータを処理できます。これらのCPUは通常、サフィックス付きのLinuxカーネルを使用します。PAE - 物理アドレス拡張。このハードウェアでPAE対応カーネルを使用すると、32ビットシステムで最大64 GBのアドレスを指定できます。

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

ウィキペディアページを見てくださいP6マイクロアーキテクチャ(i686)より多くの情報を知りたいです。

TL;DR - それでは、私のCPUアーキテクチャは正確に何ですか?

一般に、上記のコマンドやメソッドの多くは、「アーキテクチャ」という用語を緩やかに使用しているため、混乱する可能性があります。デフォルトのオペレーティングシステムが32ビットか64ビットかを確認するには、次のコマンドを使用します。

  • LSCPU
  • getconf LONG_BIT
  • 名前を明らかにする

一方、CPU アーキテクチャを知りたい場合は、次のコマンドを使用します。

  • /proc/cpuについて
  • ハードウェア情報
  • 長沙

特に、このようなツールを使用する場合は、「width:64」や「width:32」などのフィールドを検索するか、lshwフラグを探す必要があります。

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

この2つのフラグがある場合、CPUは64ビットであることを示します。この部分がなければ、32ビットであることがわかります。

CPUフラグの詳細については、次のURLを参照してください。

引用する

マニュアルページ

記事:

おすすめ記事