Linux의 32비트, 64비트 CPU 작동 모드

Linux의 32비트, 64비트 CPU 작동 모드

혼란스러워요. 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프로세서가 "긴 모드"를 지원함을 알려줍니다. Long 모드는 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 = 4GB RAM만 처리할 수 있다는 것을 알고 있습니다. 그러나 일부 버전의 CPU는 더 많은 데이터를 처리할 수 있습니다. 이러한 CPU는 일반적으로 접미사가 붙은 Linux 커널을 사용합니다.PAE - 물리적 주소 확장. 이 하드웨어와 함께 PAE 가능 커널을 사용하면 32비트 시스템에서 최대 64GB까지 주소를 지정할 수 있습니다.

그렇다면 왜 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비트에서 작동할 수 있습니다. 따라서 우분투는 32비트일 수도 있고 64비트일 수도 있습니다.

CPU가 32비트인지 64비트인지 확인하려면 다음을 수행하세요.

a) grep -w lm /proc/cpuinfo

빨간색 lm이 보이면 64비트입니다. 그렇지 않으면 32비트입니다.

b) sudo lshw | grep "설명: CPU" -A 12 |

우리가 알고 싶은 것이 무엇인지 명확하게 기술되어 있습니다.

두 가지 메시지 명령:

LSCPU

출력의 처음 두 줄만 보면 됩니다. "Architecture"는 설치된 Linux 버전을 나타냅니다. "i686"은 32비트 버전을 나타내고 "x86_64"는 64비트 버전을 나타냅니다. "CPU 작동 모드"는 CPU에 대한 정보를 알려줍니다. "32비트"는 32비트 중 하나를 나타내고, "32비트, 64비트" 또는 "64비트"는 64비트 중 하나를 나타냅니다.

관련 정보