
Возможно, это элементарный теоретический вопрос, но я понятия не имею, как на него ответить, и не нашел информации по этому поводу.
Должны ли операционные системы (представьте себе дистрибутивы Windows или Linux) знать, выполняются ли они в одной микроархитектуре или в другой (например, на архитектуре Intel Sandy Bridge или на архитектуре Intel Haswell)? Или ОС не имеет представления об этих деталях?
Тот факт, что операционная система является «мостом» между пользователем и архитектурой микропроцессора, заставил меня задуматься о том, что ОС действительно должна знать эти детали, поскольку, возможно, в ОС есть определенные функции, которые по-разному работают на Intel Sandy Bridge и на AMD Bulldozer.
Если ответ «да», то как оборудование взаимодействует с ОС, что является его архитектурой?
решение1
Intel и AMD x86 (и x86_64) — это одна и та же «архитектура» процессора с точки зрения операционной системы. Наборы «основных» инструкций идентичны и определяют минимальный уровень функциональности процессора.
Процессоры могут работать совершенно по-разномувнутреннеили дажефизически, но что касается машинного кода (шестнадцатеричные байты) для инструкций, то они идентичны. У них одинаковая внешняя архитектура (x86), но разныевнутреннийархитектуры (часто называемые uArch или микроархитектуры).
В результате начальная передача от системной прошивки (UEFI), которая выполняет базовую настройку материнской платы и инициализацию процессора, к операционной системе идентична для AMD и Intel, поскольку те же инструкции по загрузке байтов и выбору путей кода будут одинаковыми. После запуска загрузочного кода он может начать загружать библиотеки, которые могут обнаруживать расширения ЦП и запускать оптимизированный код в зависимости от того, что он находит.
ARM и x86 — это совершенно разные архитектуры как внутренне, так и внешне, и одни и те же байты машинного кода будут создавать совершенно разный или нефункциональный код, поэтому загрузочный исполняемый файл придется скомпилировать для конкретной архитектуры, на которой он запущен, чтобы сгенерировать правильный машинный код.