The design of the UNIX Operating System 102 страница




Основы операционных систем 138

функции драйвера. Базовая подсистема предоставляет вычислительной системе такие услуги, как под-держка блокирующихся, неблокирующихся и асинхронных системных вызовов, буферизация и кэширо-вание входных и выходных данных, осуществление spooling'a и монопольного захвата внешних уст-ройств, обработка ошибок и прерываний, возникающих при операциях ввода-вывода, планирование по-следовательности запросов на выполнение этих операций. Давайте остановимся на этих услугах подроб-нее.

 

Блокирующиеся, неблокирующиеся и асинхронные системные вызовы

 

Все системные вызовы, связанные с осуществлением операций ввода-вывода, можно разбить на три группы по способам реализации взаимодействия процесса и устройства ввода-вывода.

 

• К первой, наиболее привычной для большинства программистов группе относятся блокирующие-ся системные вызовы. Как следует из самого названия, применение такого вызова приводит к бло-кировке инициировавшего его процесса, т. е. процесс переводится операционной системой из со-стояния исполнение в состояние ожидание. Завершив выполнение всех операций ввода-вывода, предписанных системным вызовом, операционная система переводит процесс из состояния ожи-дание в состояние готовность.После того как процесс будет снова выбран для исполнения,внем произойдет окончательный возврат из системного вызова. Типичным для применения такого системного вызова является случай, когда процессу необходимо получить от устройства строго определенное количество данных, без которых он не может выполнять работу далее.

• Ко второй группе относятся неблокирующиеся системные вызовы. Их название не совсем точно отражает суть дела. В простейшем случае процесс, применивший неблокирующийся вызов, не пе-реводится в состояние ожидание вообще. Системный вызов возвращается немедленно, выполнив предписанные ему операции ввода-вывода полностью, частично или не выполнив совсем, в зави-симости от текущей ситуации (состояния устройства, наличия данных и т. д.). В более сложных ситуациях процесс может блокироваться, но условием его разблокирования является завершение всех необходимых операций или окончание некоторого промежутка времени. Типичным случаем применения неблокирующегося системного вызова может являться периодическая проверка на поступление информации с клавиатуры при выполнении трудоемких расчетов.

 

• К третьей группе относятся асинхронные системные вызовы. Процесс, использовавший асин-хронный системный вызов, никогда в нем не блокируется. Системный вызов инициирует выпол-нение необходимых операций ввода-вывода и немедленно возвращается, после чего процесс про-должает свою регулярную деятельность. Об окончании завершения операции ввода-вывода опе-рационная система впоследствии информирует процесс изменением значений некоторых пере-менных, передачей ему сигнала или сообщения или каким-либо иным способом. Необходимо чет-ко понимать разницу между неблокирующимися и асинхронными вызовами. Неблокирующийся системный вызов для выполнения операции read вернется немедленно, но может прочитать за-прошенное количество байтов, меньшее количество или вообще ничего. Асинхронный системный вызов для этой операции также вернется немедленно, но требуемое количество байтов рано или поздно будет прочитано в полном объеме.


Дата добавления: 2021-01-21; просмотров: 136; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!