Тупиковые ситуации и исчерпание ресурсов в системах клиент/сервер

В предыдущих главах в основном рассматривались вопросы проектирования систем клиент/сервер и анализировалась структура отдельных клиентских и серверных программ. В них описаны способы обеспечения параллельного выполнения процессов в клиентах и серверах, рассмотрены такие инструментальные средства, как RPC, позволяющие упростить разработку программного обеспечения клиент/сервер, и приведены соответствующие примеры.

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

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

31.2. Определение тупиковой ситуации

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

Тупиковая ситуация — это постоянный отказ, который не следует путать с временной блокировкой. Для определения наличия тупиковой ситуации может применяться простая проверка: если поступающая извне информация позволяет продолжить вычисление, то данная ситуация не является тупиковой. Например, рассмотрим набор из трех процессов. Предположим, что два процесса заблокировались на то время, как третий вступил во взаимодействие с пользователем. После получения ответа от пользователя третий процесс передает двум остальным необходимую информацию и обработка продолжается. Хотя эти три процесса могут оставаться заблокированными на неопределенно долгое время, ожидая ответа от пользователя, такой ряд процессов не находится в тупиковой ситуации, поскольку после получения данных от пользователя обработка может быть продолжена.

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

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

Похожие статьи Меню Опрос Фото Популярное