GNU/Linux >> Linux Esercitazione >  >> Linux

Modalità operativa CPU a 32 bit e 64 bit su Linux

lscpu ti sta dicendo che la tua architettura è i686 (una CPU Intel a 32 bit) e che la tua CPU supporta entrambe le modalità operative a 32 e 64 bit. Non sarai in grado di installare applicazioni basate su x64 poiché sono create appositamente per le architetture x64.

La tua particolare CPU può gestire i pacchetti compilati i386 o i686. Esistono diversi modi per verificare le preferenze relative all'architettura e al sistema operativo.

lscpu

Come già saprai, puoi utilizzare il comando lscpu. Funziona bene dandoti un'idea approssimativa di cosa è capace la tua 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

Questi sono in realtà i dati forniti dal kernel che la maggior parte degli strumenti come lscpu utilizzare per visualizzare. Trovo questo output un po' carino nel fatto che mostra alcune informazioni sul numero di modello della tua particolare CPU. Inoltre ti mostrerà una sezione per ogni core che potrebbe avere la tua CPU.

Ecco l'output per un singolo core:

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

Ecco come appaiono le prime 3 righe di ogni sezione per un nucleo:

$ 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

L'output di /proc/cpuinfo può anche dirti il ​​tipo di architettura che la tua CPU sta fornendo attraverso i vari flag che mostra. Nota queste righe dal comando precedente:

$ 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

I flag che terminano con _lm dirti che il tuo processore supporta la "modalità lunga". La modalità lunga è un altro nome per 64 bit.

nome

Questo comando può essere utilizzato per determinare quale piattaforma è stata creata per supportare il tuo kernel. Ad esempio:

kernel a 64 bit

$ 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

kernel a 32 bit

$ 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

Questo output può essere perfezionato un po' ulteriormente usando gli switch [-m|--machine] , [-p|--processor] e [-i|--hardware-platform] .

Ecco l'output per gli stessi sistemi di cui sopra.

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

NOTA: Esiste anche una versione abbreviata di uname -m che puoi eseguire come comando autonomo, arch . Restituisce esattamente la stessa cosa di uname -m . Puoi leggere di più sul arch comando nella documentazione di coreutils.

estratto

arch stampa il nome hardware della macchina ed è equivalente a "uname -m".

hwinfo

Probabilmente il miglior strumento per analizzare il tuo hardware deve essere hwinfo . Questo pacchetto può mostrarti praticamente tutto ciò che vorresti/devi sapere su qualsiasi hardware, direttamente dal terminale. Mi ha salvato dozzine di volte quando avevo bisogno di alcune informazioni su un chip sulla scheda madre di un sistema o avevo bisogno di conoscere la revisione di una scheda in uno slot PCI.

Puoi interrogarlo sui diversi sottosistemi di un computer. Nel nostro caso esamineremo il cpu sottosistema.

$ 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

Di nuovo, simile a /proc/cpuinfo questo comando mostra la composizione di ogni singolo core in un sistema multi-core. Ecco la prima riga di ogni sezione di un nucleo, solo per darti un'idea.

$ 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

Questo è probabilmente il modo più ovvio per dire quale architettura presenta la tua CPU al sistema operativo. Facendo uso di getconf , stai interrogando la variabile di sistema LONG_BIT. Questa non è una variabile d'ambiente.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

Ancora un altro strumento, simile nelle capacità a hwinfo . Puoi interrogare praticamente tutto ciò che vuoi sapere sull'hardware sottostante. Ad esempio:

# 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: [email protected]
   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: [email protected]
   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

Modalità operativa CPU?

Molti dei comandi riportano che quella che sembra essere una CPU a 32 bit supporta le modalità a 32 e 64 bit. Questo può creare un po' di confusione e fuorviante, ma se comprendi la storia delle CPU, Intel in particolare, saprai che hanno una storia di giochi con i loro prodotti in cui una CPU potrebbe avere un set di istruzioni che supporta 16 bit, ma può indirizzare più RAM di 2 ^ 16.

La stessa cosa sta succedendo con queste CPU. La maggior parte delle persone sa che una CPU a 32 bit può indirizzare solo 2 ^ 32 =4 GB di RAM. Ma ci sono versioni di CPU che possono indirizzare di più. Queste CPU fanno spesso uso di un kernel Linux con il suffisso PAE - Physical Address Extension. L'utilizzo di un kernel abilitato per PAE insieme a questo hardware consente di indirizzare fino a 64 GB su un sistema a 32 bit.

