Механизм организации взаимодействия в распределенных системах
В общем случае межпроцессное взаимодействие может осуществляться одним из двух способов:
· с помощью совместного использования одних и тех же данных (разделяемая память);
· путем передачи друг другу данных в виде сообщений.
В локальных операционных системах связь между процессами, как правило, осуществляется посредством разделяемой памяти.
В распределенных системах не существует памяти, непосредственно доступной процессам, работающих на разных компьютерах, поэтому взаимодействие процессов может осуществляться только путем передачи сообщений через сеть.
В сообщениях переносятся запросы от клиентов некоторых служб к соответствующим серверам. Сервер возвращает ответ, также помещая его в сообщение и отправляя его по сети клиенту.
Сообщение – это информационный блок, отформатированный процессом-отправителем таким образом, чтобы он был понятен процессу-получателю. Сообщение состоит из заголовка, обычно фиксированной длины, и набора данных определенного типа переменной длины.
В любой сетевой ОС в составе подсистемы ввода-вывода имеется подсистема передачи сообщений, называемая также транспортной подсистемой, которая обеспечивает организацию взаимодействия процессов в сети. Назначение этой подсистемы – экранирование деталей сложных сетевых протоколов от программиста.
Транспортная подсистема позволяет процессам взаимодействовать посредством достаточно простых примитивов. В самом простом случае системные средства обеспечения связи могут быть сведены к двум основным коммуникационным примитивам, один send (отправить) – для посылки сообщения, другой receive (получить) – для получения сообщения.
При этом процесс выполнения примитивовsend и receiveвовлекает в работу средства всех нижележащих коммуникационных протоколов (рис. 3.3).
Рис. 3.3. Примитивы обмена сообщениями и транспортные средства подсистемы ввода-вывода
Чтобы послать сообщение, необходимо указать адрес получателя. Наибольшее распространение получила система адресации, при которой адрес состоит из двух частей: адреса компьютера и адреса процесса в компьютере, которому предназначено сообщение.
Для идентификации компьютеров используется система IP-адресов.
Для идентификации процесса используется либо уникальное в пределах узла имя процесса, либо адрес сетевой службы, которая посылает сообщение.
Ввиду повсеместного применения стека протоколов TCP/IP на сегодня наиболее популярными адресами служб в системах обмена сообщениями сетевых ОС являются номера портов TCP/UDP. Порт TCP/UDP является не только абстрактным адресом службы, но и представляет собой нечто более конкретное – для каждого порта операционная система поддерживает буфер в системной памяти, куда помещаются отправляемые и получаемые сообщения, адресуемые данному порту. Порт задается в протоколах TCP/UDP двухбайтным адресом, поэтому ОС может поддерживать до 65 535 портов.
Схема адресации типа «машина-процесс» или «машина-служба» имеет один существенный недостаток – она не гибка и не прозрачна, так как пользователь должен явно указывать адрес машины-получателя. Если однажды машина, на которой работает некоторая сетевая служба, отказывает, то программа, в которой все обращения к данной службе выполняются по жестко заданному адресу, не сможет использовать аналогичную службу, установленную на другой машине.
Основным способом повышения прозрачности адресации является использование условных символьных имен вместо числовых адресов компьютеров. Примером такого подхода является характерная для сегодняшнего Интернета нотация URL (Universal Resource Locator, универсальный указатель ресурса), в соответствии с которой адрес состоит из символьного имени узла и символьного имени службы. Например, если в сообщении указан адрес ftp://new.narod.ru/, то это означает, что оно отправлено службе ftp, работающей на компьютере new.narod.ru.
Использование символьных имен компьютеров требует создания в сети службы оперативного отображения символьных имен на числовые идентификаторы, поскольку именно в таком виде адреса распознаются сетевым оборудованием.
Применение символьного имени позволяет разорвать жесткую связь адреса с одним-единственным компьютером, так как символьное имя перед отправкой сообщения в сеть заменяется на числовое, например на IP-адрес. Этап замены позволяет сопоставить с символьным именем различные числовые (IP) адреса и выбрать тот компьютер, который в данный момент в наибольшей степени подходит для выполнения запроса, содержащегося в сообщении.
Для замены символьных имен на числовые применяются две схемы: широковещание и централизованная служба имен.
При широковещании сервер периодически рассылает по сети сообщения о соответствии числовым адресам его имени и имен служб, которые он поддерживает. Клиент также может сделать широковещательный запрос о наличии в сети сервера, поддерживающего определенную службу. Если такой сервер в сети есть, то он ответит на запрос своим числовым адресом.
Широковещание удобно в локальных сетях, в которых все сетевые технологии нижнего уровня, такие как Ethernet, Token Ring поддерживают широковещательные адреса в пределах всей сети, а пропускной способности каналов связи достаточно для обслуживания таких запросов для сравнительно небольшого количества клиентов и серверов. На широковещании были построены все службы операционных систем NetWare (до версии 4).
Централизованная служба имен предполагает наличие специализированных серверов, хранящих базу данных соответствия между символьными именами и числовыми адресами. Эти серверы образуют распределенную службу имен, обрабатывающую запросы многочисленных клиентов. Хорошим примером такой службы является служба доменных имен Интернета (Domain Name Service, DNS).
Централизованная служба имен на сегодня считается наиболее перспективным средством повышения прозрачности услуг для пользователей сетей. С такой службой связывают и перспективы дальнейшего повышения прозрачности адресов сетевых ресурсов, когда имя ресурса будет полностью независимо от компьютера, предоставляющего этот ресурс в общее пользование. Например, в службе каталогов (NetWare Directory Services, NDS) компании Novell уже сегодня можно использовать такие имена, как имена томов, не указывая их точного расположения на том или ином компьютере.
Еще одним удобным механизмом, облегчающим взаимодействие операционных систем и приложений по сети, является механизм вызова удаленных процедур (Remote Procedure Call, RPC). Этот механизм представляет собой надстройку над системой обмена сообщениями ОС, и поэтому в ряде случаев позволяет более удобно и прозрачно для программиста организовать взаимодействие программ по сети. Однако его полезность не универсальна.
Механизм RPC достигает прозрачности следующим образом. Когда вызываемая процедура действительно является удаленной, в библиотеку процедур вместо локальной реализации оригинального кода процедуры помещается другая версия процедуры, называемая клиентским стабом (stab – заглушка). На удаленный компьютер, который выполняет функцию сервера процедур, помещается оригинальный код вызываемой процедуры, а также еще один стаб, называемый серверным стабом.
Назначение клиентского и серверного стабов – организовать передачу входных параметров вызываемой процедуры и возврат значения процедуры через сеть, при этом код оригинальной процедуры, помещенной на сервер, должен быть полностью сохранен.
Стабы используют для передачи данных через сеть средства подсистемы обмена сообщениями, т. е. существующие в операционной системе примитивы send и receive.