Параллельная обработка информации в транспьютерных системах. Язык ОССАМ как инструментальное средство параллельного программирования транспьютерных систем.
Однородные системы – это совокупность однородных вычислительных устройств или модулей одинаковым образом связанных между собой. Количество таких вычислительных устройств неограниченно может быть сколь угодно большим. Для ОВС характерна избыточность вычислительных устройств и связей между ними, что позволяет обеспечить высокую степень готовности и надежности работы всей системы в целом, легко проводить перестройку в случае решения любой задачи или в случае выхода из строя отдельных элементов системы.
В основе концепции однородных вычислительных систем положено три принципа, каждому из которых соответствует своя аксиома:
1)принцип параллельности операций: ему соответствует аксиома параллельности задач и алгоритма
2)принцип переменности логической структуры
3)принцип конструктивной однородности элементов и связи между ними: ему соответствует аксиома контролируемой однородности элементов
1)устанавливает что любая сложная задача может быть разбита на набор связанных между собой простых подзадач и для получения моделей задачи может быть предложен алгоритм допускающий ее эффективную параллельную реализацию
2)базируется на 1) Процесс решения задачи можно представить некоторой структурной моделью включающей в себя набор подзадач и связей между ними, данной структурной модели можно поставить в соответствие другую структурную модель, представляющую собой совокупность обработанных элементов и связей между ними (процесс решения задачи может быть описан с помощью схемы алгоритма т.е. планарного графа. Существует утверждение, что планарный граф …
Поскольку транспьютерные система – это ОВС, в которой все элементы однородны, равноправны и имеют одинаковое количество связей с другими элементами и эти связи локальны, структурную моделью транспортной системы удобно рассматривать как решетчатый граф:
Преимущества решетчатых графов является их регулярность, в силу которой на них могут быть отображены разнообразные графы, модулирующие взаимосвязи между задачами, в том числе и с нерегулярной структурой.
Язык ОССАМ язык назван в честь философа. Основными единицами, из которых строится программа на языке ОССАМ, является простые действия, из которых с помощью управляющих примитивов формируется различного рода процессы:
Операторных скобок в языке нет, поэтому принадлежность какого-либо действия или подпроцесса другому процессу определяется благодаря величине отступа от левого края.
Простые действия в ОССАМ: 1)присваивание 2)ввод 3)вывод 4)SKIP – процесс (пустое действие) 5)STOP – блокировка процесса 1)переменная := выражение 2)канал ? переменная , канал ? переменная 1; переменная 2; переменная 3 …N 3)канал ! выражение
Ввод и вывод данных соответствует операции чтения информации из канала и запись информации в канал.
Каналами называются средства позволяющие передавать данные между процессами.
Обмен данными происходит тогда, когда оба процесса и передающие данные и описывающие их поступление готовы взаимодействовать по одноименному каналы, т.е. они синхронизируются.
Каналы, константы и переменные являются основными и новыми объектами, которыми оперирует программа на языке ОССАМ
Все эти объекты подлежат обязательному предварительному описанию. Имена объектов могут включать в себя буквы, цифры и символ точка.
Описания завершаются символом двоеточие.
Допустимо описывать несколько объектов одной директивы. В этом случае имена объектов разделяются запятыми.
Константы в ОССАМ называются именованными объектами, которым соответствует состояние неизвестных значений.
Переменными в языке ОССАМ трактуется как обозначения битовых комбинаций фиксированного размера.
Переменные должны быть описаны раньше того процесса, в котором они используются.
Определение происходит иначе:
Var переменная 1,…N
DEF константа 1,..N
CHAN канал 1…N
Как правило, описания каналов располагаются перед управлением инфинитивом PAR. В ОССАМ поддерживается только один структурный тип данных – массивы.
Массивы: 1)один и тот – же массив 2)таблицы 3)обилие массивов- это массивы переменных или каналов.
[var | chan] имя массива [ количество элементов] они используются в составе определения констант DEF
TABLE [ выражение 0…N]
Описание процедуры или именование процесса выглядит следующим образом:
PROC имя [фор-е параметры]=текст процесса
SEQ
Chan |? A
Chan? B
Z:=a+b
Все действия и подпрограммы входящие в его состав.
Все действия процессов, входящие в состав пар процессов могут выполняться в любом порядке, возможно и параллельно.
Par
Seq
Рar
Char|?a
Char?b
Z:=a+b
Char 3!z
Seq
Rar
Char |!5
Char|!
Char 3|z
Поскольку последовательность действий в случае PAR процессов неопределенна, то недопустимо наличие в одном и том же пар процессе действий изменяющих значение переменных, которые являются операндами для других действий в составе того же самого РAR процесса.
ALT процесс включает в себя группу объектов, из которых выполняется только один, который в данный момент считается готовым.
В состав сторожа входит охраняющий процесс и логическое выражение. Логическое выражение не является обязательным, но если оно задано, оно отделяется от охраняющего процесса & и предшествует ему.
Сторож считается готовым, если логическое выражение истинно и готов охраняющий процесс.
Охраняющий процесс SKIP готов всегда:
(x>y)&char 1?a
res!a
(x<y)&char 2?b
res!b
(x=y)& skip
res !zero.code
Условный процесс или if процесс имеет следующий синтаксис:
Логическое выражение 1
Процесс 1
……………….
Логическое выражение n
Процесс n
If a<b
Char 1! 1
a>b
char 1 !(-1)
a=b
char 1!0
Для организации циклов используется while процесс
While процесс – последовательный цикл с неограниченным количеством повторений.
While логическое выражение и повторяемый процессы
B:=true
While b
Seq
Char 1?a
Char 2!a
If
a>10
b:=false
ОССАМ позволяет задавать такую разновидность циклов, как массивы процессов, при этом указывает, сколько процессов надо повторить, и какими являются эти процессы: 1)последовательными 2)параллельными 3)альтернативными 4)условными
Действия, выражающиеся в повторных процессах должны быть идентичны
[ALT |par |seq|if] имя счетчика = [ for количество]
В общем случае циклы FOR позволяют организовать системы с заданным количеством процессов:
Par:=[0 for 100]
Buffer [:]array[i]
Пример решения задачи выполнения сортировки одномерного массива по не возрастанию. Процедура описывает поведение элемента матричного процессора: