Linux 上的 32 位、64 位 CPU 操作模式
我很困惑。執行 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
說我的 CPU 可以在 64 位模式下執行更感興趣;顯然這並不意味著我可以執行 64 位程序。誰能澄清一下?
lscpu
告訴您您的架構是 i686(Intel 32 位 CPU),並且您的 CPU 支持 32 位和 64 位操作模式。您將無法安裝 x64 建構的應用程序,因為它們是專門為 x64 架構建構的。您的特定 CPU 可以處理 i386 或 i686 建構的軟體包。有多種方法可以驗證您的架構和作業系統偏好。
處理器
如您所知,您可以使用命令 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/cpuinfo
這實際上是核心提供的數據,大多數工具如
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
告訴您您的處理器支持“長模式”。長模式是 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
. 您可以在coreutils 文件中閱讀有關該arch
命令的更多資訊。摘抄
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
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
CPU 開啟模式?
一些命令報告說看起來像是 32 位 CPU 的東西支持 32 位和 64 位模式。這可能有點令人困惑和誤導,但是如果您了解 CPU 的歷史,特別是英特爾,您就會知道他們有使用其產品玩遊戲的歷史,其中 CPU 可能具有支持 16 位的指令集,但可以解決 2^16 以上的 RAM。
這些 CPU 也發生了同樣的事情。大多數人都知道 32 位 CPU 只能定址 2^32 = 4GB 的 RAM。但是有些版本的 CPU 可以解決更多問題。這些 CPU 通常會使用帶有PAE-Physical Address Extension後綴的 Linux 核心。將啟用 PAE 的核心與此硬體一起使用將允許您在 32 位系統上定址高達 64GB。
您可能想得很好,那為什麼我需要 64 位架構?這些 CPU 的問題在於單個程序空間被限制為 2^32,因此如果您有一個大型模擬或計算程序需要超過 RAM 中 2^32 的可定址空間,那麼這對您沒有幫助接著就,隨即。
查看P6 微架構 (i686)上的維基百科頁面了解更多資訊。
TL;DR - 那麼我的 CPU 架構到底是什麼?
一般來說,它可能會讓人感到困惑,因為上面的許多命令和方法都鬆散地使用了術語“架構”。如果您對底層作業系統是 32 位還是 64 位感興趣,請使用以下命令:
- 處理器
- getconf LONG_BIT
- 無名
另一方面,如果您想了解 CPU 的架構,請使用以下命令:
- /proc/cpuinfo
- 華文資訊
- lshw
具體來說,如果您使用類似 的工具,您希望查找顯示“width: 64”或“width: 32”之類的欄位
lshw
,或者查找標誌:
lm
:長模式(x86-64:amd64,也稱為Intel 64,即支持64位)lahf_lm
: 長模式下的 LAHF/SAHF這 2 個標誌的存在告訴您 CPU 是 64 位的。他們的缺席告訴您它是 32 位的。
有關 CPU 標誌的更多資訊,請參閱這些 URL。
參考
手冊頁
文章: