混乱しています。 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 -m
。arch
このコマンドの詳細については、以下で読むことができます。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を参照してください。
引用する
マニュアルページ
記事:
答え2
カーネルが32ビットLinuxカーネルの場合、プロセッサは64ビットプログラムをサポートしていても64ビットプログラムを実行できません。
64ビットを実行するには、64ビットカーネル(およびフルオペレーティングシステム)をインストールします。
答え3
完全性のために:ほとんどの64ビットアーキテクチャでは、カーネルスペースとユーザースペースの両方で32ビットコードを実行できるため、実際に4つの組み合わせが可能であることを忘れてはなりません。
- 32ビットカーネルの32ビットユーザースペース
- 64ビットカーネルの64ビットユーザースペース
- 64ビットカーネルの32ビットユーザースペース
- 両方64ビットカーネルの64ビットおよび32ビットユーザースペース
uname
カーネルバリアントを決定する一般的な方法です。ユーザー空間の場合、file
実行可能ファイルを識別するのに非常に適しています。file $SHELL
またはfile /sbin/init
便利な慣用語です。ただ存在する両方 /lib/*.so
そして /lib64/*.so
一般に、システムが両方のユーザ空間バリエーションをサポートするという良い信号です。
答え4
Ubuntuのインストールが32ビットか64ビットかを確認するには、次の手順を実行します。
a) getconf LONG_BIT
b) 名前なし -m
i686またはi386と表示されている場合は、32ビットを意味します。 x86_64が表示される場合は64ビットを意味します。
CPUが32ビットの場合、Ubuntuは32ビットでなければなりません。 CPUが64ビットの場合、64ビットまたは32ビットで動作できます。したがって、Ubuntuは32ビットでも64ビットでもかまいません。
CPUが32ビットか64ビットかを確認するには、次の手順を実行します。
a) grep -w lm /proc/cpuinfo
赤いlmが見える場合は64ビットです。それ以外の場合は32ビットです。
b)sudo lshw | grep「説明:CPU」-A 12 |
私たちが知りたいことが何であるかを明確に説明しています。
2つのメッセージコマンド:
LSCPU
出力の最初の2行だけを見てください。 「Architecture」は、インストールされているLinuxのバージョンを意味します。 「i686」は32ビットバージョンを表し、「x86_64」は64ビットバージョンを表します。 「CPU動作モード」は、CPUに関する情報を通知します。 「32ビット」は32ビットのうちの1つを表し、「32ビット、64ビット」または「64ビット」は64ビットのいずれかを表します。