Как операционная система или программа определяет название модели процессора? [закрыто]

Какая бинарная совместимость присутствует для 2 процессоров, использующих набор инструкций? . Я задал вопрос на бирже стека компьютерных наук, на который получил ответ, в котором говорилось:

В качестве тривиальной задачи вы можете написать программу, которая будет пытаться печатать, на каком процессоре она работает, сколько ядер, сколько памяти и т. д. и т. д. Такая программа, очевидно, должна давать разные результаты на процессорах x86 и AMD.

Я не мог сообразить, как написать программу на любом языке программирования или ассемблере, которая правильно печатает название процессора. Такая программа будет печатать «Intel i3-3220» на машине с Intel i3-3220 и «AMD Ryzen 5000…» (точное название модели не знаю) на машине с AMD Ryzen 5000. Поскольку оба процессора бинарно совместимы, я смогу написать программу, которая будет работать на обоих процессорах без перекомпиляции. Если существует программа для печати имени процессора, она должна сначала определить процессор. Конечно, он может запросить у операционной системы имя процессора, но это не то же самое, что написать программу для определения модели процессора. Я не думаю, что такая программа существует. Но операционная система правильно определяет модель процессора.

Ubuntu использует одну и ту же операционную систему для процессоров AMD и Intel x86-64. Доступна только одна x86-64-разрядная версия под названием AMD64, которая работает как на машинах AMD, так и на машинах Intel x86-64. Как операционная система определяет модель ЦП с помощью одной и той же бинарно-совместимой программы?

Большинство, если не все, современные процессоры имеют регистры идентификатора и версии. Обычно это числовые коды, поэтому вам понадобится таблица перевода, чтобы фактически напечатать тип и версию процессора.
@Justme CPUID на x86 может возвращать имя/модель процессора в виде удобочитаемой строки (функция от 0x80000002 до 0x80000004).
@Unimportant Спасибо за исправление, поэтому современные процессоры включают расширения для предоставления пользователю строки для печати.
@PeterSmith Большинство UC, над которыми я работал, даже имели действительный ASCII в идентификационных регистрах. Однако это были специальные ядра с пользовательскими наборами инструкций, а это означает, что не было необходимости в стандартизированном управлении версиями, как вы ожидаете в массовом производстве бытовой электроники.

Ответы (3)

Архитектура определяет, какие результаты может ожидать программное обеспечение при работе с реализацией, соответствующей архитектуре. По сути, это контракт, который обеспечивает бинарную совместимость между различными реализациями и микроархитектурами.

В общем, ISA составляет только (небольшую) часть архитектуры (x86, AMD64, ARM, RV и т. д.). Архитектура также определяет регистры, отладку, обработку исключений, [..]. Любой проект, реализующий данную архитектуру, должен также включать эти различные элементы, чтобы соответствовать этой архитектуре.

В вашем конкретном вопросе об идентификации ЦП архитектура будет определять методы определения идентификатора реализации, дополнительных архитектурных функций и т. д. Ответ Джонатана охватывает CPUIDинструкцию в x86 (_64) и показывает двоичную совместимость при работе в разных реализациях архитектуры. Вот ответ на SO, в котором описывается использование доступа к регистрам для поиска аналогичной информации в реализации ARM64 (AArch64). (Кстати, разные способы доступа к этой информации в этих двух примерах (x86, ARM) являются хорошим примером концептуальной разницы между архитектурой CISC и RISC.)

Для x86 вы можете использовать инструкцию CPUID . Он позволяет вам запрашивать различную информацию о процессоре. Он встроен прямо в ЦП (и не является службой операционной системы).

Итак, эта инструкция CPUID работает как для Intel x86-64, так и для AMD x86-64? Могу ли я иметь программу в двоичном формате, которая может работать как на процессорах Intel, так и на процессорах AMD и выдавать правильный (но другой) вывод?
@ShashankVM Да. Это назначение инструкции CPUID — вывод включает в себя строку поставщика ЦП (например AuthenticAMD, GenuineIntel, CentaurHauls, и т. д.), а также другие результаты, которые можно декодировать для получения другой полезной информации.
@nanofarad спасибо. Полезно знать, что эта функциональность CPUID не нарушает двоичную совместимость процессоров Intel и AMD x86-64.
@ShashankVM: это нарушает двоичную совместимость. Двоичная совместимость означает, что вы получите один и тот же результат, независимо от того, на каком процессоре вы его запускаете. Но вы не получите того же результата. На одном процессоре вы получаете «AMD», на другом — «Intel».
@ JörgWMittag Разве это не слишком строгое использование термина «бинарная совместимость»? ISTM, что это соответствует цели совместимости, несмотря на другой результат.
Доступны всевозможные процессорные расширения; Другая функция CPUID — предоставить машиночитаемое описание доступных наборов инструкций, чтобы ваша программа могла содержать несколько разных двоичных реализаций алгоритма для разных процессоров и выбирать одну во время выполнения .
Другими словами, бинарная совместимость с чем ?
@ShashankVM Re «Могу ли я иметь двоичную программу, которая может работать как на процессорах Intel, так и на AMD и выдавать правильный (но другой) вывод?» - у вас может быть программа, многократно запускаемая в одной и той же системе и производящая правильные, но разные выходные данные - например, счетчик меток времени чтения.
@pcj50 бинарная совместимость Intel x86-64 с AMD x86-64
@JörgWMittag: я не согласен. Если две системы успешно выполняют один и тот же двоичный файл (хотя определение «успеха» нетривиально), они бинарно-совместимы в отношении инструкций, используемых в этом двоичном файле. Или, другими словами, вы бы назвали два компьютера с одним и тем же процессором несовместимыми с двоичными файлами, если бы они давали разные результаты для данного двоичного файла из-за другого оборудования?

В RISC-V есть регистр идентификатора реализации машины (mimpid), который обеспечивает уникальную кодировку источника и версии реализации процессора.

Источник: Руководство по набору инструкций RISC-V, том II: Привилегированная архитектура, версия 1.7.