32-розрядний 64-бітний опціональний процесор в Linux


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мене цікавить, чому кажуть, що мій процесор може працювати в 64-бітному режимі; Очевидно, це не може означати, що я можу запускати 64-бітні програми. Хтось може уточнити?


Ви можете поділитися результатами cat /proc/cpu, я думаю, що під час завантаження ви можете вибрати, чи бажаєте ви завантажуватись у 64 або 32 бітному режимі
Raza

1
Використовуєте 32-бітну ОС або 64-бітну ОС?
Ренан

@Salton У мене є /proc/cpuinfo. Але це викликає більш цікаві питання. Ці *_lmпрапори вказують обидві мої процесори підтримують тривалий режим, але розміри адреса є «36 біт фізичного,» ..
Заку

Відповіді:


32

lscpuговорить про те, що ваша архітектура - i686 (32-бітний процесор Intel) і що ваш процесор підтримує 32-бітний і 64-бітний режими роботи. Ви не зможете встановити вбудовані програми x64, оскільки вони створені спеціально для архітектур x64.

Ваш конкретний процесор може обробляти або вбудовані пакети i386, або i686. Існує кілька способів перевірити свої архітектуру та налаштування ОС.

lscpu

Як ви вже знаєте, ви можете використовувати команду lscpu. Це добре допомагає дати вам грубе уявлення про те, на що ти здатний процесором.

$ 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показ для відображення. Я вважаю цей вихід трохи приємним у тому, що він показує вам інформацію про номер моделі про ваш конкретний процесор. Також він покаже вам розділ для кожного ядра, який може мати ваш процесор.

Ось вихід для одного ядра:

$ 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також можуть повідомити вам про тип архітектури, який надає ваш процесор через різні прапори, які він відображає. Зверніть увагу на ці рядки з наведеної вище команди:

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

витяг

арка друкує назву апаратури машини і еквівалентно "уні-м".

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

Це, мабуть, найбільш очевидний спосіб розповісти, яку архітектуру ваш процесор представляє ОС. Використовуючи 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

Оп-режими процесора?

Деякі команди повідомляють, що 32-бітний процесор виглядає як підтримуючий 32-бітний та 64-бітний режими. Це може бути трохи заплутано і вводити в оману, але якщо ви розумієте історію процесора, спеціально Intel, ви знатимете, що у них є історія гри в свої ігри зі своїми продуктами, де процесор може мати набір інструкцій, що підтримує 16-бітові, але може адресувати більше оперативної пам'яті, що становить 2 ^ 16.

Те саме відбувається з цими процесорами. Більшість людей знає, що 32-розрядний процесор може адресувати лише 2 ^ 32 = 4 Гб оперативної пам’яті. Але є версії процесорів, які можуть адресувати більше. Ці процесори часто використовують ядро ​​Linux із суфіксом PAE - розширення фізичної адреси . Використання ядра з підтримкою PAE разом із цим обладнанням дозволить вам звертатися до 64 Гб в 32-бітній системі.

Ви можете добре подумати, то чому мені потрібна 64-бітна архітектура? Проблема цих процесорів полягає в тому, що простір одного процесу обмежений 2 ^ 32, тому, якщо у вас є велика імітаційна або обчислювальна програма, якій потрібно більше ніж 2 ^ 32 адресного простору в оперативній пам'яті, то це не допомогло б вам З цим.

Перегляньте сторінку вікіпедії на мікроархітектурі P6 (i686) для отримання додаткової інформації.

TL; DR - Тож, чорт, архітектура мого процесора?

Взагалі це може заплутатися, оскільки ряд команд та методологій, що перераховані вище, вживають термін "архітектура". Якщо вас цікавить, чи є базовою ОС 32-бітної або 64-бітної, скористайтеся цими командами:

  • lscpu
  • getconf LONG_BIT
  • уніме

Якщо з іншого боку ви хочете знати архітектуру процесора, використовуйте ці команди:

  • / proc / cpuinfo
  • hwinfo
  • lshw

Зокрема, ви хочете шукати поля, де написано такі речі, як "ширина: 64" або "ширина: 32", якщо ви використовуєте такий інструмент lshw, або шукаєте прапори:

  • lm: Тривалий режим (x86-64: amd64, також відомий як Intel 64, тобто 64-бітний)
  • lahf_lm: LAHF / SAHF у тривалому режимі

