Научная статья на тему 'Формальное описание алгоритма управления взаимодействующими параллельными процессами в задаче производители-потребители с использованием согласующего кольцевого буфера'

Формальное описание алгоритма управления взаимодействующими параллельными процессами в задаче производители-потребители с использованием согласующего кольцевого буфера Текст научной статьи по специальности «Математика»

CC BY
660
53
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПАРАЛЛЕЛЬНЫЙ АСИНХРОННЫЙ ПРОЦЕСС

Аннотация научной статьи по математике, автор научной работы — Вашкевич Николай Петрович, Бикташев Равиль Айнулович, Тараканов Алексей Анатольевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Вашкевич Николай Петрович, Бикташев Равиль Айнулович, Тараканов Алексей Анатольевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Формальное описание алгоритма управления взаимодействующими параллельными процессами в задаче производители-потребители с использованием согласующего кольцевого буфера»

УДК 681.3.012

Н. П. Вашкевич, Р. А. Бикташев, А. А. Тараканов

ФОРМАЛЬНОЕ ОПИСАНИЕ АЛГОРИТМА УПРАВЛЕНИЯ ВЗАИМОДЕЙСТВУЮЩИМИ ПАРАЛЛЕЛЬНЫМИ ПРОЦЕССАМИ В ЗАДАЧЕ ПРОИЗВОДИТЕЛИ-ПОТРЕБИТЕЛИ С ИСПОЛЬЗОВАНИЕМ СОГЛАСУЮЩЕГО КОЛЬЦЕВОГО БУФЕРА

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

Введение

Задача производители—потребители является одной из классических задач синхронизации процессов. Процессы взаимодействуют через некоторую обобщенную область памяти - согласующий буфер сообщений. В данной работе, в отличие от [1], будем использовать согласующий кольцевой буфер сообщений, в который информация записывается и считывается по очереди.

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

Для формального описания алгоритма управления взаимодействующими процессами в рассматриваемой задаче используется язык логики недетерминированных автоматов (НДА), с помощью которого описываются все реализуемые в алгоритме частные события [1].

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

На основании этих условий, общих требований к алгоритму управления межпроцессного взаимодействия и методики формализации функций взаимоисключения критических участков [1] строится граф НДА, представляющий этот алгоритм, с описанием всех основных событий, реализуемых в алгоритме.

1. Функционирование кольцевого согласующего буфера при обмене сообщениями между производителем и потребителем

Производитель помещает сообщения в разделяемый кольцевой буфер

[2], потребитель извлекает их оттуда. Буфер содержит очередь уже помещенных, но еще не извлеченных сообщений. Эта очередь может быть представлена связным списком или массивом.

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

и первую пустую ячейку буфера. Эти переменные организуются с помощью счетчиков буфера записи СчБз и счетчика буфера чтения СчБчт. Показания счетчика СчБз будут определять номер первой незаполненной (пустой) ячейки, а счетчика СчБчт - номер первой заполненной ячейки. Для этой цели при инициализации системы управления в указанные счетчики записываются единицы, т.е. при ї = 0/СчБз = 1; СчБчт = 1.

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

Для нашего варианта кольцевого буфера событие «буфер полон» (^БП = 1) будет иметь место при равенстве значений счетчиков буфера (СчБз = = СчБчт > 1) и переносе из счетчика буфера записи (СчБз = 0).

Событие «буфер пуст» ( 5бо = 1) будет иметь место также при равенстве значений счетчиков буфера (СчБз = СчБчт) и если не было сигнала переноса из СчБчт или при условии, когда в процессе работы счетчики буфера приняли исходное состояние (СчБз = СчБчт = 1) и был перенос из СчБчт.

Рассмотрим некоторые варианты записи и чтения в кольцевой буфер.

Представим буфер массивом, в котором имеется п = 8 ячеек (рис. 1), и в каждую ячейку записывается одно сообщение.

1 2 3 4 5 6 7 8

4 5 6 7 8 1 2 3

Т

СчБз