Potresti pensare bene, allora perché ho bisogno di un'architettura a 64 bit? Il problema con queste CPU è che lo spazio di un singolo processo è limitato a 2 ^ 32, quindi se hai un grande programma di simulazione o computazionale che necessita di più di 2 ^ 32 di spazio indirizzabile nella RAM, allora questo non ti avrebbe aiutato con quello.

Dai un'occhiata alla pagina di wikipedia sulla microarchitettura P6 (i686) per maggiori informazioni.

TL;DR - Allora, qual è l'architettura della mia CPU?

In generale può creare confusione perché un certo numero di comandi e metodologie di cui sopra usano il termine "architettura" in modo approssimativo. Se sei interessato a sapere se il sistema operativo sottostante è a 32 o 64 bit, utilizza questi comandi:

  • lscpu
  • getconf LONG_BIT
  • uname

Se invece vuoi conoscere l'architettura della CPU usa questi comandi:

  • /proc/cpuinfo
  • hwinfo
  • lshw

In particolare, vuoi cercare i campi in cui si dice cose come "larghezza:64" o "larghezza:32" se stai usando uno strumento come lshw , oppure cerca i flag:

  • lm :Long Mode (x86-64:amd64, noto anche come Intel 64, ovvero compatibile con 64 bit)
  • lahf_lm :LAHF/SAHF in modalità lunga

I regali di questi 2 flag ti dicono che la CPU è a 64 bit. Le loro assenze ti dicono che è a 32 bit.

Consulta questi URL per ulteriori informazioni sui flag della CPU.

  • Cosa significano i flag in /proc/cpuinfo?
  • Flag delle funzionalità della CPU e loro significato

Riferimenti

pagine man

  • pagina man di lscpu
  • /proc/cpuinfo pagina di riferimento
  • pagina man di uname
  • pagina man di hwinfo
  • pagina man di getconf

articoli:

  • Controllare se una macchina funziona con sistema operativo Linux/processore a 64 bit o 32 bit?
  • Scopri se il processore è a 32 bit o 64 (Linux)
  • Ho bisogno di aiuto:controllo a 32 bit/64 bit per Linux

Se il tuo kernel è un kernel Linux a 32 bit, non sarai in grado di eseguire programmi a 64 bit, anche se il tuo processore lo supporta.

Installa un kernel a 64 bit (e l'intero sistema operativo ovviamente) per eseguire 64 bit


Per completezza:poiché sulla maggior parte delle architetture a 64 bit è possibile eseguire codice a 32 bit, sia nello spazio kernel che nello spazio utente, non bisogna dimenticare che in realtà ci sono 4 combinazioni possibili:

  • Spazio utente a 32 bit su un kernel a 32 bit
  • Spazio utente a 64 bit su un kernel a 64 bit
  • Spazio utente a 32 bit su un kernel a 64 bit
  • entrambi Spazi utente a 64 e 32 bit su un kernel a 64 bit

uname è il modo usuale per determinare la variante del kernel. Per spazio utente, file è abbastanza bravo a riconoscere gli eseguibili:file $SHELL o file /sbin/init sono modi di dire convenienti. Solo l'esistenza di entrambi /lib/*.so e /lib64/*.so di solito è una buona indicazione che il sistema presenta entrambe le varianti dello spazio utente.


Linux
  1. Servizio del sistema operativo Linux 'cpuspeed'

  2. Come determinare se un determinato Linux è a 32 o 64 bit?

  3. Come compilare un binario a 32 bit su una macchina Linux a 64 bit con gcc/cmake

  4. Spazio degli indirizzi del processo a 32 bit su Linux a 64 bit

  5. Esiste un modo per ottenere time_t a 64 bit nei programmi a 32 bit in Linux?

Come visualizzare la temperatura della CPU su Linux

comando iostat in Linux

Il tuo Ubuntu è un sistema operativo a 32 o 64 bit?

Come sapere se hai un computer a 32 bit o 64 bit in Linux e Windows

Come sapere se la versione a 32 bit o 64 bit di Linux

Come verificare il sistema Linux è a 32 o 64 bit?