Подарунки цих двох прапорів говорять про те, що процесор 64-бітний. Їх відсутність говорить вам, що це 32-розрядні.

Перегляньте ці URL-адреси для отримання додаткової інформації про прапорці процесора.

Список літератури

сторінки людини

статті:


Чи можете ви пояснити, чому 32-бітна ОС може мати 64-розрядний "оп-режим"? Ваша відповідь означає, що це може.
djangofan

Це правильно. Дивіться мої оновлення, lmk, якщо це має сенс.
slm

Очевидно чудова відповідь. Дуже дякую! Intel грає в ігри
Зак

Отже, щоб бути зрозумілим, lscpuдещо вводиться в оману, що "Архітектура: i686" насправді стосується роботи 32-бітної ОС.
Зак

1
У Google за цією інформацією було багато плутанини навколо цієї конкретної теми. Це питання з'являється на багатьох сайтах ДП. Багато відповідей на цих сайтах також були заплутані щодо цієї теми. Тож це була спроба спробувати надати всеосяжну відповідь на тему, а не просто відповісти на питання ОП.
slm

4

Якщо ваше ядро ​​є 32-бітним Linux-ядром, ви не зможете запускати 64-бітні програми, навіть якщо ваш процесор підтримує його.

Встановіть 64-бітове ядро ​​(і всю ОС, звичайно), щоб запустити 64 біт


Якщо ваш процесор підтримує VT-x / AMD-, ви все одно можете використовувати 64-бітні програми під 32 ОС, використовуючи програмне забезпечення для віртуалізації, наприклад Virtualbox / WMware.
м3нда

1

Для повноти: оскільки в більшості 64-бітних архітектур можна запустити 32-бітний код, як в просторі ядра, так і в просторі користувача, не слід забувати, що насправді існує 4 можливі комбінації:

  • 32-розрядний простір користувача на 32-бітному ядрі
  • 64-розрядний простір користувача на 64-бітному ядрі
  • 32-бітний простір користувача на 64-бітному ядрі
  • як 64-розрядні, так і 32-бітні простори користувачів на 64-бітному ядрі

unameє звичайним способом визначення варіанту ядра. Для простору користувача fileдосить добре розпізнавати виконувані файли: file $SHELLабо file /sbin/initце зручні ідіоми. Саме існування обох /lib/*.so і, /lib64/*.so як правило, є хорошим свідченням того, що система має обидва варіанти простору користувача.


Насправді їх існує 5. Перша комбінація може бути "... на 32-бітному апаратному забезпеченні" або "... на 64-бітному апаратному забезпеченні". Решта 3 вимагають 64-розрядного обладнання.
Ben Voigt

Так, я якось неясно розглядав 64-розрядне обладнання, пишучи про більшість 64-бітних архітектур .
петерф

0

Щоб знати, чи встановлений Ubuntu має 32 або 64 біти:

а) getconf LONG_BIT

б) уніме -м

Якщо він показує i686 або i386, це означає 32 біт. Якщо він показує x86_64, це означає 64 біт.

Якщо процесор має 32 біти, Ubuntu має бути 32 біта. Якщо процесор має 64 біти, він може працювати в 64 або 32 біт. Тож ми можемо вибрати: Ubuntu може мати 32 біти або 64 біта.

Щоб знати, чи має процесор 32 або 64 біта:

а) grep -w lm / proc / cpuinfo

Якщо ми бачимо, що lm у червоному кольорі - це 64 біт. В іншому випадку це 32 біта.

б) sudo lshw | grep "опис: CPU" -A 12 | ширина затискача

Це чітко говорить про те, що ми хочемо знати.

Команда для обох даних:

lscpu

Потрібно лише ознайомитися з першими двома рядками виводу: “Архітектура” повідомляє про встановлену версію Linux: “i686 ″ являє собою один з 32 біт, а“ x86_64 ″ означає 64 біт. "Оп-режим (и) CPU" повідомляє про процесор. "32-бітний" являє собою один з 32 бітів, тоді як "32-бітний, 64-бітний" або "64-розрядний" означає 64-бітний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.