Chế độ op CPU 32 bit, 64 bit trên Linux


15

Tôi bối rối. Chạy Fedora Linux, lscpumang lại:

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

Nhưng khi tôi cố gắng cài đặt chương trình 64 bit (Chrome), tôi gặp lỗi như:

Gói /....x86_64.rpm có kiến ​​trúc không tương thích x86_64. Các kiến ​​trúc hợp lệ là ['i686', 'i586', 'i486', i386 ']

Tôi ít quan tâm đến việc có thể cài đặt Chrome và quan tâm nhiều hơn đến lý do tại sao lscpunói rằng CPU của tôi có thể chạy ở chế độ 64 bit; rõ ràng điều này không có nghĩa là tôi có thể chạy các chương trình 64 bit. Bất cứ ai có thể làm rõ?


bạn có thể chia sẻ đầu ra không cat /proc/cpu, tôi nghĩ lúc khởi động bạn có thể chọn nếu bạn muốn khởi động ở chế độ 64 hoặc 32 bit
Raza

1
Bạn đang sử dụng HĐH 32 bit hay 64 bit?
Renan

@Salton Tôi có một /proc/cpuinfo. Nhưng điều này đặt ra nhiều câu hỏi tò mò hơn. Các *_lmcờ cho thấy cả hai bộ vi xử lý của tôi hỗ trợ chế độ dài, nhưng kích thước địa chỉ là "36 bit vật lý", ..
Zak

Câu trả lời:


32

lscpuđang nói với bạn rằng kiến ​​trúc của bạn là i686 (CPU Intel 32 bit) và CPU của bạn hỗ trợ cả hai chế độ hoạt động 32 bit và 64 bit. Bạn sẽ không thể cài đặt các ứng dụng được xây dựng x64 vì chúng được xây dựng dành riêng cho kiến ​​trúc x64.

CPU cụ thể của bạn có thể xử lý các gói được xây dựng i386 hoặc i686. Có một số cách để xác minh tùy chọn kiến ​​trúc & hệ điều hành của bạn.

lscpu

Như bạn đã biết, bạn có thể sử dụng lệnh lscpu. Nó hoạt động tốt trong việc cung cấp cho bạn một ý tưởng sơ bộ về khả năng CPU của bạn.

$ 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

Đây thực sự là dữ liệu được cung cấp bởi kernel mà hầu hết các công cụ như lscpusử dụng để hiển thị. Tôi thấy đầu ra này hơi tốt trong thực tế là nó cho bạn thấy một số thông tin số mô hình về CPU cụ thể của bạn. Ngoài ra, nó sẽ hiển thị cho bạn một phần cho mỗi lõi mà CPU của bạn có thể có.

Đây là đầu ra cho một lõi đơn:

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

Đây là 3 dòng đầu tiên của mỗi phần cho một lõi trông như thế nào:

$ 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

Đầu ra từ /proc/cpuinfocũng có thể cho bạn biết loại kiến ​​trúc mà CPU của bạn đang cung cấp thông qua các cờ khác nhau mà nó hiển thị. Lưu ý các dòng này từ lệnh trên:

$ 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

Các cờ kết thúc _lmcho bạn biết rằng bộ xử lý của bạn hỗ trợ "chế độ dài". Chế độ dài là tên gọi khác của 64-bit.

uname

Lệnh này có thể được sử dụng để xác định nền tảng nào mà kernel của bạn được xây dựng để hỗ trợ. Ví dụ:

Nhân 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

Nhân 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

Sản lượng này có thể được cải tiến một chút nữa bằng cách sử dụng công tắc, [-m|--machine], [-p|--processor], và [-i|--hardware-platform].

Đây là đầu ra cho các hệ thống trên.

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

LƯU Ý: Ngoài ra còn có phiên bản dạng ngắn uname -mmà bạn có thể chạy dưới dạng một lệnh độc lập , arch. Nó trả về chính xác điều tương tự như uname -m. Bạn có thể đọc thêm về archlệnh trong tài liệu coreutils .

đoạn trích

vòm in tên phần cứng của máy và tương đương với 'uname -m'.

hwinfo

Có lẽ là công cụ tốt nhất để phân tích phần cứng của bạn phải có hwinfo. Gói này có thể hiển thị cho bạn khá nhiều thứ bạn muốn / cần biết về bất kỳ phần cứng nào của bạn, ngay từ thiết bị đầu cuối. Việc này giúp tôi tiết kiệm hàng chục lần khi tôi cần một số thông tin về chip trên bo mạch chủ của hệ thống hoặc cần biết sửa đổi bảng trong khe cắm PCI.

Bạn có thể truy vấn nó dựa trên các hệ thống con khác nhau của máy tính. Trong trường hợp của chúng tôi, chúng tôi sẽ xem xét cpuhệ thống con.

$ 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

Một lần nữa, tương tự như /proc/cpuinfolệnh này cho bạn thấy trang điểm của từng lõi riêng lẻ trong một hệ thống đa lõi. Đây là dòng đầu tiên từ mỗi phần của lõi, chỉ để cung cấp cho bạn một ý tưởng.

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

nhận được

Đây có lẽ là cách rõ ràng nhất để nói kiến ​​trúc mà CPU của bạn đang trình bày với HĐH. Sử dụng getconf, truy vấn của bạn biến hệ thống LONG_BIT. Đây không phải là một biến môi trường.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

Một công cụ khác, tương tự về khả năng hwinfo. Bạn có thể truy vấn khá nhiều thứ bạn muốn biết về phần cứng bên dưới. Ví dụ:

# 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)?

Một số lệnh báo cáo rằng những gì có vẻ là CPU 32 bit như hỗ trợ chế độ 32 bit & 64 bit. Điều này có thể hơi khó hiểu và gây hiểu lầm, nhưng nếu bạn hiểu lịch sử của CPU, cụ thể là Intel, bạn sẽ biết rằng họ có lịch sử chơi trò chơi với các sản phẩm của mình trong đó CPU có thể có bộ hướng dẫn hỗ trợ 16 bit, nhưng có thể giải quyết nhiều RAM hơn 2 ^ 16.

Điều tương tự đang diễn ra với các CPU này. Hầu hết mọi người đều biết rằng CPU 32 bit chỉ có thể giải quyết 2 ^ 32 = 4GB RAM. Nhưng có những phiên bản CPU có thể giải quyết nhiều hơn. Các CPU này thường sử dụng nhân Linux với hậu tố PAE - Phần mở rộng địa chỉ vật lý . Sử dụng kernel hỗ trợ PAE cùng với phần cứng này sẽ cho phép bạn giải quyết tối đa 64GB trên hệ thống 32 bit.

Bạn có thể nghĩ tốt sau đó tại sao tôi cần một kiến ​​trúc 64 bit? Vấn đề với các CPU này là một không gian xử lý duy nhất bị giới hạn ở 2 ^ 32, vì vậy nếu bạn có một chương trình mô phỏng hoặc tính toán lớn cần nhiều hơn 2 ^ 32 không gian có thể định địa chỉ trong RAM, thì điều này sẽ không giúp bạn với.

Hãy xem trang wikipedia trên vi kiến ​​trúc P6 (i686) để biết thêm thông tin.

TL; DR - Vậy kiến ​​trúc CPU của tôi là cái quái gì vậy?

Nói chung, nó có thể gây nhầm lẫn bởi vì một số lệnh và phương pháp ở trên đang sử dụng thuật ngữ "kiến trúc" một cách lỏng lẻo. Nếu bạn quan tâm đến việc hệ điều hành cơ bản là 32 bit hay 64 bit, hãy sử dụng các lệnh sau:

  • lscpu
  • nhận được LONG_BIT
  • uname

Mặt khác, nếu bạn muốn biết kiến ​​trúc của CPU, hãy sử dụng các lệnh sau:

  • / Proc / cpuinfo
  • hwinfo
  • lshw

Cụ thể, bạn muốn tìm các trường có ghi những thứ như "width: 64" hoặc "width: 32" nếu bạn đang sử dụng một công cụ như lshwhoặc tìm các cờ:

  • lm: Chế độ dài (x86-64: amd64, còn được gọi là Intel 64, tức là có khả năng 64 bit)
  • lahf_lm: LAHF / SAHF ở chế độ dài

Quà của 2 lá cờ này cho bạn biết rằng CPU là 64 bit. Sự vắng mặt của họ cho bạn biết rằng đó là 32-bit.

Xem các URL này để biết thêm thông tin về các cờ CPU.

Người giới thiệu

trang người đàn ông

bài viết:


Bạn có thể giải thích tại sao HĐH 32 bit có thể có "chế độ op" 64 bit không? Câu trả lời của bạn ngụ ý rằng nó có thể.
djangofan

Đúng rồi. Xem cập nhật của tôi, lmk nếu điều đó có ý nghĩa.
slm

Rõ ràng là một câu trả lời tuyệt vời. Cám ơn rất nhiều! Intel chơi trò chơi
Zak

Vì vậy, để rõ ràng, lscpucó phần sai lệch trong đó "Architecture: i686" thực sự đề cập đến việc chạy HĐH 32 bit.
Zak

1
Googling cho thông tin này có rất nhiều nhầm lẫn xung quanh chủ đề cụ thể này. Câu hỏi này xuất hiện trên rất nhiều trang SE. Nhiều câu trả lời trên các trang web cũng bị nhầm lẫn về chủ đề này. Vì vậy, đây là một nỗ lực để cố gắng và cung cấp một câu trả lời bao quát cho chủ đề, không chỉ để trả lời câu hỏi của OP.
slm

4

Nếu kernel của bạn là kernel linux 32 bit, bạn sẽ không thể chạy các chương trình 64 bit, ngay cả khi bộ xử lý của bạn hỗ trợ nó.

Cài đặt kernel 64 bit (và tất nhiên cả hệ điều hành) để chạy 64 bit


Nếu cpu của bạn hỗ trợ VT-x / AMD- bạn vẫn có thể sử dụng các chương trình 64 bit trong HĐH 32 bằng phần mềm ảo hóa như Virtualbox / WMware.
m3nda

1

Để hoàn thiện: vì trên hầu hết các kiến ​​trúc 64 bit, có thể chạy mã 32 bit, trong cả không gian nhân và không gian người dùng, không nên quên rằng thực sự có 4 kết hợp có thể:

  • Không gian người dùng 32 bit trên kernel 32 bit
  • Không gian người dùng 64 bit trên kernel 64 bit
  • Không gian người dùng 32 bit trên kernel 64 bit
  • cả không gian người dùng 64 bit và 32 bit trên kernel 64 bit

unamelà cách thông thường để xác định biến thể kernel. Đối với không gian người dùng, filekhá tốt trong việc nhận ra các tệp thực thi: file $SHELLhoặc file /sbin/initlà các thành ngữ thuận tiện. Chỉ có sự tồn tại của cả hai /lib/*.so /lib64/*.so thường là dấu hiệu tốt, hệ thống thể thao cả hai biến thể không gian người dùng.


Trên thực tế có 5. Sự kết hợp đầu tiên có thể là "... trên phần cứng 32 bit" hoặc "... trên phần cứng 64 bit". 3 phần còn lại yêu cầu phần cứng 64 bit.
Ben Voigt

Có, bằng cách nào đó tôi đã xem xét phần cứng 64 bit một cách ngầm định bằng cách viết trên hầu hết các kiến ​​trúc 64 bit .
peterph

0

Để biết Ubuntu đã cài đặt là 32 hay 64 bit:

a) nhận được LONG_BIT

b) uname -m

Nếu nó hiển thị i686 hoặc i386, nó có nghĩa là 32 bit. Nếu nó hiển thị x86_64, nó có nghĩa là 64 bit.

Nếu CPU là 32 bit thì Ubuntu phải là 32 bit. Nếu CPU là 64 bit, nó có thể hoạt động ở 64 hoặc 32 bit. Vì vậy, chúng ta có thể chọn: Ubuntu có thể là 32 bit hoặc 64 bit.

Để biết CPU có 32 hay 64 bit:

a) grep -w lm / Proc / cpuinfo

Nếu chúng ta thấy lm màu đỏ là 64 bit. Mặt khác là 32 bit.

b) sudo lshw | grep "mô tả: CPU" -A 12 | chiều rộng grep

Nó nói rõ ràng những gì chúng ta muốn biết.

Một lệnh cho cả hai infos:

lscpu

Chúng ta chỉ cần nhìn vào 2 dòng đầu tiên của đầu ra: Kiến trúc Kiến thức thông báo về phiên bản Linux đã cài đặt: Thời i686 ″ đại diện cho một trong 32 bit, trong khi đó, x86_64 là viết tắt của một bit 64 bit. Các chế độ op của CPU CPU (s) Thông báo về CPU. Cốt truyện 32-bit, đại diện cho một trong 32 bit, trong khi đó, 32-bit, 64-bit, hay 64-bit là viết tắt của một bit 64 bit.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.