Page 322 - ЭВМ
P. 322
запрошенной операции в общем случае зависит не только от некото-
рой работы локальной ОС, но и от работы удаленной ОС.
Коммуникационные примитивы могут быть оформлены в опе-
рационной системе двумя способами: как внутренние процедуры ядра
ОС (в этом случае ими могут использоваться только модули ОС) или
как системные вызовы (доступные в этом случае процессам в пользо-
вательском режиме).
При использовании блокирующего примитива send процесс, вы-
давший запрос на его выполнение, приостанавливается до момента
получения по сети сообщения-подтверждения о том, что приемник
получил отправленное сообщение. А вызов блокирующего примитива
receive приостанавливает вызывающий процесс до момента, когда он
получит сообщение. При использовании неблокирующих примитивов
send и receive управление возвращается вызывающему процессу не-
медленно, сразу после того, как ядру передается информация о том,
где в памяти находится буфер, в который нужно поместить сообще-
ние, отправляемое в сеть или ожидаемое из сети. Преимуществом
этой схемы является параллельное выполнение вызывающего процес-
са и процедур передачи сообщения (необязательно работающих
в контексте вызвавшего соответствующий примитив процесса).
Важным вопросом при использовании неблокирующего прими-
тива receive является выбор способа уведомления процесса-полу-
чателя о том, что сообщение пришло и помещено в буфер. Обычно
для этой цели требуется один из двух способов.
1. Опрос (polling). Этот метод предусматривает наличие еще од-
ного базового примитива test (проверить), с помощью которого про-
цесс-получатель может анализировать состояние буфера.
2. Прерывание (interrupt). Этот метод использует программное
прерывание для уведомления процесса-получателя о том, что сооб-
щение помещено в буфер. Хотя такой метод и очень эффективен
(он исключает многократные проверки состояния буфера), у него
имеется существенный недостаток – усложненное программирование,
связанное с прерываниями пользовательского уровня, т. е. прерыва-
ниями, по которым вызываются процедуры пользовательского режи-
ма (например, вызов процедур АРС (Asynchronous Procedure Call)
в ОС Windows NT по завершении операции ввода-вывода).
При использовании блокирующего примитива send может воз-
никнуть ситуация, когда процесс-отправитель блокируется навсегда,
например, если процесс-получатель потерпел крах или же отправ-
311