Т

СчБчт

Рис. 1 Произвольное положение массива в буфере

Будем считать, что номер ячейки буфера совпадает с номером сообщения. Тогда верхний ряд цифр (рис. 1) указывает на исходное состояние буфера перед началом работы системы, когда все ячейки пусты.

Кольцевой буфер при записи информации работает следующим образом. Такт записи в одну ячейку буфера состоит из двух частей: в первой части осуществляется запись в ячейку, номер которой указывает счетчик СчБз, во второй части производится кольцевой сдвиг содержимого буфера влево. На рисунке 1 показаны результаты записи трех сообщений, когда положение счетчика СчБз стало равным 4, тогда как в исходном состоянии СчБз было равно единице. Таким образом, ячейка буфера под номером 4 будет первой пустой ячейкой после сообщений в конце очереди.

Пусть после трех тактов записи выполняется чтение из буфера до полной его очистки. Тогда состояние счетчиков буфера записи и чтения будет одинаковыми СчБз = СчБчт = 4. Это свидетельствует о том, что буфер пуст, т.к. не было сигнала переполнения из СчБчт.

Допустим, что после этого было выполнено 5 тактов записи в буфер. Тогда состояние буфера будет иметь вид (рис. 2), а состояние счетчика записи после пяти тактов определится сложением по модулю 8, т.е. СчБз = 4 © 5 = 1, а состояние счетчика чтения не изменится - СчБчт = 4.

1 2 3 4 5 6 7 8

т

т

Рис. 2 Состояние буфера

Пусть в следующем такте выполняется запись в буфер трех порций информации, тогда состояние буфера примет вид (рис. 3).

т

Рис. 3 Состояние буфера

Для этого состояния буфер будет полон, т.к. состояния счетчиков после операции записи имеют вид СчБз = 1 + 3 = 4, СчБчт = 4, и был перенос из счетчика записи (в предыдущем такте записи).

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

4 5 6 7 8 1 2 3

Рис. 4 Состояние буфера

Показания счетчиков буфера после операции чтения имеют следующие значения: СчБз = 4; СчБчт = 4 © 5 = 1.

2. Представление алгоритма управления взаимодействующими параллельными процессами в задаче производители-потребители в виде графа НДА и системы канонических уравнений

Для обеспечения бесконфликтного взаимодействия процессов в задаче производители—потребители с использованием согласующего буфера сообщений к алгоритму управления процессами предъявляются следующие требования:

а) выполнение условий взаимного исключения по отношению к критическому ресурсу - буферу сообщений;

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

Как было рассмотрено в предыдущем разделе, для определения состояния согласующего кольцевого буфера сообщений используются два основ-

ных счетчика буфера: СчБз и СчБчт, в которые при инициализации (ї = 0) записываются единицы. По показаниям этих счетчиков определяются события: 5бп = 1 - буфер полон и Ббо = 1 - буфер пуст.

Введение двух событий и 5бо позволяет охарактеризовать промежуточное состояние буфера сообщений, когда он может быть и не полон, и не пуст ( 5Бп = ^БО = 1). Это может иметь место, когда при очередной записи буфер был заполнен не полностью или когда после очередного чтения буфер не пуст. Для этого варианта использования буфера сообщений используются два дополнительных счетчика: Сч*з и Сч*чт, в которые перед операциями с буфером сообщений заносится число порций информации, записываемой или считываемой из буфера за один раз. По показаниям этих счетчиков определяются события и Sfcч, свидетельствующие о том, что должны быть прекращены операции записи или чтения соответственно.

Учитывая рассмотренные выше требования к алгоритму управления межпроцессного взаимодействия для параллельных процессов через согласующий кольцевой буфер, а также методику формализации функций взаимоисключения критических областей (участков) в [1], граф НДА, представляющий рассматриваемый алгоритм управления, можно представить в следующем виде (рис. 5).

