Какая бинарная совместимость присутствует для 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. Как операционная система определяет модель ЦП с помощью одной и той же бинарно-совместимой программы?
Архитектура определяет, какие результаты может ожидать программное обеспечение при работе с реализацией, соответствующей архитектуре. По сути, это контракт, который обеспечивает бинарную совместимость между различными реализациями и микроархитектурами.
В общем, ISA составляет только (небольшую) часть архитектуры (x86, AMD64, ARM, RV и т. д.). Архитектура также определяет регистры, отладку, обработку исключений, [..]. Любой проект, реализующий данную архитектуру, должен также включать эти различные элементы, чтобы соответствовать этой архитектуре.
В вашем конкретном вопросе об идентификации ЦП архитектура будет определять методы определения идентификатора реализации, дополнительных архитектурных функций и т. д. Ответ Джонатана охватывает CPUID
инструкцию в x86 (_64) и показывает двоичную совместимость при работе в разных реализациях архитектуры. Вот ответ на SO, в котором описывается использование доступа к регистрам для поиска аналогичной информации в реализации ARM64 (AArch64). (Кстати, разные способы доступа к этой информации в этих двух примерах (x86, ARM) являются хорошим примером концептуальной разницы между архитектурой CISC и RISC.)
Для x86 вы можете использовать инструкцию CPUID . Он позволяет вам запрашивать различную информацию о процессоре. Он встроен прямо в ЦП (и не является службой операционной системы).
AuthenticAMD
, GenuineIntel
, CentaurHauls
, и т. д.), а также другие результаты, которые можно декодировать для получения другой полезной информации.В RISC-V есть регистр идентификатора реализации машины (mimpid), который обеспечивает уникальную кодировку источника и версии реализации процессора.
Источник: Руководство по набору инструкций RISC-V, том II: Привилегированная архитектура, версия 1.7.
Питер Смит
Неважно
Только я
ДонФусили