Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VPKS_v2_UKR_new.doc
Скачиваний:
24
Добавлен:
11.09.2019
Размер:
2.31 Mб
Скачать

Особливості мов конкурентного програмування

На відміну від традиційних мов вони містять засоби для опису операцій з конкурентними процесами.

Їхнє використання переслідує одну з наступних цілей:

  • програмування прикладних завдань із конкурентними процесами;

  • опис завдань, реалізованих паралельно на багатопроцесорній системі.

Моделі конкурентних процесів

У різних конкурентних мовах встановлюються різні правила визначення процесів, їхнього розвитку й появи в часі.

У мові Оккам є два типи процесів: примітиви й композиції.

Процеси - композиції мають деревоподібну структуру, у вузлах якої перебувають під процеси - композиції, а листами є процеси - примітиви.

Алгоритми процесів-примітивів постулюється в описі мови.

Алгоритми роботи процесів- композицій формулює програміст за допомогою конструктора інших процесів-примітивів і процесів композицій.

Всі процеси примітиви декларуються на початку програми, а процес-композиції й вся структура програми визначається текстом, заздалегідь складеним програмістом.

Процеси виконують деякі дії після чого закінчують своє існування.

У період свого існування процес може перебуває в трьох станах:

  • виконуваному (активному);

  • виконаному;

  • припиненому (відкладеним)

Перехід із припиненого стану в активне називається активізацією процесу.

На відміну від мови Оккам у ряді систем і мов використовується динамічне керування процесами. У мові Ада, наприклад, процеси, називаються завданнями. Вони можуть декларуватися, а також можуть динамічно виникати всередині програми.

Мова Ада призначена для розробки великих програмних систем, тому вона має різні засоби для відпрацьовування певних модулів, а потому для об'єднання цих модулів у систему.

Взаємодія процесів, синхронізація й передача даних

Основні труднощі конкурентного програмування складаються в правильній взаємодії процесів.

Конкурентні процеси в єдиній програмі рідко бувають незалежними. Вони вимагають передачі даних один одному й синхронізації своїх дій. Необхідно мати можливість програмування погодженої роботи паралельних процесів і передачу даних між ними.

Передача даних базується або через загальні змінні, або передачею повідомлень.

Загальні змінні – комірки пам'яті, до яких два або більше процеси мають доступ (погоджений) як для читання так і для запису.

Конкуренція передачі повідомлень має на увазі обмін інформацією між процесами, тобто дані копіюються з локальної пам'яті одного процесу в локальну пам'ять іншого.

Синхронізація процесів тісно пов'язана з механізмом передачі даних. Її можна визначити як «знання» одним процесів стану іншого.

Різні мови використовують різні методу передачі даних і синхронізації.

Загальні змінні. Цей метод має простоту реалізації, але має й три серйозних недоліки:

  • часто буває необхідність процеси, які використовують загальну пам'ять, запускати на різних процесорах, що не мають загальної пам'яті;

  • використання механізму загальних змінних ускладнює розробку формальної моделі мови програмування, це утрудняє верифікацію програми;

  • необхідний складний апарат для керування погодженим доступом до загальних змінних.

Мова Оккам допускає наявність загальної пам'яті але відкритої тільки для читання. У програмах можна використати тільки загальні константи, так що, фактично, механізм обміну через загальні змінні не використовується, він вільний від зазначених недоліків.

Передача повідомлень. Модель передачі повідомлень має на увазі, що деякий процес посилає за допомогою деякої команди SEND повідомлення, прибуття якого слід чекати за допомогою узагальненої команди WAIT інший процес.

У загальному випадку процес передачі повідомлення можна записати як:

SEND <повідомлення> TO <ім'я процесу приймача>

і WAIT <повідомлення> FROM <ім'я процесу джерела>

Виділяють чотири види передачі повідомлень, які відрізняються числом джерел і приймачів:

  • один до одного (двоє процесів);

  • N до одного (один процес готовий прийняти повідомлення від кожного з безлічі N процесів, процес- джерело визначить процес - приймач)

  • Один до N(один процес- джерело може передати своє повідомлення кожному із N процесів або декільком з них)

  • M до N - узагальнення попереднього виду.

При реалізації всіх зазначених випадків важливо знати спосіб ідентифікації процесів джерел і приймачів.

Асиметрична форма запису використовується в тому випадку, коли процесу - приймачу важливий сам факт передачі йому повідомлення, при цьому ім'я процесу - джерела не має значення.

SEND <повідомлення> TO <імена процесу приймача>

і WAIT <повідомлення>

Ця форма запису корисна, коли природа взаємозв'язку між процесами організована за принципом «клієнт-сервер (обслуговуючі пристрої)» Процес-сервер надає деяку послугу будь-якому процесу-клієнтові (звичайно одному в заданий момент часу).

Клієнт повинен знати ім'я процесу сервера при посилці йому повідомлення- вимоги на обслуговування.

Процес-сервер не має потреби в ідентифікації процесу-клієнта доти, доки не пошле йому відповідне службове повідомлення, що підтверджуює готовність процесу-сервера обслужити конкретного процес-клієнта.

