在Microsoft Windows上,您可以通过WMI获取处理器ID(非进程ID),WMI基于此情况(仅在获取处理器ID时)在CPUID指令上 是否有类似的方法在Linux上获取此ID?
答案 0 :(得分:1)
我不知道WMI
是什么和MS-Windows“CPUID
指令”,因为我不知道或使用MS-Windows(这里的用户很少)。所以我不能肯定地说这是否提供相同的信息,但试试cat /proc/cpuinfo
。如果您需要特定值,则可以轻松grep
。
如果您需要在程序中执行此操作,则可以使用文件utils来读取此类信息。始终牢记“unix”风格操作系统的最基本原则之一:一切都是文件。
答案 1 :(得分:1)
对于OP问题的上下文,WMI返回的ProcessorID
值为documented因此:
描述处理器功能的处理器信息。为 x86类CPU,字段格式取决于处理器的支持 CPUID指令。如果指令受支持,则属性 包含2(两)个DWORD格式的值。第一个是偏移量 08h-0Bh,这是CPUID指令返回的EAX值 输入EAX设置为1.第二个是0Ch-0Fh的偏移量,即 指令返回的EDX值。只有前两个字节 属性很重要,包含DX的内容 在CPU复位时注册 - 所有其他都设置为0(零)和内容 是DWORD格式。
例如,在我的系统上:
C:\>wmic path Win32_Processor get ProcessorId
ProcessorId
BFEBFBFF000206A7
请注意,ProcessorID只是一种二进制编码格式的信息,通常以其他格式提供,特别是签名(族/模型/步进/处理器类型)和功能标记。如果您只需要这些信息,则可能实际上并不需要此ID - 只需从/proc/cpuinfo
获取已解码的信息。
如果你真的想要这8个字节,有几种方法可以在Linux中获取ProcessorID。
使用root / sudo时,ID包含在dmidecode
:
<snip>
Handle 0x0004, DMI type 4, 35 bytes
Processor Information
Socket Designation: CPU Socket #0
Type: Central Processor
Family: Other
Manufacturer: GenuineIntel
ID: A7 06 02 00 FF FB EB BF
<snip>
请注意,字节顺序是相反的:Windows以Big-Endian顺序返回结果,而Linux以Little-Endian顺序返回它们。
如果您没有root权限,则几乎可以通过二进制编码它返回的值从/proc/cpuinfo
重建ProcessorID。对于&#34;签名&#34; (Windows中的前四个字节/ Linux中的前四个字节)您可以对从/proc/cpuinfo
提取的标识进行二进制编码,以符合Intel Documentation图5-2(其他制造商使用它来实现兼容性)。 / p>
/proc/cpuinfo
没有告诉您这一点,假设为0)类似地,您可以通过迭代flags
中的功能标志(/proc/cpuinfo
)并根据上面链接的英特尔文档的表5-5设置适当的位来填充剩余的四个字节。 / p>
最后,您可以安装cpuid
包(例如,在Ubuntu上,sudo apt-get install cpuid
)。然后通过运行cpuid -r
(raw)命令,您可以解析其输出。您可以将EAX和EDX寄存器中的值组合起来,使初始EAX值为1:
$ cpuid -r
CPU 0:
0x00000000 0x00: eax=0x0000000d ebx=0x756e6547 ecx=0x6c65746e edx=0x49656e69
0x00000001 0x00: eax=0x000206a7 ebx=0x00020800 ecx=0x9fba2203 edx=0x1f8bfbff
<snip>