УДК 681.3.012
Н. П. Вашкевич, Р. А. Бикташев, А. А. Тараканов
СПЕЦИФИКАЦИЯ АЛГОРИТМА УПРАВЛЕНИЯ МЕЖПРОЦЕССНОГО ВЗАИМОДЕЙСТВИЯ В КЛИЕНТ-СЕРВЕРНОЙ РАСПРЕДЕЛЕННОЙ ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМЕ
Рассматриваются вопросы формального описания алгоритмов управления взаимодействующими параллельными процессами при решении вычислительных задач в распределенной вычислительной системе (РВС) клиент-серверной технологии, представленной в виде комплексной топологии типа «Звезда». Обмен сообщениями в РВС организуется с использованием согласующего кольцевого буфера и кольцевого маркера. Формальное описание базируется на использовании логики недетерминированных автоматов.
Введение
При параллельном решении многих задач как вычислительного направления, так и задач по управлению технологическими процессами и объектами всегда возникает необходимость организации взаимодействия процессов, связанных с их синхронизацией и обменом сообщений. Для решения этой проблемы используют различные программные методы, позволяющие избежать конфликтных ситуаций при взаимодействии параллельных процессов во время организации доступа к разделяемым данным (общим ресурсам). Эти методы базируются в основном на использовании различных механизмов типа семафоров, мониторов, рандеву и др., реализуемых программно.
Для того чтобы повысить надежность систем управления межпроцессного взаимодействия, стремятся, с одной стороны, выполнять их верификацию, а с другой - реализовывать их аппаратно (на микропрограммном уровне) для увеличения не только надежности, но и производительности [1]. В обоих случаях необходим математический аппарат для формального описания алгоритмов межпроцессного взаимодействия. В качестве такого математического аппарата перспективным является язык логики недетерминированных автоматов (НДА), позволяющий представлять алгоритмы управления в виде системы рекуррентных канонических уравнений, описывающих все реализуемые в алгоритме частные события [2]. Причем под событиями, в зависимости от детализации алгоритмов управления, можно понимать выполнение микрокоманды, машинной команды, оператора, подпрограммы и т.д.
В математической модели НДА, в отличие от модели детерминированного автомата, функции переходов представляются не в терминах состояний системы управления, а в терминах частных событий, одновременное существование которых определяют все состояния и переходы в системе. Так как число частных событий, реализуемых в системе управления, обычно значительно меньше числа их возможных комбинаций, определяющих состояния системы, то использование языка НДА позволяет значительно компактнее представлять формальное описание алгоритмов управления. Кроме того, представление алгоритмов управления в виде стандартной системы рекуррентных канонических уравнений позволяет значительно проще перейти к их структурной реализации [3].
В данной работе на основе языка логики НДА рассматриваются вопросы формального описания алгоритмов управления взаимодействующими процессами, имеющие место при решении вычислительных задач в РВС клиент-серверной технологии. При этом вопросы синхронизации процессов решаются на основе использования методов решения задач «производители-потребители», когда обмен сообщениями между процессами организуется с использованием согласующего буфера и кольцевого маркера. Отличительной особенностью алгоритмов синхронизации процессов «производители-потребители» в рассматриваемой работе заключается в том, что «клиенты» и «сервер» могут работать и как потребители, и как производители.
1 Общие сведения о структуре и алгоритме работы клиент-серверной распределенной вычислительной системы
В данной работе структура распределенной вычислительной системы (РВС) представлена комплексной топологией типа «Звезда». Для этой структуры (рис. 1) все вычислительные узлы (ВУ), играющие роль клиента (в работе условно приняты четыре таких узла: с первого по четвертый), имеют прямую и обратную связь с центральным ВУ, играющим роль сервера (обозначен цифрой 0). Между собой клиенты могут обмениваться информацией только через сервер.
Сервер подготавливает задания для параллельного решения задачи в четырех ВУ. С каждым клиентом сервер может иметь связь по передаче или приему блоков данных, а клиенты, хотя и не могут иметь такой связи, но в то же время связаны между собой логическим кольцом, в котором каждому клиенту (процессу) назначается положение в кольце. Положение в кольце может быть назначено, например, по порядку следования сетевых адресов или как-то иначе. Главное, чтобы процесс знал, кто в кольце является следующим после него [4].
При инициализации кольца процесс 1 получает маркер, или токен. Маркер циркулирует по кольцу. Он передается от процесса к к процессу к+1. Когда процесс получает маркер от своего соседа, он проверяет, не нужно ли ему войти в критическую область. Если это так, он входит в критическую область, выполняет там всю необходимую работу и покидает эту область, после чего передает маркер дальше. Входить в другую критическую область, используя тот же маркер, запрещено. Если процесс, получив от соседа маркер, не заинтересован во входе в критическую область, он просто передает этот маркер дальше. Соответственно, если ни один из процессов не находится в критических областях, маркер просто циркулирует по кольцу с максимально возможной скоростью.
Легко видеть, что такой алгоритм обеспечивает взаимоисключение процессов, т.к. только один процесс в любой момент времени обладает маркером, а значит, только один процесс может находиться в критической области. Маркер перемещается от процесса к процессу в общеизвестном порядке, и когда процесс решает войти в критическую область, то в худшем случае ему придется ждать, пока все остальные процессы последовательно не войдут в критическую область и не выйдут из нее.
Такой алгоритм маркерного кольца сталкивается с проблемой при сбоях процессов, однако от нее можно избавиться, если потребовать от процесса, получающего маркер, подтверждение его получения. Тогда неработающий процесс будет обнаружен при первой же попытке соседа передать ему маркер. В этот момент неработающий процесс можно удалить из группы, и хранитель маркера сможет перебросить маркер через его «голову» следующему члену кольца или, при необходимости, следующему за ним. Это, естественно, потребует поддержания текущей конфигурации кольца.
Таким образом, маркер - это особый тип сообщения, который можно использовать для передачи разрешения или сбора информации о глобальном состоянии [5]. В данной работе маркер используется как простой способ для решения задачи критической области. Это децентрализованное решение задачи синхронизации, требующее обмена небольшим количеством сообщений. Такое решение задачи взаимного исключения с передачей маркера представлено, например, в работе [5].
Будем считать для простоты, что процесс решения вычислительной задачи состоит из двух повторяющихся циклов, каждый из которых содержит два этапа. На первом этапе сервер (производитель), выполнив предварительную обработку информации, последовательно рассылает задания клиентам (потребителям). На втором этапе клиенты (потребители), обрабатывают задания параллельно в соответствии с алгоритмом, после чего отсылают результаты серверу для завершения работы цикла. Таким образом, на первом этапе работы РВС осуществляется межпроцессное взаимодействие по типу «один производитель - п потребителей», а на втором этапе - «п производителей -один потребитель».
2 Функционирование кольцевого согласующего буфера при обмене
сообщениями между производителями и потребителями в РВС
На первом этапе, когда выполняется рассылка информации от сервера к клиентам, сервер располагает кольцевым согласующим буфером, куда он записывает блоки данных для клиентов. Для этого этапа работы РВС синхронизация процессов потребителей осуществляется с использованием маркерного кольца, а синхронизация пары «производитель (сервер) - 7-й потребитель (клиент)» организуется на основе использования критических секций и согласующего кольцевого буфера. Сервер имеет счетчик записи в буфер
Счз0, куда записывается при инициализации единица. Каждый 7-й клиент
имеет свой счетчик чтения Счч7 , в который при инициализации записывается номер ячейки согласующего буфера, с которого начинается запись информации от сервера для 7-го клиента. После прочтения клиентом информации из буфера счетчик чтения 7-го клиента приводится в исходное состояние.
Допустим, для примера, что каждому клиенту пересылается по два блока сообщений. Показания счетчика записи определяют адрес ячейки согла-
сующего буфера, куда записываются эти блоки. Покажем на примерах функционирование системы и кольцевого буфера для первого режима работы РВС. Пусть имеется четыре клиента, исходное состояние кольцевого буфера имеет вид (рис. 2,а). Если работа РВС начинается с записи, предназначенной для первого клиента, потом второго и т.д., то после записи двух блоков для первого клиента положение кольцевого буфера будет иметь вид, показанный
на рис. 2,б, положение счетчика буфера записи Счз0 = 3.
Допустим, что возможен такой порядок работы РВС, когда после операции записи сервером, например для первого клиента, возможна операция чтения первым клиентом. Так как исходное состояние счетчика чтения первого клиента равно единице (Сччг = 1), то после операции чтения буфер примет положение, показанное на рис. 2,в, т.е. буфер будет пуст.
г)
3 4 5 6 7 8 1 2
\
5 6 7 8 1 2 т ш
ж)
Г
Рис. 2 Состояния согласующего буфера при передаче информации от сервера к клиентам
з) _ 1 2 ш Ж 5 • 7 8
В дальнейшем возможна только запись для второго клиента, т.к. для него буфер пуст и маркер находится у второго клиента. После записи для второго клиента положение буфера будет иметь вид, показанный на рис. 2,г, а
положение счетчика буфера записи будет равно 5 (Счз0 = 5). Учитывая, что в счетчик чтения второго клиента Счч2 при инициализации записана константа 3 (Счч2 = 3), то чтение клиентом из буфера будет начинаться с третьей ячейки буфера. Допустим, что второй клиент имеет маркер, но не готов к чтению, тогда сервер после передачи маркера третьему клиенту может записать следующие два блока данных для третьего клиента. В результате такой записи состояние буфера будет иметь вид, показанный на рис. 2,д, а положение счетчика буфера записи станет равным 7 (Счз0 = 7). Пусть после этого третий клиент готов к чтению, тогда состояние буфера после чтения будет иметь вид, показанный на рис. 2,е. Это состояние буфера определяется тем, что счетчик чтения третьего клиента после инициализации был установлен в
3
состояние 5 ( Счч =5).
1 2
5 I 6
В следующем такте, когда маркер передан четвертому клиенту, возможна лишь запись в буфер для четвертого клиента, у которого счетчик чтения был установлен при инициализации в состояние 7 (Счч4 = 7). После записи информации в буфер для четвертого клиента его состояние будет иметь вид, показанный на рис. 2,ж, а счетчик буфера записи примет исходное состояние, т.к. он работает по модулю 8: Счз0 = 7 © 2 = 1. Для состояния буфера (рис. 2,ж) возникает ситуация, когда возможна запись в первую ячейку буфера для первого клиента, но т.к. маркерное кольцо еще не сделало полный цикл и маркер находится у четвертого клиента, то выполняется чтение информации четвертым клиентом, если он готов к этому. Положение буфера после чтения четвертым клиентом будет иметь вид, показанный на рис. 2,з, а
положение счетчика буфера записи не меняется, т.е. Счч0 = 1.
Так как в первом цикле работы маркерного кольца (при п = 4) была записана информация для всех клиентов, а в буфере осталась несосчитанная информация для второго клиента, то в следующем цикле работы маркерного кольца при условии, что второй клиент готов, наконец, к чтению, осуществляется чтение вторым клиентом, в результате чего буфер примет исходное состояние (рис. 2,а) (буфер пуст), а состояние счетчика буфера записи сохраняет исходное значение (Счз0 = 1).
Второй этап, когда идет обработка клиентами данных, полученных от сервера, и передача их после обработки серверу, соответствует другой модели взаимодействующих процессов: «п производителей - один потребитель». В этом случае для синхронизации процессов производителей, бывших клиентов, используется маркерное кольцо, а алгоритм синхронизации пары «7-й производитель - потребитель», где потребителем является бывший сервер, организуются на основе использования критических секций и согласующего кольцевого буфера. Каждый 7-й производитель имеет свой счетчик записи
(Счз7), а потребитель - счетчик чтения (Счч0). В счетчик записи 7-го производителя при инициализации записывается номер ячейки согласующего буфера, с которого начинается запись информации от 7-го производителя. После записи этот счетчик приводится в исходное состояние.
Рассмотрим функционирование системы кольцевого буфера для второго этапа работы РВС. Пусть также имеется четыре производителя, исходное состояние кольцевого буфера имеет вид (рис. 2,а). Пусть также известно, что записываемая за один раз информация умещается в двух ячейках буфера. Если работа РВС начинается с записи информации, получаемой от первого производителя, потом второго и т.д., то после записи в буфер блоков данных от первого производителя, если он обладал маркером, положение кольцевого буфера будет иметь вид (рис. 3,а). Предположим также, что возможен такой порядок работы РВС, когда после операции записи производителем выполняется чтение записанной информации, если потребитель готов к чтению, тогда после чтения буфер будет пуст, т.е. примет следующее состояние (рис. 3,б).
В следующем такте, после того как маркер был передан второму производителю, возможна запись информации от него в буфер, если этот производитель готов к этой операции. Пусть будет ситуация, когда производитель не готов к записи информации в буфер. Тогда положение буфера будет иметь вид (рис. 3,в) и маркер будет передан третьему производителю.
£1) 3 4 5 6 7 8 'Ш.
\
б)
3 4 5 6 7 8 1 2
\
із)
5 6 7 8 1 2 3 4
т
г)
Д)
е)
7 8 1 2 3 4 Ш т
І
1 2 3 4 6 ш ш
\
1 2 3 4 УЛҐ/ у^// 7 8
т
Рис. 3 Состояния буфера при передаче информации от клиентов к серверу
Если третий производитель при наличии маркера готов к операции записи информации в буфер, то он записывает ее. Тогда состояние буфера будет иметь вид (рис. 3,г). Если потребитель в рассматриваемом такте работы не готов к выполнению операции чтения, то буфер сохранит свое предыдущее состояние (рис. 3,г). После передачи маркера четвертому производителю возможна операция записи этим производителем, если он готов к этой операции. Пусть такая запись произошла, тогда положение буфера будет иметь вид (рис. 3,д), а после чтения потребителем положение буфера примет вид (рис. 3,е). Так как после завершенного цикла работы маркерного кольца в буфере осталась записанная информация, то в следующем цикле должно произойти ее чтение потребителем и система будет готова к организации нового цикла работы РВС.
3 Представление алгоритма управления взаимодействующими процессами графом НДА и системой рекуррентных канонических уравнений
Синхронизация процессов в рассматриваемой РВС соответствует задаче «производители-потребители» с использованием согласующего буфера. Для этого способа синхронизации предъявляются следующие основные требования:
а) выполнение условий взаимного исключения по отношению к критическому ресурсу - буферу сообщений;
б) учет состояний буфера сообщений: процесс-производитель при попытке поместить очередное сообщение в заполненную часть буфера, а также процесс-потребитель при попытке чтения из пустого буфера должны быть заблокированы.
Для реализации этих требований предусмотрены счетчики записи и чтения. Исходя из показаний счетчиков, определяются события, свидетельствующие о том, что часть объема буфера, отводимая для 7-го клиента, или пуста (событие 5]Бп = 1 при Счч7 = Счз0), или полностью заполнена (событие
П = 1 при Счч7 Ф Счз0). В соответствии со способом представления алгоритмов управления межпроцессного взаимодействия в задаче «производители-потребители» для двух процессов рассмотренный в [6] граф НДА будет иметь вид, показанный на рис. 4.
Рис. 4 Граф НДА алгоритма управления параллельными процессами с использованием согласующего кольцевого буфера и кольцевого маркера
Граф НДА совместно с системой рекуррентных канонических уравнений, описывающих все реализуемые в алгоритме управления события, дает полное представление о структуре алгоритма управления взаимодействующими процессами в задаче «производители-потребители», когда имеют место два варианта: один производитель - несколько потребителей; несколько производителей - один потребитель.
На графе введены следующие сокращенные обозначения:
• ПС(1) и ПС(2) - тело программы работы сервера для первого и второго этапа работы РВС при параллельном решении вычислительной задачи соответственно;
• ПК(/) - тело программы работы /-го клиента по обработке исходной информации, полученной от сервера;
• КМ - кольцевой маркер;
• МСС - модуль синхронизации сервера;
• МСК(/) - модуль синхронизации /-го клиента;
• М/ - сигнал от маркера /-му клиенту;
• 51 з и 52 з - события, свидетельствующие о поступлении заявок на
обслуживание производителя и /-го потребителя на запись и чтение из согласующего буфера соответственно;
• 51 и 52 / - события, определяющие прием заявок на обслуживание
производителя и /-го потребителя на запись и чтение из согласующего буфера соответственно;
• 5^ и 5^,/' - события, определяющие входы производителя и /-го потребителя в свои критические участки соответственно; эти события при их истинности свидетельствуют о том, что соответствующие процессы (производитель и потребитель) находятся внутри своих критических участков;
• 5т - событие, определяющее обращение к согласующему буферу и обеспечивающее начало процедуры реализации обращения к согласующему буферу при записи и чтении;
• 5рз и 5рч - события, определяющие непересекающиеся операции
записи и чтения из согласующего буфера соответственно;
1 2
• 5п и 5п - события, свидетельствующие об окончании одноразовых
операций записи и чтения из согласующего буфера соответственно;
12
• 5пк и 5пк - события, обеспечивающие выход взаимодействующих процессов из соответствующих критических участков;
• 5^ и 52,/' - события, символизирующие ожидание взаимодействующими процессами производителем и /-м потребителем окончания процедуры записи и чтения из согласующего буфера, чтобы продолжить свою работу, прерванную обращением к согласующему буферу соответственно;
• 51 и 52 - события, обеспечивающие начало выполнения своих программ производителем и /-м потребителем после выхода из критических участков соответственно;
12' 1 и 5вкг - события, обеспечивающие зарождение событий 5к и
о2,/
соответственно;
• 5зП и 5чт - события, обеспечивающие начало операции записи и чтения в согласующий буфер соответственно;
• 5пзи 5пч - события, обеспечивающие окончание операции записи и чтения в согласующий буфер соответственно;
• 51, и 5р - события, обеспечивающие окончание ожидания процессами производителем и /-м потребителем выхода из своих критических участков соответственно;
• ./(у) - дизъюнктивный соединитель.
Уравнения, формализующие основные события, обеспечивающие вход процессов в критические интервалы и процедуры записи и чтения из согласующего буфера с учетом двух режимов работы РВС (для простоты записи уравнений в их правой части опущен знак времени 7, а знак конъюнкции принят по умолчанию):
5\(7 +1) = 515вк V 515пк, 52к4(! +1) = 52/5^ V 5, (1)
5вк = ^5^^_ (5зЛ5бп V 5Э^5БП), 5вк = 5\(5з5БП V 525бП), (2)
(V/)(/=1,п)
где 5Э и 5Э - события, определяющие работу РВС в режимах первого и второго этапов, соответственно; 5Бп - событие, свидетельствующее о том, что часть согласующего буфера, отводимая для /-го клиента, заполнена полностью;
Б1пк = бЭбп V 5252 , 52к = 5Э52 V 5Б , (3)
5рз(7+1) = 5т5зп V 5рзБпз, 5рч(7+1) = 5т5чт V 5рч5пч, (4)
5зп = 55э V 5252 , 5чт = 52бЭ V 51к52 , (5)
Бт(7 +1) = 5к51 V Vsk,^s2, (6)
(V/)(/■=1,п)
Б2 = 52,1 Vб'2’2V...5^ = V5^ . (7)
(^)(г=1,п)
Формализация остальных событий, представленных на графе НДА (рис. 4), очевидна.
Заключение
Отличительная особенность данного подхода к формальному описанию алгоритмов управления заключается в том, что результаты формализации представляются в стандартной форме в виде системы рекуррентных канонических бескванторных уравнений (СКУ), описывающих все частные события, реализуемые в алгоритме управления, полученных для любых уровней детализации алгоритма. Принятый способ спецификации алгоритмов управления в виде СКУ на основе логики НДА является самым экономичным с точки зрения сложности формального описания и позволяет непосредственно перейти к его верификации и структурной реализации, что очень важно для любых способов реализации алгоритмов управления: аппаратно (микропрограммно), программно или их комбинации.
Список литературы
1. Ганькин, А. Л. Исследования и разработки в области аппаратной реализации алгоритмов операционных систем / А. Л. Ганькин, Ю. В. Сидоров, Г. Н. Соловьев // Зарубежная радиоэлектроника. - 1984. - № 2. - С. 34-49.
2. Вашкевич, Н. П. Недетерминированные автоматы в проектировании систем параллельной обработки: учебное пособие / Н. П. Вашкевич. - Пенза : Изд-во Пенз. гос. ун-та, 2004. - 280 с.
3. Вашкевич, Н. П. Аппаратная реализация функций синхронизации параллельных процессов при обращении к разделяемому ресурсу на основе ПЛИС / Н. П. Вашкевич, Р. А. Бикташев, Е. И. Гурин // Известия вузов. Поволжский регион. Технические науки. - 2007. - № 2. - С. 3-12.
4. Таненбаум, Э. Современные операционные системы / Э. Таненбаум. - 2-е изд. -СПб. : Питер, 2002. - 1040 с.
5. Эндрюс, Г. Р. Основы многопоточного параллельного и распределенного программирования : пер. с англ. / Г. Р. Эндрюс. - М. : Вильямс, 2003. - 512 с.
6. Вашкевич, Н. П. Формальное описание алгоритма управления взаимодействующими параллельными процессами в задаче «производители-потребители» с использованием кольцевого согласующего буфера / Н. П. Вашкевич, Р. А. Бикта-шев, А. А. Тараканов // Известия вузов. Поволжский регион. Технические науки. -2007. - № 4.