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


15

よくわかりません。Fedora Linuxを実行すると、次のlscpu結果が得られます。

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

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

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

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


あなたはの出力を共有することができ cat /proc/cpu、私はあなたが64または32ビットモードでブートする場合は、あなたが選択することができます起動時に考える
ラザ

1
32ビットOSまたは64ビットOSを使用していますか?
レナン

@Salton私が持っています/proc/cpuinfo。しかし、これはより奇妙な質問を提起します。*_lmフラグは、両方の私のプロセッサが長いモードをサポートして示しているが、アドレスのサイズは、「物理的な36ビット、」..です
ザック

回答:


32

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が表示するさまざまなフラグを介して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

おそらくあなたのハードウェアを分析するための最高のツールはそうでなければなりません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: 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 op-mode(s)?

いくつかのコマンドは、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

具体的には、のようなツールを使用している場合は「width:64」または「width:32」などと表示されているフィールドを探すlshwか、フラグを探します。

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

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

CPUフラグの詳細については、これらのURLをご覧ください。

参照資料

マニュアルページ

記事:


32ビットOSが64ビット「opモード」を持つことができる理由を説明できますか?あなたの答えは、できることを暗示しています。
ジャンゴファン

そのとおりです。私の更新を参照してください、それが理にかなっている場合はlmk。
slm

明らかに素晴らしい答えです。本当にありがとう!Intelがゲームをプレイ
ザック

ただし、明確にするlscpuために、「アーキテクチャ:i686」は実際には32ビットOSの実行を指すという点で、多少誤解を招く可能性があります。
ザック

1
この情報をグーグルで検索すると、この特定のトピックに関して多くの混乱が生じました。この質問は、多くのSEサイトで表示されます。それらのサイトの回答の多くは、このトピックについても混乱しています。そのため、これは、OPの質問に答えるだけでなく、トピックへの包括的な答えを提供しようとする試みでした。
slm

4

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

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


CPUがVT-x / AMDをサポートしている場合、Virtualbox / WMwareなどの仮想化ソフトウェアを使用して、32 OSで64ビットプログラムを使用できます。
m3nda

1

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

  • 32ビットカーネル上の32ビットユーザースペース
  • 64ビットカーネル上の64ビットユーザースペース
  • 64ビットカーネル上の32ビットユーザースペース
  • 64ビットカーネル上の64ビットと32ビットの両方のユーザースペース

unameカーネルバリアントを決定する通常の方法です。ユーザースペースについてfileは、実行可能ファイルの認識に非常に優れています:file $SHELLまたはfile /sbin/init便利なイディオムです。ただの存在の両方 /lib/*.so とは、 /lib64/*.so通常は良い兆候では、システムのスポーツユーザースペースの両方がバリアントということ、です。


実際には5つあります。最初の組み合わせは、「... 32ビットハードウェア」または「... 64ビットハードウェア」です。残りの3つには64ビットのハードウェアが必要です。
ベンフォークト

はい、私は何らかの形で64ビットハードウェアをほとんどの64ビットアーキテクチャで書くこと暗黙的に考えました。
ペテルフ

0

インストールされたUbuntuが32ビットか64ビットかを知るには:

a)getconf LONG_BIT

b)uname -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 | グレップ幅

知りたいことを明確に述べています。

両方の情報のコマンド:

lscpu

出力の最初の2行を確認するだけです。「アーキテクチャ」はインストールされているLinuxバージョンについて通知します。「i686」は32ビットの1つを表し、「x86_64」は64ビットの1を表します。「CPU op-mode(s)」はCPUについて通知します。「32ビット」は32ビットの1つを表し、「32ビット、64ビット」または「64ビット」は64ビットの1つを表します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.