Книга: Разработка ядра Linux
Номера системных вызовов
Номера системных вызовов
Каждому системному вызову операционной системы Linux присваивается номер системного вызова (syscall number). Этот уникальный номер используется для обращения к определенному системному вызову. Когда процесс выполняет системный вызов из пространства пользователя, процесс не обращается к системному вызову по имени.
Номер системного вызова является важным атрибутом. Однажды назначенный номер не должен меняться никогда, иначе это нарушит работу уже скомпилированных прикладных программ. Если системный вызов удаляется, то соответствующий номер не может использоваться повторно. В операционной системе Linux предусмотрен так называемый "не реализованный" ("not implemented") системный вызов — функция sys_ni_syscall()
, которая не делает ничего, кроме того, что возвращает значение, равное -ENOSYS
, — код ошибки, соответствующий неправильному системному вызову. Эта функция служит для "затыкания дыр" в случае такого редкого событии, как удаление системного вызова.
Ядро поддерживает список зарегистрированных системных вызовов в таблице системных вызовов. Эта таблица хранится в памяти, на которую указывает переменная sys_call_table
. Данная таблица зависит от аппаратной платформы и обычно определяется в файле entry.S
. В таблице системных вызовов каждому уникальному номеру системного вызова назначается существующая функция syscall
.
- В заключение о системных вызовах
- Модификация системных таблиц
- Что обозначают номера ошибок?
- 10.8.4 Выбор начального порядкового номера
- 2.2.3. Коды ошибок системных вызовов
- 23.3. Ограничение системных ресурсов
- Копирование системных файлов
- Производительность системных вызовов
- Обработка системных вызовов
- Реализация системных вызовов
- Вызов системных функций и стандартных диалоговых окон оболочки Windows
- Запуск с помощью системных функций Windows