Бурное развитие распределенных систем обработки информации и сетей ЭВМ вызвало появление новой области вычислительной техники, называемой “протокольной технологией”. В конечном счете роль протокольной технологии сводится к установлению соглашений (протоколов), которым должны следовать компоненты распределенных систем, с тем, чтобы выполнять требуемые от них функции.
Как правило, протокольный уровень состоит из набора протокольных объектов, взаимодействующих друг с другом для согласования своих действий. Описав поведение этих объектов, можно полностью определить протокол.
Объекты, используемые для спецификации протоколов, можно классифицировать по различным признакам. В этой работе в качестве объектов будут рассматриваться автоматы.
Целью работы является разработка интерактивной системы для моделирования сети из двух автоматов и построения графа достижимости, описывающего функционирование сети.
Автоматом будем называть объект А =
(S, X, Y, D , s ), где S – конечное непустое множество состояний, s - начальное состояние, X - конечное непустое множество входных символов, Y - конечное непустое множество выходных символов, D Н Sx(XИY)xS - множество переходов.Введем множество
Z =XИY, z О Z – входной либо выходной символ.Автомат удобно представить в виде конечного ориентированного графа, где состояния автомата – вершины графа, D - множество переходов – множество дуг графа, где каждый переход (
s , z, s ) понимается как дуга, помеченная входным или выходным символом z , исходящая из s и входящая в s .Дугу, помеченную входным символом, назовем принимающей дугой автомата. Дугу, помеченную выходным символом, назовем посылающей дугой автомата.
Автомат функционирует в дискретном времени
{1, 2, 3, 4, 5,..}.Функционирование автомата заключается в том, что он осуществляет переходы: если на его входе есть символ
x и он находится в состоянии s , то он может прочесть x и перейти в s , где (s , x, s ) О D ; автомат может выдать на выход символ y и перейти в s где (s , y, s ) О D .В каждый момент времени автомат осуществляет только один переход.Сетью из двух автоматов назовем четверку (
A, B, a, b) , где A, B – автоматы, a, b – очереди типа FIFO, причем Y ОX , Y ОX . Сеть автоматов изображена на рис. 2.1.Каждый автомат функционирует независимо от другого автомата. При этом автомату доступен для чтения только начальный символ слова, записанного в очереди, подключенной к его входу. Автомат может прочесть его, и при этом прочитанный символ удаляется из очереди. Если автомат выдает на выход символ y, и в очереди находится слово y ..y , то y присоединяется справа к этому слову, то есть в выходной очереди автомата оказывается слово y ..y y. Таким образом, автоматы взаимодействуют друг с другом, меняя содержимое очередей.
Конфигурацией или состоянием сети назовем четверку (s, t, a , b ), где s и t – текущие состояния автоматов А и В соответственно, а a и b - слова, находящиеся в очередях a и b соответственно.
Функционирование сети описывается (возможно, бесконечным) графом, который называется графом достижимости сети G(A, B). Его вершинами являются всевозможные конфигурации (состояния сети), а дугами – четверки (K , z, f,K ) где K = (s , t , a , b ), i=1, 2 – конфигурации, a -слово в алфавите X , b - слово в алфавите X , f О {A,B}, для которых :
Начальным состоянием графа
G(A,B) объявляется состояние (s , t , e, e), где s ,t - начальные состояния автоматов A и B соответственно, е – пустое слово (в любом алфавите).Состояние сети (
s, t, a , b ), где из состояния s автомата А и из состояния t автомата B выходят только принимающие дуги, и a = b = e, назовем тупиковым состоянием сети. Состояние сети (s, t, a , b ), где из состояния s автомата А выходят только принимающие дуги, и a = xg , где символ x не является отметкой ни одной принимающей дуги, исходящей из состояния s , называется состоянием несанкционированного приема. Аналогичное определение строится для автомата B.Взаимодействие пары автоматов
A и B назовем ограниченным, если существует k такое, что для каждой вершины графа достижимости G(A, B) длина слов в очередях Ј k.Одной из основных проблем логического анализа корректности протоколов является следующая проблема : определить для произвольных
A, B , существуют ли в G(A, B) :В [1] было показано, что все три проблемы являются алгоритмически неразрешимыми. В [4] было показано условие на взаимодействие двух систем, при котором эта проблема является алгоритмически разрешимой.
В базе данных (БД) программы хранится описание сети, состоящей из автоматов и дерево графа достижимости, описывающего функциониро-вание этой сети.
Как было описано выше, сеть состоит из 4-х компонент:
Оба автомата A и
B, хранящиеся в памяти, имеют тип TAutomate, который представляет собой структуру, показанную в таблице 2.1.Таблица
2.1 – структура типа TAutomate
Имя |
Тип |
Назначение |
NumStates |
Целое |
Количество состояний автомата |
BegState |
Целое |
Начальное состояние |
X |
Массив [1..MNS*MNS] символов |
Множество входных символов |
Y |
Массив [1..MNS*MNS] символов |
Множество выходных символов |
NumX |
Целое |
Количество входных символов |
NumY |
Целое |
Количество выходных символов |
Cr |
Массив [1..MNS,1.. MNS] записей |
Множество переходов. Cr[i,j] содержит информацию о переходе от i-й вершины к j-й.Элементом массива Cr является запись, состоящая из полей:Z (символ) – символ, по которому осуществляется переход Io (логическое) – true, если Z – входной символ; false, если выходной. |
Максималное количество состояний автомата, задается константой
MNS (MaxNumStates).Обе очереди a и
b, хранящиеся в памяти, имеют тип TQue, который представляет собой массив символов.В БД имеются две переменные, связанные с очередями
:Граф достижимости представляется в БД в виде динамической структуры – дерева. Каждый узел этого дерева имеет тип TNode, который представляет собой структуру, показанную в таблице
2.2.Таблица
2.2 – структура типа TNode
Имя |
Тип |
Назначение |
Cross |
TСross |
Входящая дуга |
Conf |
TСonf |
Конфигурация сети |
Anodes |
Массив [1..MNC] указателей на TNode |
Выходящие дуги |
NumCr |
Целое |
Количество выходящих дуг |
Максималное количество выходящих дуг, задается константой
MNC (MaxNumCrosses).Конфигурация сети (тип TСross), представляет собой следующую структуру
:Входящая дуга (тип TСross) состоит из следующих полей
false,
если выходной.Далее приведено краткое описание модулей программы, с указанием основных функций и процедур, входящих в них.
В системе реализована возможность сохранения в файле и загрузки из него параметров автоматов.
Информация об автомате заносится в текстовый файл, поэтому имеется возможность редактирования его с помощью текстового редактора. Файл автомата имеет расширение
aut.Если при запуске программы в текущей директории обнаружены файлы с именами
“a.aut” и “b.aut”, то они загружаются по умолчанию.Параметры автомата заносятся в файл в следующей последовательности
:Значение каждого параметра записывается в файле с новой строки и за ним следует имя этого параметра в качестве коментария.
Для построения дерева достижимости в программе используется процедура
MakeTree (иодуль Tree). Процедура является рекурсивной и имеет следующие аргументы:Первоначальный вызов
MakeTree осуществляется со следующими аргументами:Conf.s:=A.BegState;
Conf.t:=B.BegState;
Conf.Qa:=''; Conf.Qb:='';
Cross.z:=' ';
MakeTree(Tree,Cross,Conf);
При каждом вызове
MakeTree динамически выделяется память для узла дерева Node, заполняется конфигурация сети и входящяя дуга для этого узла:Node^.Cross:=Cross;
Node^.Conf:=Conf;
а
все выходящие дуги обнуляются:Node^.ANodes[i]:=nil, i=1.. MNC
Node^.NumCr:=0.
Дальнейшее создание узлов, выходящих из
Node, осуществляется по следующему алгоритму:n:=1; // №
узла в ANodei:=Conf.s;
Cr.q:='A';
j:=1 .. A.NumStates
Если A.Cr[i,j].z<>' ' то
Cr.z:=A.Cr[i,j].z;
Cr.io:=A.Cr[i,j].io;
Co.s:=j;
Co.t:=Conf.t;
Если
A.Cr[i,j].io=false тоCo.Qa:=Conf.Qa;
Co.Qb:=AddToQue(Conf.Qb,Cr.z);
Если QueOverflow то
QueOverflow:=false; выход;
MakeTree(Node^.ANodes[n],Cr,Co);
Node^.NumCr:=Node^.NumCr+1;
n:=n+1;
иначе Если A.Cr[i,j].z=ReadFromQue(Conf.Qa) то
Co.Qa:=DelFromQue(Conf.Qa);
Co.Qb:=Conf.Qb;
MakeTree(Node^.ANodes[n],Cr,Co);
Node^.NumCr:=Node^.NumCr+1;
n:=n+1;
i:=Conf.t;
Cr.q:='B';
j:=1 .. B.NumStates
…………. //
те же действия для автомата BПри
просмотре построенного дерева достижимости и записи результатов в файл (процедура PrintTree) в дереве определяются особые состояния сети (тупики, несанкционированное чтение), а также осуществляется проверка ограниченности взаимодействия пары автоматов.Процедура является рекурсивной и имеет один аргумент
:Node:
указатель на ТNode.
При первоначальном вызове в
PrintTree в качестве аргумента передается указатель на вершину дерева достижимости.Дальнейший просмотр узлов, выходящих из
Node, с определением особых состояний осуществляется по следующему алгоритму:Запись в файл конфигурации сети
и входящей дуги для узла Node:Node^.Conf,Node^.Cross
//
Определение тупиков и несанкц. чтенияfl:=true;
i:=Node^.Conf.s;
j:=1 .. A.NumStates
Если
A.Cr[i,j].io=false то fl:=false;i:=Node^.Conf.t;
j:=1 .. B.NumStates
Если B.Cr[i,j].io=false то fl:=false;
Если fl то
Если (Node^.Conf.Qa='') и (Node^.Conf.Qb='') то
Запись(' - Тупик')
иначе fl:=false; fl2:=false;
Если Node^.Conf.Qa<>'' то
fl:=true; i:=Node^.Conf.s;
j:=1 .. A.NumStates
Если A.Cr[i,j].z=ReadFromQue(Node^.Conf.Qa)
то fl:=false;
Если Node^.Conf.Qb<>'' то
fl2:=true; i:=Node^.Conf.t;
j:=1 .. B.NumStates
Если B.Cr[i,j].z=ReadFromQue(Node^.Conf.Qb)
то fl2:=false;
Если fl или fl2 то Запись(' - несанкц. чтение в ');
Если not fl2 то Запись(f,'A') иначе
Если not fl то Запись(f,'B') иначе Запись(f,'A и B')
n:=1 .. Node^.NumCr
PrintTree(Node^.ANodes[n]);
В программе используются очереди с дисциплиной обслуживания FIFO. В модуле
Queues содержатся некоторые функции для работы с очередями, приведенные в таблице 3.1.Таблица
3.1 - Функции для работы с очередями
Имя |
Тип результата |
Аргументы |
Назначение |
AddToQue |
TQue |
Q:TQue; c:cимвол |
Добавляет символ с в конец очереди Q, если длина Q меньше MaxQLen.Возвращает полученную очередь. |
ReadFromQue |
Символ |
Q:TQue |
Читает и возвращает символ из начала очереди Q; если длина Q равна 0, то возвращает ‘ ‘. |
DelFromQue |
TQue |
Q:TQue |
Удаляет символ из начала очереди Q, если длина Q больше 1.Возвращает полученную очередь. |
При вводе данных программно осуществляется контроль следующих ситуаций (модуль AutoEdit) :
Ситуации 1 и 2 контролируются непосредственно при изменении параметров, а ситуации 3 – 6 - при нажатии кнопки ‘Ok’ или
‘Trim’.