C/C++

Почему команды уровня операционной системы выполняются сразу же микроархитектурой а не операционной системой?

AM
Anar Maxmudov
94 332
Команды уровня операционной системы чаще всего представляют цепочки команд микропроцессора. Но среди них могут быть и простые команды, которые требуют для выполнения только одной команды микропроцессора, выполняемой в нем внутренней микропрограммой.
ИП
Игорь Пугачёв
80 509
Лучший ответ
>Почему команды уровня операционной системы выполняются сразу же микроархитектурой....
Вопрос некорректен. В API операционной системы есть НЕКОТОРЫЕ команды, которые соответствуют низкоуровневым командам процессора, но не все "команды уровня операционной системы" выполняются сразу же микроархитектурой

Возьмем для примера такую "команду" операционной системы: ScsiPortReadPortUchar()
https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/srb/nf-srb-scsiportreadportuchar

Понятно, что данная "команда" операционной системы является макросом, читающим из порта ввода-вывода 1 байт, т.е. в рамках x86 архитектуры это будет что-то типа
in al, <номер_порта>

Зачем сделан такой макрос? Чтобы не переходить из языка Си на ассемблерную вставку (не переносимую ни на другую архитектуру, ни даже на x64 исходник). А также для того, чтобы можно было не изменяя логику драйвера, перенести его исходный код на другую архитектуру, где вообще может не быть понятия пространства портов ввода-вывода, например. В таком случае на той гипотетической архитектуре под макросом ScsiPortReadPortUchar будет уже не чтение порта, а, например, чтение ячейки памяти, на которую замаплены bar-регистры устройства.
Сергей Шаврин
Сергей Шаврин
30 169
Так быстрее
Простой пример:Unix/Posix часы.
Работают когда устройство выключено и почти разряжено, потребляют мало энергии.
Есть предположения:
1.Операционную систему для данных команд использовать не нужно
2.Банальная энергоэффективность.
Могу быть не прав
Sudo Sh
Sudo Sh
1 992
Потому-что
Потому что операционная система не тянет (видимо)
Hudayarkan Takiev
Hudayarkan Takiev
116