Разработка ОС, пользовательского режима, прерываний и системных вызовов - PullRequest
1 голос
/ 20 марта 2019

в моей операционной системе мне нужно перейти в режим пользователя. Я знаю, как сделать ход, но когда я в режиме пользователя, нет прерываний. , что означает, например:

  • когда я что-то набираю на клавиатуре, буфер не заполняется. так как мне сделать системные вызовы, чтобы получить символ с клавиатуры, если буфер пуст?

Если у вас есть какой-нибудь пример, я могу посмотреть системные вызовы и подсказать, как мне это сделать, чтобы я мог работать в режиме пользователя и при этом получать ввод с клавиатуры, я был бы признателен.

Надеюсь, я проясню .. Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 20 марта 2019

Практически во всех архитектурах ЦП имеется как минимум два механизма перехода из пользовательских (менее привилегированных) в системные (более привилегированные) режимы: прерывания и прерывания.Ловушки являются результатом инструкций, таких как деление на ноль, или специальной инструкции для входа в режим системы.Прерывания вызваны электрическими сигналами, на которые процессор реагирует переключением в системный режим.В любом случае процессор сохраняет достаточно информации, чтобы иметь возможность возобновить выполнение в любом из режимов, и начинает выполнение с заранее подготовленной инструкции в системном режиме.

Таким образом, устройство в стиле клавиатуры может вызывать прерывание, когдаклавиша нажата или отпущена, что заставляет систему переключаться в системный режим для запуска кода, специфичного для этого прерывания (обычно в драйвере устройства).Этот код обычно помещает событие в буфер и пробуждает любого, кто его ждет.

Пользовательская программа может создать ловушку с некоторыми параметрами, чтобы направить ее в драйвер устройства клавиатуры, где она извлечет предыдущеесобытия из буфера или дождитесь, пока события будут доступны, если он был пустым.

Различие между пользователем и системой не является глубоким;это грубый механизм целостности системы.

...