Шрифт:
Давайте рассмотрим пример системного вызова, который использует функции
Следует заметить, что обе функции,
Последняя проверка — это проверка на соответствие правам доступа. В старых версиях ядра Linux стандартом было использование функции
Список всех "возможностей использования" и прав, которые за ними закреплены, содержится в файле
Контекст системного вызова
Как уже обсуждалось в главе 3, "Управление процессами", при выполнении системного вызова ядро работает в контексте процесса. Указатель
В контексте процесса ядро может переходит в приостановленное состояние (например, если системный вызов блокируется при вызове функции или явно вызывает функцию
29
Обработчики прерываний не могут переходить в приостановленное состояние и, следовательно, более ограничены в своих действиях по сравнению с системными вызовами, которые работают в контексте процесса.
После завершение системного вызова управление передается обратно в функцию
Окончательные шаги регистрации системного вызова
После того как системный вызов написан, процедура его регистрации в качестве официального системного вызова тривиальна и состоит в следующем.
• Добавляется запись в конец таблицы системных вызовов. Это необходимо сделать для всех аппаратных платформ, которые поддерживают этот системный вызов (для большинства системных вызовов — это все возможные платформы). Положение системного вызова в таблице — это номер системного вызова, начиная с нуля. Например, десятая запись таблицы соответствует системному вызову с номером девять.