Page 322 - ЭВМ
P. 322

запрошенной операции в общем случае зависит не только от некото-
               рой работы локальной ОС, но и от работы удаленной ОС.
                      Коммуникационные  примитивы  могут  быть  оформлены  в  опе-

               рационной системе двумя способами: как внутренние процедуры ядра
               ОС (в этом случае ими могут использоваться только модули ОС) или
               как системные вызовы (доступные в этом случае процессам в пользо-
               вательском режиме).
                      При использовании блокирующего примитива send процесс, вы-

               давший  запрос  на  его  выполнение,  приостанавливается  до  момента
               получения  по  сети  сообщения-подтверждения  о  том,  что  приемник
               получил отправленное сообщение. А вызов блокирующего примитива
               receive приостанавливает вызывающий процесс до момента, когда он

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

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

               тива receive  является  выбор  способа  уведомления  процесса-полу-
               чателя  о  том,  что  сообщение  пришло  и  помещено  в  буфер.  Обычно
               для этой цели требуется один из двух способов.
                      1. Опрос (polling). Этот метод предусматривает наличие еще од-
               ного базового примитива test (проверить), с помощью которого про-

               цесс-получатель может анализировать состояние буфера.
                      2.  Прерывание (interrupt).  Этот  метод  использует  программное
               прерывание  для  уведомления  процесса-получателя  о  том,  что  сооб-
               щение  помещено  в  буфер.  Хотя  такой  метод  и  очень  эффективен

               (он  исключает  многократные  проверки  состояния  буфера),  у  него
               имеется существенный недостаток – усложненное программирование,
               связанное  с  прерываниями  пользовательского  уровня,  т.  е.  прерыва-
               ниями, по которым вызываются процедуры пользовательского режи-
               ма (например,  вызов  процедур  АРС (Asynchronous Procedure Call)

               в ОС Windows NT по завершении операции ввода-вывода).
                      При  использовании  блокирующего  примитива send  может  воз-
               никнуть  ситуация,  когда  процесс-отправитель  блокируется  навсегда,
               например,  если  процесс-получатель  потерпел  крах  или  же  отправ-



                                                           311
   317   318   319   320   321   322   323   324   325   326   327