Операционные системы, среды и оболочки. Макаренко С.И. - 73 стр.

UptoLike

Составители: 

В большинстве ОС системные вызовы обслуживаются по
централизованной схеме, основанной на существовании диспетчера
системных вызовов (рис. 4.14, б). При любом системном вызове приложение
выполняет программное прерывание с определенным и единственным
номером вектора. Способ передачи зависит от реализации, например номер
можно поместить в определенный регистр общего назначения процессора
или передать через стек (в этом случае после прерывания и перехода в
привилегированный режим их нужно будет скопировать в системный стек из
пользовательского, это действие в некоторых процессорах
автоматизировано). Также некоторым способом передаются аргументы
системного вызова, они могут как помещаться в регистры общего
назначения, так и передаваться через стек или массив, находящийся в
оперативной памяти.
Процедура реализации системного вызова извлекает из системного
стека аргументы и выполняет заданное действие. Это действие может быть
весьма простым, например чтение значения системных часов, так что
системный вызов оформляется в виде одной функции. Более сложные
системные вызовы,, такие как чтение из файла или выделение процессу
дополнительного сегмента памяти, требуют обращения системного вызова к
нескольким внутренним процедурам ядра ОС, принадлежащим к различным
подсистемам, таким как подсистема ввода-вывода или управления памятью.
После завершения работы системного вызова управление возвращается
диспетчеру, при этом он получает также код завершения этого вызова.
Диспетчер восстанавливает регистры процессора, помещает в определенный
регистр код возврата и выполняет инструкцию возврата из прерывания,
которая восстанавливает непривилегированный режим работы процессора.
Операционная система может выполнять системные вызовы в
синхронном или асинхронном режимах.
Синхронный системный вызов означает, что процесс, сделавший
такой вызов, приостанавливается (переводится планировщиком ОС в
состояние ожидания) до тех пор, пока системный вызов не выполнит всю
требующуюся от него работу (рис. 4.2, а). После этого планировщик
переводит процесс в состояние готовности и при очередном выполнении
процесс гарантированно может воспользоваться результатами
завершившегося к этому времени системного вызова. Синхронные вызовы
называются также блокирующими, так как вызвавший системное действие
процесс блокируется до его завершения.
Асинхронный системный вызов не приводит к переводу процесса в
режим ожидания после выполнения некоторых начальных системных
действий, например запуска операции вывода-вывода, управление
возвращается прикладному процессу (рис. 4.2, б).
73
     В большинстве ОС системные вызовы обслуживаются по
централизованной схеме, основанной на существовании диспетчера
системных вызовов (рис. 4.14, б). При любом системном вызове приложение
выполняет программное прерывание с определенным и единственным
номером вектора. Способ передачи зависит от реализации, например номер
можно поместить в определенный регистр общего назначения процессора
или передать через стек (в этом случае после прерывания и перехода в
привилегированный режим их нужно будет скопировать в системный стек из
пользовательского,   это      действие    в     некоторых    процессорах
автоматизировано). Также некоторым способом передаются аргументы
системного вызова, они могут как помещаться в регистры общего
назначения, так и передаваться через стек или массив, находящийся в
оперативной памяти.
      Процедура реализации системного вызова извлекает из системного
стека аргументы и выполняет заданное действие. Это действие может быть
весьма простым, например чтение значения системных часов, так что
системный вызов оформляется в виде одной функции. Более сложные
системные вызовы,, такие как чтение из файла или выделение процессу
дополнительного сегмента памяти, требуют обращения системного вызова к
нескольким внутренним процедурам ядра ОС, принадлежащим к различным
подсистемам, таким как подсистема ввода-вывода или управления памятью.
      После завершения работы системного вызова управление возвращается
диспетчеру, при этом он получает также код завершения этого вызова.
Диспетчер восстанавливает регистры процессора, помещает в определенный
регистр код возврата и выполняет инструкцию возврата из прерывания,
которая восстанавливает непривилегированный режим работы процессора.
     Операционная система может выполнять системные вызовы в
синхронном или асинхронном режимах.
     Синхронный системный вызов означает, что процесс, сделавший
такой вызов, приостанавливается (переводится планировщиком ОС в
состояние ожидания) до тех пор, пока системный вызов не выполнит всю
требующуюся от него работу (рис. 4.2, а). После этого планировщик
переводит процесс в состояние готовности и при очередном выполнении
процесс    гарантированно      может   воспользоваться   результатами
завершившегося к этому времени системного вызова. Синхронные вызовы
называются также блокирующими, так как вызвавший системное действие
процесс блокируется до его завершения.
      Асинхронный системный вызов не приводит к переводу процесса в
режим ожидания после выполнения некоторых начальных системных
действий, например запуска операции вывода-вывода, управление
возвращается прикладному процессу (рис. 4.2, б).



                                   73