Linux'ta 32 bit, 64 bit CPU op-modu


15

Kafam karıştı. Fedora Linux'u çalıştırmak, lscpuşunları sağlar:

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

Ama bir 64-bit programı (Chrome) yüklemeye çalıştığımda hata alıyorum:

/....X86_64.rpm paketi x86_64 uyumsuz mimarisine sahip. Geçerli mimariler ['i686', 'i586', 'i486', i386 ']

Chrome'u yükleyebilmekle daha az ilgileniyorum ve neden lscpuCPU'mun 64 bit modunda çalışabileceğini söylüyor; bu 64-bit programları çalıştırabileceğim anlamına gelmez. Herkes açıklığa kavuşturabilir mi?


çıkışını paylaşabilir cat /proc/cpumisiniz, 64 veya 32 bit modunda önyükleme yapmak istediğinizi seçebileceğiniz önyüklemede düşünüyorum
Raza

1
32 bit işletim sistemi mi yoksa 64 bit işletim sistemi mi kullanıyorsunuz?
Renan

@Salton'ım var /proc/cpuinfo. Ama bu daha meraklı sorular doğuruyor. *_lm.. "36 bit fiziksel" bayraklar hem benim işlemcileri uzun modunu destekleyen gösteriyor, ancak adres boyutları
Zak

Yanıtlar:


32

lscpumimarinizin i686 (Intel 32 bit CPU) olduğunu ve CPU'nuzun hem 32 bit hem de 64 bit çalışma modlarını desteklediğini söylüyor. Özellikle x64 mimarileri için oluşturulduklarından, x64 yerleşik uygulamalarını yükleyemezsiniz.

Özel CPU'nuz i386 veya i686 yerleşik paketlerini işleyebilir. Mimari ve işletim sistemi tercihlerinizi doğrulamanın birkaç yolu vardır.

lscpu

Zaten bildiğiniz gibi, lscpu komutunu kullanabilirsiniz. CPU'nuzun neler yapabileceğine dair kaba bir fikir vermekte iyi çalışır.

$ 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

Bu aslında çekirdek tarafından lscpugörüntülenen araçların çoğunun sağladığı verilerdir . Size özel CPU'nuz hakkında bazı model numarası bilgileri göstermesi nedeniyle bu çıktıyı biraz güzel buluyorum. Ayrıca, CPU'nuzun sahip olabileceği her çekirdek için bir bölüm gösterecektir.

İşte tek bir çekirdek için çıktı:

$ 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:

Bir çekirdek için her bölümün ilk 3 satırı şöyle görünür:

$ 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

Çıktısı, /proc/cpuinfoCPU'nuzun gösterdiği çeşitli bayraklar aracılığıyla sağladığı mimari tipini de söyleyebilir. Yukarıdaki komuttan bu satırlara dikkat edin:

$ 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

Biten bayraklar, _lmişlemcinizin "uzun modu" desteklediğini söyler. Uzun mod, 64 bit için başka bir isimdir.

Adın

Bu komut, çekirdeğinizin hangi platformu desteklemek üzere oluşturulduğunu belirlemek için kullanılabilir. Örneğin:

64 bit çekirdek

$ 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 bit çekirdek

$ 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

Bu çıkış ayrıca anahtarları kullanarak biraz rafine edilebilir [-m|--machine], [-p|--processor]ve [-i|--hardware-platform].

İşte aynı yukarıdaki sistemler için çıktı.

64 bit

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

32 bit

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

NOT:uname -m Tek başına komut olarak çalıştırabileceğiniz kısa biçimli bir sürümü de vardır arch. Tam olarak aynı şeyi döndürür uname -m. archKomut hakkında daha fazla bilgiyi coreutils belgelerinde okuyabilirsiniz .

alıntı

arch, makine donanım adını yazdırır ve 'uname -m'ye eşdeğerdir.

hwinfo

Muhtemelen donanımınızı analiz etmek için en iyi araç olmalı hwinfo. Bu paket, herhangi bir donanımınız hakkında doğrudan terminalden bilmek istediğiniz / ihtiyacınız olan her şeyi size gösterebilir. Bir sistemin anakartındaki bir yongadan biraz bilgiye ihtiyacım olduğunda veya PCI yuvasındaki bir kartın revizyonunu bilmem gerektiğinde beni düzinelerce kez kurtardı.

Bir bilgisayarın farklı alt sistemlerine karşı sorgulayabilirsiniz. Bizim durumumuzda cpualt sisteme bakacağız .

$ 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

Yine, /proc/cpuinfobu komuta benzer bir çok çekirdekli sistemdeki her bir çekirdeğin makyajını gösterir. İşte size bir fikir vermek için bir çekirdeğin her bölümünden ilk satır.

$ 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

Bu muhtemelen CPU'nuzun işletim sistemine hangi mimariyi sunduğunu söylemenin en açık yoludur. Yararlanarak getconfsenin sistem değişkeni LONG_BIT sorgulama. Bu bir ortam değişkeni değil.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

Yine başka bir araç, yetenekleri benzer hwinfo. Temeldeki donanım hakkında bilmek istediğiniz her şeyi sorgulayabilirsiniz. Örneğin:

# 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 çalışma modu (ları)?

Komutların birçoğu, 32 bit CPU'yu 32 bit ve 64 bit modlarını destekleyen olarak görüyor. Bu biraz kafa karıştırıcı ve yanıltıcı olabilir, ancak özellikle CPU'ların geçmişini anlarsanız, Intel özellikle, bir CPU'nun 16 biti destekleyen bir talimat setine sahip olabileceği ürünleri ile oyun oynama geçmişine sahip olduklarını bileceksiniz. ama 2 ^ 16 daha fazla RAM adresleyebilir.

Aynı şey bu CPU'lar için de geçerli. Çoğu kişi, 32 bit CPU'nun yalnızca 2 ^ 32 = 4GB RAM'e hitap edebileceğini bilir. Ancak daha fazlasını ele alabilecek CPU sürümleri var. Bu CPU'lar genellikle PAE - Fiziksel Adres Uzantısı sonekine sahip bir Linux çekirdeğinden yararlanır . PAE özellikli bir çekirdeğin bu donanımla birlikte kullanılması, 32 bit sistemde 64 GB'a kadar adresleme yapabilmenizi sağlar.

Peki neden 64 bit mimariye ihtiyacım var? Bu CPU'larla ilgili sorun, tek bir işlem alanının 2 ^ 32 ile sınırlı olmasıdır, bu nedenle RAM'de adreslenebilir alanın 2 ^ 32'sinden daha fazlasına ihtiyaç duyan büyük bir simülasyon veya hesaplama programınız varsa, bu size yardımcı olmaz Bununla.

Daha fazla bilgi için P6 mikro mimarisindeki (i686) wikipedia sayfasına bakınız .

TL; DR - Peki CPU'mun mimarisi ne halt?

Genel olarak kafa karıştırıcı olabilir, çünkü yukarıdaki komutların ve yöntemlerin birçoğu "mimari" terimini gevşek bir şekilde kullanıyor. Temel işletim sisteminin 32 bit mi yoksa 64 bit mi olduğunu merak ediyorsanız şu komutları kullanın:

  • lscpu
  • getconf LONG_BIT
  • Adın

Öte yandan CPU'nun mimarisini bilmek istiyorsanız şu komutları kullanın:

  • / Proc / cpuinfo
  • hwinfo
  • lshw

Özellikle, "genişlik: 64" veya "genişlik: 32" gibi şeylerin söylendiği alanları aramak veya benzer bir araç kullanıyorsanız lshwveya bayrakları arayın:

  • lm: Uzun Mod (x86-64: amd64, Intel 64 olarak da bilinir, yani 64 bit özellikli)
  • lahf_lm: Uzun modda LAHF / SAHF

Bu 2 bayrağın hediyeleri CPU'nun 64 bit olduğunu söylüyor. Onların yokluğu size 32 bit olduğunu söylüyor.

CPU bayrakları hakkında ek bilgi için bu URL'lere bakın.

Referanslar

adam sayfaları

nesne:


32-bit işletim sisteminin neden 64-bit "op-modu" olabileceğini açıklayabilir misiniz? Cevabınız bunu yapabileceğini ima ediyor.
djangofan

Bu doğru. Güncellemelerime bakın, eğer mantıklıysa lmk.
slm

Açıkçası harika bir cevap. Çok teşekkürler! Intel oyun oynamak
Zak

Ancak açık olmak lscpugerekirse, "Mimari: i686" aslında bir 32-bit işletim sistemi çalıştırmak anlamına gelir yanıltıcıdır.
Zak

1
Bu bilgi için bu konu hakkında çok fazla kafa karışıklığı vardı. Bu soru birçok SE sitesinde ortaya çıkıyor. Bu sitelerdeki cevapların çoğu da bu konuyla ilgili olarak karışıktı. Yani bu, sadece OP'nin sorusunu cevaplamak için değil, konuya her şey dahil bir cevap vermeye çalışmaktı.
slm

4

Çekirdeğiniz 32 bit linux çekirdeği ise, işlemciniz desteklese bile 64 bit programları çalıştıramazsınız.

64 bit çalıştırmak için bir 64 bit çekirdek (ve tabii ki tüm işletim sistemi) kurun


CPU'nuz VT-x / AMD'yi destekliyorsa, Virtualbox / WMware gibi sanallaştırma yazılımlarını kullanarak 32 işletim sistemi altında 64 bit programları kullanabilirsiniz.
m3nda

1

Tamlık için: 64 bit mimarilerin çoğunda, hem çekirdek alanında hem de kullanıcı alanında 32 bit kod çalıştırmak mümkün olduğundan, aslında 4 olası kombinasyon olduğunu unutmamak gerekir:

  • 32 bit çekirdek üzerinde 32 bit kullanıcı alanı
  • 64 bit çekirdeğinde 64 bit kullanıcı alanı
  • 64 bit çekirdeğinde 32 bit kullanıcı alanı
  • 64 bit çekirdeğin hem 64 bit hem de 32 bit kullanıcı alan (lar) ı

unameçekirdek varyantını belirlemenin genel yoludur. Kullanıcı alanı için, fileyürütülebilir dosyaları tanımakta oldukça iyidir: file $SHELLveya file /sbin/inituygun deyimlerdir. Her ikisinin de varlığı /lib/*.so ve /lib64/*.so genellikle iyi bir göstergedir, sistemin her iki kullanıcı alanı varyantını da sporlaştırdığını gösterir.


Aslında 5 vardır. İlk kombinasyon "... 32-bit donanımda" veya "... 64-bit donanımda" olabilir. Kalan 3 adet 64 bit donanım gerektirir.
Ben Voigt

Evet, bir şekilde 64-bit donanımı çoğu 64-bit mimariye yazarak dolaylı olarak düşündüm .
peterph

0

Kurulu Ubuntu'nun 32 mi yoksa 64 bit mi olduğunu bilmek için:

a) LONG_BIT getconf

b) uname -m

İ686 veya i386 gösteriyorsa, 32 bit anlamına gelir. X86_64 gösteriyorsa, 64 bit anlamına gelir.

CPU 32 bit ise, Ubuntu 32 bit olmalıdır. CPU 64 bit ise 64 veya 32 bit olarak çalışabilir. Bu yüzden seçebiliriz: Ubuntu 32 bit veya 64 bit olabilir.

CPU'nun 32 mi yoksa 64 bit mi olduğunu bilmek için:

a) grep -w lm / proc / cpuinfo

Kırmızı renkte lm'nin 64 bit olduğunu görürsek. Aksi takdirde 32 bittir.

b) sudo lshw | grep "açıklama: CPU" -A 12 | grep genişliği

Ne bilmek istediğimizi açıkça söylüyor.

Her iki bilgi için bir komut:

lscpu

Çıktının ilk 2 satırına bakmamız gerekiyor: “Mimari” kurulu Linux sürümü hakkında bilgi veriyor: “i686 32 32 bitten birini temsil ederken,“ x86_64 ″ 64 bit anlamına gelir. “CPU op-mod (ları)” CPU hakkında bilgi verir. “32 bit” 32 bitten birini temsil ederken, “32 bit, 64 bit” veya “64 bit” 64 bit anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.