Я играл с ioctl
, и этот вопрос возник.Почему количество системных вызовов очень ограничено?
фон
- мне сказали, что основной мотив для системных вызовов является то, что количество обработчиков прерываний разрешено очень ограничено. Так много OS реализуют абстракцию системных вызовов (ловушки a.k.a.), которые занимают только один номер прерывания (
0x80
в случае Linux), но принимают дополнительные аргументы для предоставления различных функций по требованию. - this thread предлагает количество системных вызовов на самом деле очень ограниченное, поэтому те же рассуждения, приведенные выше, применяются снова для изобретения
ioctl
.
Отсюда мой вопрос. Почему ОС не предлагает достаточно системных вызовов и избавляется от ioctl
? (Или просто создать иерархическую структуру, обеспечивающую лучшую масштабируемость?)
Я думаю, что ваш ответ имеет больше смысла, чем вышеупомянутый пост. Просто для подтверждения, системные вызовы похожи на настраиваемый обработчик для взаимодействия ОС с процессором, а 'ioctl' в ОС - настраиваемый обработчик для взаимодействия между приложениями пользовательского пространства и ядром? – wlnirvana
Обработчики системных вызовов определяются ядром ОС как механизм связи между usermode и kernelmode (CPU может помочь, предоставляя специальные инструкции, облегчающие и ускоряющие переключение между пользователем и режимом ядра). Они более или менее жестко привязаны к ядру ОС (например, как фиксированный массив подпрограмм, реализующих отдельные системные вызовы). Запросы, созданные от имени «ioctl» и нескольких других системных вызовов, обычно отправляются драйверу, ответственному за цель ioctl, поэтому «ioctl» может (в некоторой степени) настраиваться разработчиком (документированным образом). –