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

Команды уровня операционной системы чаще всего представляют цепочки команд микропроцессора. Но среди них могут быть и простые команды, которые требуют для выполнения только одной команды микропроцессора, выполняемой в нем внутренней микропрограммой.
>Почему команды уровня операционной системы выполняются сразу же микроархитектурой....
Вопрос некорректен. В API операционной системы есть НЕКОТОРЫЕ команды, которые соответствуют низкоуровневым командам процессора, но не все "команды уровня операционной системы" выполняются сразу же микроархитектурой
Возьмем для примера такую "команду" операционной системы: ScsiPortReadPortUchar()
https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/srb/nf-srb-scsiportreadportuchar
Понятно, что данная "команда" операционной системы является макросом, читающим из порта ввода-вывода 1 байт, т.е. в рамках x86 архитектуры это будет что-то типа
in al, <номер_порта>
Зачем сделан такой макрос? Чтобы не переходить из языка Си на ассемблерную вставку (не переносимую ни на другую архитектуру, ни даже на x64 исходник). А также для того, чтобы можно было не изменяя логику драйвера, перенести его исходный код на другую архитектуру, где вообще может не быть понятия пространства портов ввода-вывода, например. В таком случае на той гипотетической архитектуре под макросом ScsiPortReadPortUchar будет уже не чтение порта, а, например, чтение ячейки памяти, на которую замаплены bar-регистры устройства.
Вопрос некорректен. В API операционной системы есть НЕКОТОРЫЕ команды, которые соответствуют низкоуровневым командам процессора, но не все "команды уровня операционной системы" выполняются сразу же микроархитектурой
Возьмем для примера такую "команду" операционной системы: ScsiPortReadPortUchar()
https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/srb/nf-srb-scsiportreadportuchar
Понятно, что данная "команда" операционной системы является макросом, читающим из порта ввода-вывода 1 байт, т.е. в рамках x86 архитектуры это будет что-то типа
in al, <номер_порта>
Зачем сделан такой макрос? Чтобы не переходить из языка Си на ассемблерную вставку (не переносимую ни на другую архитектуру, ни даже на x64 исходник). А также для того, чтобы можно было не изменяя логику драйвера, перенести его исходный код на другую архитектуру, где вообще может не быть понятия пространства портов ввода-вывода, например. В таком случае на той гипотетической архитектуре под макросом ScsiPortReadPortUchar будет уже не чтение порта, а, например, чтение ячейки памяти, на которую замаплены bar-регистры устройства.
Так быстрее
Простой пример:Unix/Posix часы.
Работают когда устройство выключено и почти разряжено, потребляют мало энергии.
Есть предположения:
1.Операционную систему для данных команд использовать не нужно
2.Банальная энергоэффективность.
Могу быть не прав
Работают когда устройство выключено и почти разряжено, потребляют мало энергии.
Есть предположения:
1.Операционную систему для данных команд использовать не нужно
2.Банальная энергоэффективность.
Могу быть не прав
Потому-что
Потому что операционная система не тянет (видимо)
Похожие вопросы
- Возможно ли на C++ написать операционную систему, и чем C++ в этом отличается от C?
- Проблема в операционной системе телефона
- Почему в школах начинают информатику учить с систем счисления? Это все равно что в 1 классе заставить интегралы учить.
- Для знающих: как рассчитали максимум видимости оперативной памяти для 32- и 64-разрядных систем? На примере Windows.
- Системы счисления / /
- Как Создать иерархическую систему классов, на примере этого задания? Второй день уже туплю, помогите пожалуйста... С++
- Как перемножить два числа в 16-битной системе, чтобы на выходе получилось большое 32-битное или 64-битное число?
- В системе координат заданы 4 точки. Выяснить, в каких случаях они могут образовать квадрат.
- 12-и, 6-и, 10-и значная система.
- На что следует обращать внимание при разработке крупной системы на чистом Си?