КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Системные вызовыСистемный вызов позволяет приложению обратиться к операционной системе с просьбой выполнить то или иное действие, оформленное как процедура (или набор процедур) кодового сегмента ОС. Реализация системных вызовов должна удовлетворять следующим требованиям: · обеспечивать переключение в привилегированный режим; · обладать высокой скоростью вызова процедур ОС; · обеспечивать по-возможности единообразное обращение к системным вызовам для всех аппаратных платформ, на которых работает ОС; · допускать расширение набора системных вызовов; · обеспечивать контроль со стороны ОС за корректным использованием системных вызовов. Требование по обеспечению переключения в привилегированный режим для большинства аппаратных платформ может быть выполнено только с помощью механизма программных прерываний. В большинстве ОС системные вызовы обслуживаются по централизованной схеме, основанной на существовании диспетчера системных вызовов. Диспетчер системных вызовов обычно представляет собой простую программу, которая сохраняет содержимое регистров процессора в системном стеке (процессор переходит к работе в привилегированном режиме), проверяет, попадает ли запрошенный номер вызова в поддерживаемый ОС диапазон и передает управление процедуре ОС, адрес которой задан в таблице адресов системных вызовов. Процедура реализации системного вызова извлекает из системного стека аргументы и выполняет заданное действие. После завершения работы системного вызова управление возвращается диспетчеру. Диспетчер восстанавливает регистры процессора, помещает в определенный регистр код возврата и выполняет процедуру возврата из прерывания, которая восстанавливает непривилегированный режим работы процессора. Для приложения системный вызов ничем не отличается от вызова обычной библиотечной функции языка С, связанной с объектным кодом приложения и выполняющейся в пользовательском режиме. Для ускорения выполнения некоторых простых системных вызовов, которым не требуется привилегированный режим, необходимая работа полностью выполняется с помощью библиотечной функции. При этом для стороннего наблюдателя системные вызовы и библиотечные функции выглядят одинаково. Так, программист при работе с функциями прикладного программного интерфейса API (например, Win32) имеет дело с библиотечными функциями, часть из которых используется для работы с системными вызовами, а часть – нет. Такой табличный способ организации системных вызовов принят практически во всех операционных системах. Он позволяет легко модифицировать состав системных вызовов, просто добавив в таблицу новый адрес и расширив диапазон допустимых номеров вызовов. Операционная система может выполнять системные вызовы в синхронном или асинхронном режимах. Синхронный системный вызов означает, что процесс, сделавший такой вызов, приостанавливается до тех пор, пока системный вызов не выполнит всю требующуюся работу (Рис. 19). После этого планировщик переводит процесс в состояние готовности и при очередном выполнении процесс гарантированно может воспользоваться результатами завершившегося к этому времени системного вызова. Синхронные системные вызовы называются еще блокирующими, так как вызвавший системное действие процесс блокируется до его завершения. Асинхронный системный вызов не приводит к переводу процесса в режим ожидания, и после выполнения некоторых начальных системных действий управление возвращается прикладному процессу. Большинство системных вызовов в операционных системах являются синхронными, так как этот режим избавляет приложение от работы по выяснению момента появления результата вызова. Вместе с тем в новых версиях операционных систем количество асинхронных системных вызовов постепенно увеличивается, что дает больше свободы разработчикам сложных приложений. Асинхронные системные вызовы широко используются в операционных системах на основе микроядерного подхода. При этом в пользовательском режиме работает часть ОС, и приложениям необходимо иметь полную свободу в организации своей работы, которую и обеспечивает асинхронный режим обслуживания системных вызовов микроядром.
Рис. 19. Работа синхронного (а) и асинхронного (б) системных вызовов.
|