SEQ – означает секцию последовательных процессов.
PAR – означает секцию параллельных процессов.
Пример:
SEQ
x: = 0
y: = 1 – означает последовательное выполнение процесса
z: = 2 – выход из секции последовательных процессов
PAR
a: = 1
b: = 2
Здесь неизвестно какое присваивание будет первым(может одновременно, может с опозданием), но известно, что тело этого цикла закончится, когда выполнится 2 присвоения.
Пример: драйвер оператора
ALT – данная конструкция используется только при работе канала
Пример:
ALT
WHILE TRUE (скобок никаких нет, но то что имеет отношение к телу WHILE имеет отступ 2 пробела от 1-го знака слова WHILE)
ALT // альтернативное выполнение процессов
left.chan?x // в левый канал вводим число x
output!x // тело процесса left.chan
right.chan?x //
output!x
Эта конструкция непрерывного объединения 2-х потоков данных.
Есть некий процесс alt:
Рис.7.42.
ALT конструкция означает, что войдя в тело этого процесса не ожидает готовности данных, а проверить: есть ли готовность данных – выполняется этот процесс, если нет готовности, то выполняется второй процесс.
Секция или конструкция ALT позволяет выполнять несколько альтернативных процессов в зависимости от готовности того или иного канала.
Пример:
Имеется три процесса функции:
edit(in, out)
kb(in) — процесс ввода данных с клавиатуры
screen(out) — процесс вывода данных на экран
Потребуется три канала (байтовые):
CHAN OF BYTE key // канал, откуда поступают нажатия от клавиш клавиатуры
CHAN OF BYTE scr // канал вывода на экран
CHAN OF BYTE in, out // каналы целых чисел
Нарисуем схему, которую хотим реализовать. Т.е. у нас имеется драйвер клавиатуры, драйвер экрана, как некие процессы и имеется редактор, к-рый вводит с клавиатуры и выводит на экран.
Схема, которая позволит организовать диалог с оператором.
Рис.7.43.
Код этой программы следующий: параллельно запускается процесс редактора. Ему в качестве параметра передаются 2 канала: входной и выходной. Далее запускается драйвер клавиатуры, которому передается канал от оборудования и входной канал. И запускается 3 канал, к-рый получает рез-тат обработки данных редактором. Эти процессы могут тоже, в свою очередь, порождать процессы: например редактор может порождать процесс, занимающийся формированием какого-нибудь окна.
PAR
edt(in,out)
kb(in)
screen(out)
