Есть ли хорошее описание механизма «системного вызова», используемого в ОС?[закрыто]

StackOverflow https://stackoverflow.com/questions/126976

Вопрос

Я ищу хороший учебник или техническое описание Системный вызов механизм, который используется операционными системами для перехода из пользовательского пространства в ядро ​​для вызова таких функций, как «открытие», «чтение», «запись» и т. д.

Есть ли что-нибудь кроме Википедия вход?Веб-сайты, PDF-файлы, книги, исходный код — все приветствуется :)

Это было полезно?

Решение

Что касается исходного кода, то существует множество ядер с открытым исходным кодом, в которые можно погрузиться.

Что касается книг, Книга Роберта Лава о ядре Linux очень информативно.

Другие советы

Точный метод зависит от архитектуры процессора и от того, какие операции он определяет для перехода в режим ядра.Один из подходов, традиционный для x86, заключался в использовании программного прерывания.Оказывается, в общем случае это было не очень быстро, поэтому позже Intel добавила: SYSCALL и AMD добавила SYSENTER.Windows XP и более поздние версии выбирают подходящую для платформы технику системного вызова во время загрузки.

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

Windows CE до версии 6.0 использует модель виртуальных адресов параллельных процессов, которая фактически позволяет процессам напрямую обращаться друг к другу.Защита страниц настроена так, что при этом возникает ошибка нарушения доступа:ядро получает управление, исправляет адресное пространство процесса (перемещая вызываемый процесс в слот 0), исправляет аргументы на основе слота 0, чтобы они указывали на вызывающий процесс, и возвращается в пользовательский режим.Поскольку адрес возврата находится в другом процессе, при возврате вызова функции происходит обратный процесс.К сожалению, эта модель допускает только очень маленькое виртуальное адресное пространство для каждого процесса (32 МБ) и небольшое количество процессов (32), поэтому Windows CE 6.0 возвращается к более традиционной модели системных вызовов.

Возможно, вы захотите взглянуть на ядро ​​minix.Он имеет открытый исходный код, прост и используется во многих курсах по ОС Uni-уровня.Покопайтесь в /usr/src/kernel/proc.c, особенно в функции sys_call и связанных с ней функциях.Имейте в виду, что minix — это микроядро, поэтому некоторые вещи могут немного отличаться от того, к чему вы привыкли.

Если вы хотите приобрести книгу, которая чрезвычайно полезна для программирования *nix.Я бы порекомендовал «Продвинутое программирование в среде UNIX» Стивенса и Раго.Он содержит подробные объяснения и примеры кода.

Хорошее объяснение системных вызовов в Linux можно найти в примерах драйверов устройств в Драйверы устройств Linux.

Это зависит от архитектуры и требует понимания компьютерной архитектуры.В книге Таненбаума «Структурированная компьютерная организация» содержится хорошее изложение основ системного вызова.Более подробную информацию можно найти в любом учебнике по проектированию операционных систем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top