2013-12-01 1 views
1

В Microsoft Windows вы можете получить идентификатор процессора (не идентификатор процесса) через WMI, который основан в этом случае (только при приобретении идентификатора процессора) по команде CPUID
Существует ли аналогичный метод для получения этого идентификатора на Linux?Идентификатор процессора Acquring в Linux

+0

принять посмотреть здесь: [получить-CPUID-программы] [1] Небольшой c- программа показывает, как это происходит. [1]: http://stackoverflow.com/questions/15368394/determine-cpuid-as-listed-in-the-intel-intrinsics-guide – user3054986

+0

Спасибо за вашу помощь –

ответ

1

Я не знаю, что такое WMI и MS-Windows «CPUID инструкция», так как я не знаю или не использую MS-Windows (здесь мало пользователей). Поэтому я не могу сказать точно, если это предлагает ту же информацию, но попробуйте с cat /proc/cpuinfo. Если вам требуется определенное значение, вы можете легко удалить grep.

Если вам нужно сделать это изнутри программы, вы можете использовать файлы utils для чтения такой информации. Всегда помните об одном из основных принципов операционных систем стиля «unix»: все - файл.

+0

это набор info по wmi [WMI] (http://en.wikipedia.org/wiki/Windows_Management_Instrumentation) И инструкция CPUID не ограничивается Microsoft Windows, это на самом деле инструкция по сборке, см. [CPUID] (http: // ru. wikipedia.org/wiki/CPUID) –

+0

Вы думаете, что я не пытался увидеть файл cpuinfo? Поскольку я не получил результат, я ожидаю, что я разместил этот вопрос –

+0

Извините, я не могу _guess_ пытались ли вы прочитать файловую систему proc. Вы ничего не писали об этом, поэтому я предположил, что вы этого не сделали. По тому, как вы спрашиваете, я предположил, что вы новичок в Linux, поэтому я подумал, что подсказка в этом направлении может помочь. Это может быть неправильный вывод с моей стороны, не ошибайтесь. Но если вы не пишете то, что уже пробовали, то вы не можете ожидать, что мы об этом узнаем! И поскольку вы даже сейчас не писали, что вам до сих пор не хватает в этой информации, я не могу с этим поделать. Сожалею. – arkascha

1

Для контекста вопроса Ора, в ProcessorID значении, возвращенное WMI является documented таким образом:

Информации о процессоре, который описывает функцию процессора. Для процессора x86 формат поля зависит от поддержки процессора инструкции CPUID. Если инструкция поддерживается, свойство содержит 2 (два) формата в формате DWORD. Первый - это смещение 08h-0Bh, которое является значением EAX, которое возвращает команда CPUID с входом EAX , установленным в 1. Второй является смещением 0Ch-0Fh, который является значением EDX , которое возвращает инструкция. Только первые два байта являются значимыми и содержат содержимое регистра DX при сбросе ЦП. Все остальные установлены в 0 (ноль), а содержимое находятся в формате DWORD.

В качестве примера, на моей системе:

C:\>wmic path Win32_Processor get ProcessorId 
ProcessorId 
BFEBFBFF000206A7 

Обратите внимание, что ProcessorID просто двоичным кодом формата информации обычно доступны в других форматах, в частности, подпись (Семейный/модель/Stepping/Тип процессора) и флаги функций. Если вам нужна только информация, вам может не понадобиться этот идентификатор - просто получите уже декодированную информацию от /proc/cpuinfo.

Если вы действительно хотите эти 8 байтов, есть несколько способов получить ProcessorID в Linux.

с корневым/Судо, идентификатор содержится в выводе 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 возвращает их в Литтл -Индийский порядок.

Если у вас нет прав суперпользователя, то почти можно восстановить ProcessorID из /proc/cpuinfo двоичных-кодирования значений он возвращается. Для «подписи» (первые четыре байта в Windows/последние четыре байта в Linux) вы можете бинарно кодировать идентификацию, извлеченную из /proc/cpuinfo, чтобы соответствовать Intel Documentation. Рисунок 5-2 (другие производители используют его для совместимости).

  • Степпинга в битах 3-0
  • модели находится в битах 19-16 и 7-4
  • семьи в битах 27-20 и 11-8
  • типа процессора в битах 13 -12 (/proc/cpuinfo не говорит вам об этом, предположим, 0)

Кроме того, вы можете заполнить оставшиеся четыре байта перебором художественных флагов (flags ключ в /proc/cpuinfo) и установки битов в соответствующих случаях в таблице 5- 5 o Док-станция Intel связана выше.

Наконец, вы можете установить пакет 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>