Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Билет №18 Принципы программирования на языке OCCAM.

Читайте также:
  1. II. Основные положения учения Ф. де Соссюра о языке.
  2. III. ОСНОВНЫЕ ПРИНЦИПЫ МАТЕРИАЛИСТИЧЕСКОГО УЧЕНИЯ К. МАРКСА И Ф. ЭНГЕЛЬСА.
  3. III. Принципы взаимодействия государства и других общественных институтов
  4. III. Принципы лечения ГСЗ
  5. IV. Принципы организации и осуществления государственной власти
  6. SMART-ПРИНЦИПЫМЕНЕДЖМЕНТА
  7. Аннотация на испанском языке
  8. Антонимы как лексическая микросистема. Логические основания антонимии в языке. Виды антонимов. Функции антонимов в речи.
  9. Арбитражные суды РФ, их задачи, система, характер рассматриваемых дел. Принципы организации и деятельности
  10. Артикль, проблема статуса артикля. Различные подходы к количеству артиклей в английском языке и их происхождение. Проблема нулевого артикля.

OCCAM - язык высокого уровня, предназначенный для выполнения параллельного программирования и создания транспьютеров. Является результатом совместной разработки корпорации INMOS и Оксфордского университета. Концепция OCCAM базируется на теории взаимодействующих процессов, Свое название получил в честь английского философа XIV в. Уильяма Оккама, поскольку в основе разработки языка был использован провозглашенный им принцип: «Сущность не должна превышать необходимость» («бритва Оккама»). В соответствии с упомянутым принципом из двух одинаково эффективных вариантов решений принимается наиболее простое. Язык OCCAM используется в транспьютерах первых и всех последующих выпусков.
Полное описание языка OCCAM можно найти в книге [9]. Здесь же

ограничимся рассмотрением ряда примеров, с помощью которых

проиллюстрируем основные особенности программирования на

языке OCCAM.

Взаимодействие параллельно выполняемых процессов осуществляется

путем обмена сообщениями. Для передачи данных от одного процесса к другому используются каналы передачи данных и следующие операторы: channel? variable - ввод сообщения из канала channel

в переменную variable, channel! expression - вывод значения

выражения expression в канал channel.

Рассмотрим следующий пример. Пусть требуется ввести из канала chan1 некоторое числовое значение в переменную x, затем вывести

в канал chan2 результат возведения этого же числа в квадрат. Схематически это это можно представить так:

 

chan1 -> | x x*x | -> chan2.

 

Соответствующая программа на языке OCCAM выглядит следующим образом:

VAR x:

SEQ

chan1? x

chan2! x*x

Здесь оператор

SEQ

P

Q

определяет последовательную композицию конструкций P и Q (P;Q).

Теперь потребуем, чтобы этот процесс выполнялся в цикле пока x>0.

В этом случае мы имеем:

VAR x:

WHILE x>0

SEQ

chan1? x

chan2! x*x

 

Рассмотрим теперь следующую конструкцию:

 

PAR

VAR x:

WHILE x>0

SEQ

chan1? x

chan2! x*x

VAR y:

WHILE y>0

SEQ

chan3? y

chan4! y*y

 

Здесь оператор

PAR

P

Q

определяет параллельную композицию конструкций P и Q (P ||Q).

В этом случае мы имеем два независимых параллельных процесса:

 

chan1 -> | x x* x | -> chan2

chan3 -> | y y* y | -> chan4

 

Теперь преобразуем приведенную выше следующим образом:

 

chan1 -> | x x * x |

comms

-------------------> | y y * y | -> chan2

 

Программа, адекватная приведенной выше схеме, будет иметь вид:

 

CHAN comms

PAR

VAR x:

WHILE x>0

SEQ

chan1? x

comms! x*x

VAR y:

WHILE y>0

SEQ

comms?y

chan2! y*y

 

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

осуществляется через общий канал comms. Содержательная сущность представленного выше параллельного выполнения процессов сводится

к тому, что вычисление y2 = (x2) 2 может выполняться одновременно

с вычислением квадрата последующего введенного значения

переменной x.

Приведенную выше программу можно написать короче, если определим следующую процедуру:

 

PROC square (CHAN source, sink) =

VAR x:

WHILE x>0

SEQ

source? x

sink! x*x

 

Таким образом, на основе определенной выше процедуры, перепишем программу следующим образом:

 

CHAN comms

PAR

square (chan1, comms)

square (comms, chan2)

 

Приведем другой пример, иллюстрирующий операцию альтернативной композиции процессов. В качестве примера рассмотрим

программу моделирования работы цифрового радиоприемника, точнее

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

звуком мы имеем две клавиши louder и softer, нажимая которые мы либо увеличиваем громкость звучания (louder), либо уменьшаем (softer).При

программировании будем представлять эти клавиши в виде каналов.

Кроме каналов louder и softer введем канал amplifier, который будет определять усилитель. Наконец, введем переменную volume, целочисленное значение которой будет определять громкость звучания.

Передача значения переменной volume на усилитель amplifier будет выполняться оператором amplifier! volume.

Таким образом процесс

 

SEQ

volume:=volume +1

amplifier! volume

 

моделирует увеличение громкости, а процесс

 

SEQ

volume:=volume -1

amplifier! volume

 

моделирует уменьшение громкости.

Далее, нажатие клавиши louder будет активизировать выполнение

оператора louder? ANY, а нажатие клавиши softer будет активизировать выполнение оператора softer? ANY. Значение переменной ANY здесь не играет никакой роли, для нас является важным только сам факт выполнения события ввода (louder? ANY или softer? ANY). Таким

 

образом мы получаем следующую альтернативную операцию:

 

(louder? ANY -> LPROC) | (softer? ANY ->SPROC),

 

где процесс LPROC моделирует увеличение громкости, а процесс SPROC моделирует уменьшение громкости. То есть при выполнении события louder? ANY запускается процесс LPROC, а при выполнении события softer? ANY запускается процесс SPROC. На языке OCCAM

имеем:

ALT

louder? ANY

LPROC

softer? ANY

SPROC

На основе вышеперечисленного представим следующую программу

на языке OCCAM:

 

VAR volume:

SEQ

volume:=0

WHILE true

ALT

louder? ANY

SEQ

volume:=volume +1

amplifier! volume

softer? ANY

SEQ

volume:=volume -1

amplifier! volume

 

Конструкция WHILE true определяет " бесконечный цикл " до выключения цифрового радиоприемника.

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

 

DEF max=10, min=2

VAR volume:

SEQ

volume:=0

WHILE true

ALT

(volume<max) & (louder? ANY)

SEQ

volume:=volume +1

amplifier! volume

(volume>min) & (softer? ANY)

SEQ

volume:=volume -1

amplifier! volume

В настоящее время используется достаточно большое количество языков параллельного программирования. Это - диалекты и расширения известных языков (например CC++, C/C+, PARSEC и т.д.), а также

языки, специально созданные для параллельных вычислений

(ADA, Concurrent Clean,MODULA 3 и другие). Язык OCCAM отличается от всех этих перечисленных языков своей оригинальностью, простотой

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

 

 




Дата добавления: 2015-02-16; просмотров: 102 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.022 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав