Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Записка_ПСП_Градиентный спуск C# Клиент-Сервер.docx
Скачиваний:
23
Добавлен:
03.02.2019
Размер:
477.82 Кб
Скачать

1.2 Распределенные вычисления на основе стека

протоколов TCP/IP

Распределенные вычисления от централизованных отличаются наличием связи между процессами. Связи между централизованными процессами предполагают наличие разделяемой памяти. Классический пример создания буферов чтения/записи при обращении к массиву данных.

Основой взаимодействия распределенных вычислений служит посылка и прием сообщений. Уже на двух программных примитивах (посылка и прием) можно построить достаточно сложные средства сетевых коммуникаций, например, программные системы в архитектуре Клиент/Сервер или вызов удаленных процедур (Remote Procedure Call). Более подробно, средства удаленного вызова процедур предназначены для облегчения создания распределенных вычислений.

Реализация удаленных вызовов существенно сложнее реализации вызовов локальных процедур. Вызывающая и вызываемая процедуры выполняются на разных машинах. Они имеют разные адресные пространства и это создает дополнительные проблемы при передаче параметров и результатов, особенно для машин разных классов. Приложения RPC не могут рассчитывать на разделяемую память, следовательно, невозможно передать указатель на стек, значения параметров должны быть посланы с одного компьютера на другой. Другая отличительная особенность RPC – использование какой-либо системы связи между компьютерами. Однако эта связь очень прозрачна, то есть программист, проектирующий RPC-ориентированное приложение, не занимается низкоуровневыми протоколами. В реализации RPC участвуют, как минимум, два процесса и при аварийном завершении одного из них другой в ожидании ответа будет крутиться вхолостую.

Вопросы связи процессов (посредством передачи параметров или удаленных вызовов) тесно связаны с вопросами синхронизации процессов. Синхронизация необходима процессам для организации совместно используемых ресурсов. Основной алгоритм, который будет использован в распределенных системах – распределенный.

Если процесс хочет войти в критическую секцию, он формирует сообщение, содержащее имя нужной ему критической секции, номер процесса и текущее значение времени. Это сообщение рассылается всем другим процессам. Возможны три варианта:

– принимающий процесс находится не в критической секции – отсылается разрешение;

– процесс находится в критической секции – он не отправляет никакого ответа и ставит запрос в очередь;

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

Основные черты современного RPC-протокола:

– машинно-независимый инструментарий, позволяющий создавать приложения, способные обмениваться данными с приложениями, запущенными на различных типах ОС;

– проработанная технология создания клиент-серверных приложений;

– компилятор RPC-протокола, который позволяет скрыть низкоуровневую реализацию межсетевого обмена данными;

– аутентификация, дающая возможность строить распределенные приложения, обеспечивающие авторизированный доступ;

– набор высокоуровневых библиотек, позволяющий достаточно легко работать с такими сетевыми объектами, как пользователи (users), устройства и компьютеры, подключенные к сети (hosts), почтовые ящики (mailboxes).