Унікальне іменування всіх процесів визначає обсяг програм і часто буває неприйнятним. Вирішити проблему можна за допомогою введення в мову об'єктів посередників, які називають поштовими скриньками (mailbox) або каналами (channels). Посередники мають унікальні імена. Це дозволяє зробити процеси безіменними, тому що вони спілкуються один з одним через посередників.

SEND <повідомлення> TO <імена посередника>

і WAIT <повідомлення> FROM <ім'я посередника >

Є кілька видів посередників:

  • обслуговуючий багато процесів-джерел і багато процесів-приймачів;

  • один процес-приймач і багато процесів-джерел;

  • один процес-приймач і один процес-джерело.

Посередник може бути описаний як структура, що передає інформацію як в одному, так і обох напрямках.

Саме повідомлення може мати складну будову від одного байта до змінного типу запису з варіантами. Структуру повідомлення ще називають протоколом.

Виділення поштових скриньок може бути статичним і динамічним.

Динамічне введення або видалення зв'язку процесу й виділення поштової скриньки виробляється за допомогою спец. команди:

З'ЄДНАТИ й РОЗ'ЄДНАТИ

У синхронізованих системах два процеси можуть обмінюватися повідомленнями, якщо вони готові до спілкування в той самий момент часу. Такі системи підрозділяються на 3 класи:

  • слабко зв'язані (loosly coupled), зв'язані через поштову скриньку у вигляді буферного накопичувача;

  • сильно зв'язані (tightly coupled), коли є певні крапки синхронізації, зокрема випадок слабко зв'язкових систем з буфером рівним 0;

  • повністю зв'язкові (completely coupled), коли існує єдине централізоване синхронізуюче джерело.

Централізована загальна синхронізація необхідна, коли відбувається спілкування трьох або більше процесів, готових до обміну повідомленнями.

У сильно зв'язаній системі двох взаємодіючих процесів той процес, що виконує операцію SEND, затримується доти , поки інший процес-приймач генерує відповідне службове слово (reply messege) процесу-джерелу про прийом його повідомлення. Процес-джерело продовжує роботу після прийому відповідного службового повідомлення.

Подібна модель синхронізації використана в мовах Ада й Оккам і називається синхронною або «рандеву».

Модель легко реалізується, але характеризується малоефективним використання часу окремих процесів, за яких реалізовані конкурентні процеси.

У слабкозв’язаній системі процес, виконавши команду SEND, продовжує виконуватися не чекаючи, поки інший процес виконає команду WAIT і сповістить йому про це. Подібна модель називається асинхронною. Вона використана в мові конкурентного програмування ВВС.

Недоліком є те, що процес-джерело не знає про те, чи прийняте його повідомлення або процес-приймач уже закінчив своє існування.

Контрольні запитання

  1. Яка ситуація отримала назву затриманого очікування або прокручування?

  2. Яка ситуація отримала назву тупіка .

  3. Які існують архітектури паралельної обробки?

  4. Що розуміється під терміном "синхронізація процесів"?

  5. Які існують види передачі повідомлень між процесами?

Рекомендована література

  1. Xoap4. Взаимодействующие последовательние процессы. Пер. с англ.- М."Мир", 1991.

  2. Программирование на паралельных вичислительных системах.-М."Мир", 1991.

Лекція 15. Трансп'ютери

План лекції

  1. Трансп'ютери

  2. Внутрішня архітектура трансп'ютера.

  3. Послідовна обробка.

  4. Інструкції.

  5. Підтримка паралелізму

  6. Зв'язок.

  7. Таймер.

  8. Альтернативне використання.

  9. Інструкції з плаваючою крапкою.

Виклад лекції

1.Трансп’ютери

Сімейство трансп’ютерів спроектоване так, щоб максимально полегшити побудову паралельних архітектур із ідентичних елементів з мінімальним залученням додаткових інтегральних мікросхем.

Назву цього елемента отримано від сполучення слів «транзистор» і «комп'ютер».

Кожний такий елемент поєднує в одній мікросхемі:

  • обробний елемент

  • систему зв'язку

  • пам'ять

Паралельна система може створюватися з набору трансп’ютерів, які функціонують паралельно й взаємодіють через послідовні лини зв'язку. Такі системи можна проектувати й програмувати мовою Оккам, заснованій на концепції взаємодіючих процесів.

Трансп’ютер - це дитя технології СВІС. Одним з важливих властивостей цієї технології є те, що час обміну між модулями більше, ніж час обміну між компонентами одного модуля.

Для забезпечення максимальної швидкості й мінімального монтажу трансп’ютер використовує двохточечні послідовні лінії для прямого зв'язку з іншими трансп’ютерами.

Трансп’ютер містить типовий процесор. У невеликій пам'яті зберігаються 32 інструкції й забезпечують виконання простих послідовних програм. Крім цього, є спеціальні інструкції, які реалізують арифметичні операції з великою точністю, і планувальщик.

Так як трансп’ютер може забезпечувати виконання різних паралельних процесів, він підтримує на апаратному рівні модель програмування мови Оккам. Планувальщик трансп’ютера розподіляє час процесора між паралельними процесами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]