Граф НДА (рис. 5) совместно с системой канонических уравнений, описывающих все реализуемые в алгоритме события, дает полное представление о структуре алгоритма управления взаимодействующими процессами в задаче производители-потребители, когда имеется один производитель и один потребитель.

Опишем назначение событий, представленных на графе (рис. 5):

5;| и 5з2 - события, свидетельствующие о поступлении заявок на обслуживание производителя (сервера) и потребителя (клиента) на запись и чтение из согласующего буфера соответственно.

Б и ^ - события, определяющие прием заявок на обслуживание производителя и потребителя на запись и чтение из согласующего буфера соответственно.

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

Брз и Брч - события, определяющие непересекающиеся операции записи и чтения из согласующего буфера соответственно.

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

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

Рис. 5 Граф НДА алгоритма управления межпроцессного взаимодействия в задаче производители—потребители с согласующим кольцевым буфером сообщений (для двух процессов: клиент-сервер)

Б* и Б 2 - события, обеспечивающие начало выполнения своих программ производителем и потребителем после выхода из критических участков соответственно.

Бт - событие, определяющее обращение к согласующему буферу и обеспечивающее начало процедуры реализации обращения к согласующему буферу при записи и чтении.

5бп и Ббо - события, свидетельствующие о том, что согласующий буфер полон и пуст соответственно.

5кз и Б^ - события, свидетельствующие о том, что должна быть прекращена запись и чтение из согласующего буфера соответственно. В этом случае буфер может находиться в промежуточном состоянии - не пуст и не полон.

Б^ и Б^ - события, обеспечивающие окончание ожидания процессами выхода из своих критических участков соответственно.

Б^р и Б^р - события, определяющие приоритет записи и чтения из согласующего буфера соответственно.

Бщ и БВз - события, обеспечивающие взаимоисключение критических участков (интервалов) производителя и потребителя соответственно.

/(V) - дизъюнктивный соединитель.

Основными событиями, определяющими бесконфликтные взаимодействия в любых задачах, когда имеет место использование разделяемых ресурсов (данных), в том числе и в задаче производители—потребители, являются события, определяющие прием (восприятие) заявок на обслуживание (в нашем случае это события Б1 и Б2 ), и события, определяющие входы процессов в свои критические интервалы (в нашем случае это события б\ и Бк).

Отмеченные события формализуют исходя из основных трех требований к критическим интервалам, обеспечивающих отсутствие конфликтных ситуаций при взаимодействии параллельных процессов во время организации доступа к разделяемым данным (ресурсу). Эти требования были определены Деккером и Дейкстра [3, 4] и формулируются таким образом:

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

2. Ни один процесс не может оставаться внутри критического интервала бесконечно долго.

3. Ни один процесс не должен бесконечно долго ждать входа в критический интервал.

Анализируя указанные требования к критическим интервалам, можно сформировать условия их выполнения, используя логику НДА.

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

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

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

Учитывая сформулированные условия, обеспечивающие выполнение

требований к критическим интервалам, события Бгк и Б- можно описать в следующем виде:

Б\ ( +1) = ББзБПр V Б\Бп ; (1)

Б- ( +1) = (Б-з V Б{)Бк . (2)

В уравнении (1) БВз - комбинационное событие, обеспечивающее

взаимоисключение критических интервалов на основе несовместимости со-

бытий Бгк с другими событиями из их общего числа, равного п,

Для нашего примера, когда п = 2, имеем:

(3)

р - комбинационное событие, обеспечивающее заданное приоритет-

ное обслуживание г-го процесса. Например, для дисциплины обслуживания с

за состояния согласующего буфера и наличия воспринятых заявок на обслуживание (запись и чтение). Так как состояния буфера характеризуются двумя событиями 5Бп и 5Бо , то возможны следующие четыре комбинации значений этих событий:

1. Для 5Бп = $бо = 0 буфер не пуст и не полон - возможна или запись, или чтение из буфера: при ^ = 1 будет запись, а при ^ = 0 и ^ = 1 будет чтение.

2. Для 5бп = 1 и ^бо = 0 при = $2 = 1 возможно только чтение.

3. Для $бп = 0 и $бо = 1 при = $2 = 1 возможна только запись.

4. Для 5бп = $бо = 1 имеем невозможную комбинацию, когда для любых значений событий ^ и $2 значение операции в буфере будет неопределенным (т.е. булева функция $Пр будет не полностью определенной).

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

буфера, события ^¿р и $Пр будут иметь вид

Учитывая полученные соотношения (3) и (4), уравнения (1) и (2) запишем в следующем виде:

относительным приоритетом $Пр может быть представлено следующим выражением:

В нашем конкретном случае для п = 2 имеем два события:

Б^р - событие, определяющее приоритет записи в согласующий буфер; Б^р - событие, определяющее приоритет чтения из согласующего бу-

фера.

1 2

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Описания событий 5Пр и 5^ могут быть составлены исходя из анали-

(4)

Sj (t +1) = (v Sx)SJ,

S2 (t + 1) = (S2,3 v S2 ). (6)

Представление событий Si и S2 в виде формул (6) свидетельствует о том, что заявки процессов на операции записи или чтения могут быть восприняты только в том случае, если процессы не находятся в своих критических интервалах.

События SJ и S4¡, символизирующие ожидание взаимодействующими процессами окончания процедуры записи и чтения из буфера, чтобы продолжить свою работу, прерванную обращением к согласующему буферу, формализуются так:

S^ (t +1) = (Si v sJ)Sp,

S4 (t +1) = (S2 v S4)Sp. (7)

Остальные события, реализуемые алгоритмом межпроцессного взаимодействия в задаче производители—потребители, представленные на графе НДА (рис. 5), формализуются таким образом:

Sm (t +1) = SJSi v S¡S2,

Sp3 (t +1) = SmSp v Slp3 ( Sk3 ),

S2ч (t +1) = SmS¡ v SJ4 (oSk4 ),

Sn (t + 1) = Sp3 ( SEn v Sk3 ),

Sn2 (t +1) = S2ч (Seo v Sk4),

Slp (t +1) = SiSJ,

S2p (t +1) = Sk2Sn2, sJ (t +1) = s\ Slp,

S2 (t +1) = S2 S 2p. (8)

Заключение

Полученная система канонических уравнений (5)-(8) отвечает требованиям описания алгоритмов управления параллельными взаимодействующими процессами в формальной стандартной форме, когда функции переходов представлены в явном виде, что позволяет в дальнейшем просто решать задачи структурной реализации алгоритмов управления. В частности в качестве примера такая структурная реализация представлена в [5], где рассматривается аппаратная реализация модуля синхронизации асинхронных процессов с использованием ПЛИС.

Рассмотренная в данной работе методика формализации алгоритма управления межпроцессным взаимодействием для простейшего варианта за-

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

Список литературы

1. Вашкевич, Н. П. Недетерминированные автоматы в проектировании систем параллельной обработки: учебное пособие / Н. П. Вашкевич. - Пенза : Изд-во Пенз.гос.ун-та, 2004. - 280 с.

2. Эндрюс, Г. Р. Основы многопоточного параллельного и распределенного программирования : пер. с англ. / Г. Р. Эндрюс. - М. : Вильямс, 2003. - 512 с.

3. Дейтел, Г. Введение в операционные системы : в 2-х т. : пер. с англ. / Г. Дейтел.- М. : Мир, 1987. - 1 т. - 359 с.

4. Кейлингерт, П. Элементы операционных систем : пер. с англ. / П. Кейлингерт. - М. : Мир, 1985. - 295 с.

5. Вашкевич, Н. П. Аппаратная реализация функций синхронизации параллельных процессов при обращении к разделяемому ресурсу на основе ПЛИС / Н. П. Вашкевич, Р. А. Бикташев, Е. И. Гурин // Известия высших учебных заведений. Поволжский регион. Технические науки. - 2007. - № 2. - С. 3-12.

i Надоели баннеры? Вы всегда можете отключить рекламу.