
- •Визначення високопродуктивної обчислювальної системи.
- •Високопродуктивні обчислювальні системи з загальною (розділеною) пам’яттю.
- •Високопродуктивні обчислювальні системи з локальною (розподіленою) пам’яттю.
- •Програмне забезпечення впос.
- •Поняття процесу. Стани процесу.
- •Види взаємодії процесів.
- •Комунікація процесів.
- •Синхронізація процесів.
- •Задача взаємного виключення.
- •Загальна схема рішення задачі взаємного виключення. Поняття критичної ділянки.
- •Примітиви вхід кд (критичної ділянки), вихід кд(критичної ділянки).
- •Механізм семафорів.
- •Використання багатозначних семафорів.
- •Використання семафорів в задачі взаємного виключення.
- •Використання семафорів в задачі синхронізації процесів.
- •Критичні секції в бібліотеці Win32.
- •Концепція моніторів.
- •Властивості процедур монітора.
- •Монітори в мові Java.
- •Реалізація моделі взаємодії що ґрунтується на посилці повідомлень.
- •Механізм рандеву.
- •Опишіть модель взаємодії, що гранується на розділених змінних.
- •Опишіть модель взаємодії, що ґрунтується на посилці повідомлень.
- •Опишіть процедуру синхронізації процесів.
- •Семафори в бібліотеці Win32.
- •Етапи розробки програми для високопродуктивні обчислювальні системи.
Розподілені високопродуктивні обчислювальні системи.
ВПОС з розподіленою структурою(на рис.). Як вузли в ній використовується комп’ютери, як система взаємодії вузлів – мережа (ОП – рисунок одинаковый, впадло рисовать другой, исправить на пару квадратиков с компьютерами и сеть как связь между ними).
Програмне забезпечення впос.
Створення процесу виконується за допомогою спеціального програмного забезпечення, а саме:
Язиків паралельного програмування:
Java;
Ada;
C#;
Phyton.
Бібліотек паралельного програмування:
Win32;
MPI;
OpenMP;
PVM.
Поняття процесу. Стани процесу.
Процес – програма, яка виконується.
Процес – частина програми які можуть виконуватися паралельно з іншими частинами програми (процесами).
Стани процесу. Знаходиться стани процесів у блоці управління процесами (БУП). Все починається з того, що процес створюється «Порождение». Наступний етап, процес переходить у стан готовності «Готовность». На цьому етапі процеси можуть стати в чергу. Керує усіма процесами центральний процесор системи. Він вибирає процес і переводить його у стан виконання «Выполнение». Якщо все пройшло вдало, процес переходить у стан завершення «Завершение». Якщо ж наприклад процес під час виконання повинен чекати вводу даних від іншого процесу, то він повинен зупинитися, для цього є процес блокування «Блокирование». У стані блокування у процесу є три виходи, він переходить у стан готовності, переходить у стан виконання, або переходить у стан завершення.
Види взаємодії процесів.
Узгодження поведінки (синхронізація);
Обмін\передача даних (модель взаємодії на загальних змінних та на передачі повідомлень).
Синхронізація – у алгоритмах кожного процесу синхронізація реалізована в точках синхронізації (пр.. Сигнал події, чекати події). Точки синхронізації пов’язані з очікуванням або на подію. Приклад: Wij, Sij, де
W – чекати подію;
S – сигнал про подію;
I – номер процесу у якому відбувається подія;
J – порядковій номер процесу у задачі.
Передача даних у моделі взаємодії на загальних змінних:
В загальній памятті виділяється буфер – загальна змінна;
Задача А записує у буфер Х (Buf=x)
Задача Б виконує читання з буферу (y:=Buf)
Комунікація процесів.
Процеси можуть виконувати наступні операції:
Створити процес або групу процесів;
Задати пріоритет процесу;
Запустити процес на виконання;
Призупинити та продовжити процес;
Завершити процес.
Синхронізація процесів.
Синхронізація – у алгоритмах кожного процесу синхронізація реалізована в точках синхронізації (пр.. Сигнал події, чекати події). Точки синхронізації пов’язані з очікуванням або на подію. Приклад: Wij, Sij, де
W – чекати подію;
S – сигнал про подію;
I – номер процесу у якому відбувається подія;
J – порядковій номер процесу у задачі.
Задача взаємного виключення.
Маємо два або більше процесів та спільний ресурс. Необхідно організувати роботу процесів А та Б так, щоб вони не звогли одночасно використовувати спільний ресурс. Схема рішення проста, якщо процессу необхідний спільний ресурс, то він спочатку повинен перевірити його стан. Якщо СР вільний, то процес захоплює його, а якщо зайнятий, т опроцес блокується доки він не звільниться. Коли СР звільниться, процесс разблокується та продовжить свою роботу.
Загальна схема рішення задачі взаємного виключення. Поняття критичної ділянки.
Існує дві схеми рішення задач взаємного виключення:
Контроль процесів;
Контроль загальних ресурсів.
Найкращий механізм захисту та контролю – «Забор». «Забор» - це так звана критична ділянка(КД) – частина процесу, у якій він працює з загальним ресурсом.
Примітиви вхід кд (критичної ділянки), вихід кд(критичної ділянки).
Робота «ВХІД КД» заклечається в наступному: перевірити чи знаходиться у КД інший процес. Якщо ТАК, то блокувати нинішній процес, якщо НІ, то встановити заборону на вхід для інших процесів (флаг) та зайняти СР.
Робота «ВИХІД КД» заклечається в наступному: зняти заборону. Для черги процесів флаг, що показує що СР зайнятий не знімати, просто вибрати процес з високим пріоритетом та дозволити ВХІД.
Механізм семафорів.
Семафор - це особливий тип роздільної змінної, яка обробляється тільки двома неподільними операціями Р(S) і V(S). Значення семафора є невід'ємним цілим числом. Операція V(ВИХІД КД) використовується для сигналізації про те, що подія відбулася, тому вона збільшує значення семафора. Операція Р(ВХІД КД) призупиняє процес до моменту, коли відбудеться деяка подія, тому вона, дочекавшись, коли значення семафора стане позитивним, зменшує його.
Використання багатозначних семафорів.
Найчастіше багатозначні семафори представлені в якості лічильнику ресурсів. Якщо у нас є N одиниць деякого ресурсу, то для контролю його розподілу створюється загальний семафор S з початковим значенням N. Виділення ресурсу супроводжується операцією P (S), звільнення - операцією V (S). Значення семафора, таким чином, відображає число вільних одиниць ресурсу. Якщо значення семафора 0, тобто, вільних одиниць більше не залишається, то черговий процес, запитувач одиницю ресурсу буде перенесений в очікування в операції P (S) до тих пір, поки який-небудь з використовуючих ресурс процесів не звільнить одиницю ресурсу, виконавши при цьому V (S).
Використання семафорів в задачі взаємного виключення.
Для реалізації взаємного виключення, наприклад, запобігання можливості одночасної зміни двома або більше процесами СР, створюється двійковий (з можливими значеннями 0 і 1) семафор S. Початкове значення цього семафора – 1(S=1). Критична ділянка обрамляються "дужками" P (S) і V (S). Процес, що входить в критичну секцію, виконує операцію P (S) і переводить семафор в 0. Якщо в КД вже знаходиться інший процес, то значення семафора вже 0, тоді другий процес, бажаючий увійти в КД, блокується у своїй P-операції до тих пір, поки процес, що перебуває в КД зараз, не вийде з неї, виконавши на виході операцію V (S).
Використання семафорів в задачі синхронізації процесів.
Для забезпечення синхронізації створюється двійковий семафор S з початковим значенням 0. Значення 0 означає, що подія, ще не настала. Процес, що сигналізує про настання події, виконує операцію V (S), що встановлює семафор в 1. Процес, що очікує настання події, виконує операцію P (S). Якщо до цього моменту подія вже відбулася, очікуючи процес продовжує виконуватися, якщо ж подія ще не відбулося, процес переводиться в стан очікування до тих пір, поки сигналізуючий процес не виконає V (S). У разі, якщо одного і того ж події чекають кілька процесів, процес, успішно виконав операцію P (S), повинен слідом за нею виконати V (S), щоб продублювати сигнал про подію для наступного очікуючого процесу.
Критичні секції в бібліотеці Win32.
Критична секція (Critical Section) дозволяє домогтися взаємного виключення. Win32 API підтримує декілька операцій з ними:
InitializeCriticalSection;
DeleteCriticalSection;
EnterCriticalSection;
LeaveCriticalSection.
Коли об'єкт критичної секції створений, його можна використовувати для контролю за загальними ресурсами. Дві головних операції - EnterCriticalSection і LeaveCriticalSection. У більшій частині літератури, що стосується теми синхронізації, ці операції називають Wait і Signal, або Lock і Unlock відповідно. Ці альтернативні терміни використовуються також і для інших примітивів синхронізації, де вони мають приблизно еквівалентні значення. За замовчуванням при створенні критичної секції жоден з потоків додатки не володіє їй (ownership). Щоб керувати критичної секцією, потік викликає EnterCriticalSection, і якщо критична секція ще не має власника, то потік стає їм. Потім потік зазвичай вчиняє дії з загальними ресурсами, а коли закінчує ці дії, то відмовляється від володіння критичної секцією викликом LeaveCriticalSection.
Концепція моніторів.
Монітор - механізм взаємодії та синхронізації процесів, який забезпечує доступ до неподільних ресурсів. Складається з одної або декількох процедур та спільних ресурсів. Монітор - це механізм управління зв'язком між процесами. Ми можемо представляти монітор, як дуже маленький блок, який містить тільки один потік. Як тільки потік входить в монітор, всі інші потоки повинні чекати, поки даний не вийде з монітора. Таким чином, монітор можна використовувати для захисту СР від управління декількома потоками одночасно. Синхронізація у моніторі реалізується за допомогою захищених входів, які в свою чергу мають вигляд бар’єру, тобто об’єкт використовує бар’єр в якості прапора синхронізації. Пусля того як усі процедури виконані, бар’єр відкривається. Приклад: маємо монітор, у якому процес Б чекає сигналу від процесу А. Тобто встановлюється бар’єр (F=1), який не не відкриється доки змінна F, яка знаходить у моніторі не зміниться і не буде дорівнювати 1. Процедура ввійде у монітор і змінить СР F=1, далі процесс Б розблокується і продовжить роботу.
Властивості процедур монітора.
Монітор має наступні властивості:
До спільного ресурсу мають доступ тільки моніторні процедури. Інші процедури доступу до СР не мають;
Процес входить у монітор шляхом виклику однієї з його процедур ( запис СР, сигнал вводу\обчислення);
У моніторі в будь-який момент часу можна виконати тільки одну моніторну функцію.
Монітори в мові Java.
Монітор - механізм взаємодії та синхронізації процесів, який забезпечує доступ до неподільних ресурсів. Складається з одної або декількох процедур та спільних ресурсів. Модифікатор для синхронізації – synchronized. Приклад:
Class ZZ {
Privatе int SR;
Synchronized void Signal( ) {…};
Synchronized void Wait( ) {…};
}
ZZ mon = new ZZ( );
mon.signal( )
mon.wait( )
У прикладі показано створення класу ZZ, створення спільного ресурсу SR та моніторні процедури Signal ( ) та Wait( ).
Якщо процесс А чекає від процессу Б сигналу про подію, то він блокується за допомогою Wait( ). Процесс Б виконавши подію, сигналізує процессу А та разблоковую його за допомогою Notify( ).
Wait( ) – блокувати потік
Notify( ) – разблокувати потік, який викликав Wait( )
notifyAll( ) – розблокувати усі потоки
Реалізація моделі взаємодії що ґрунтується на посилці повідомлень.
Використовується для систем з локальною пам’яттю, але також може бути використано у системах з загальною пам’яттю.
Переваги:
Можливо нарощувати число комп’ютерів;
Можливо робити вибір структури системи(її топології);
Швидко працює;
Просте програмування за допомогою Send( ) – передати, Receive( ) – отримати.
Види передачі:
Передача з синхронізацією;
Передача без синхронізації;
Широкосповіщуюча розсилка( SendAll( ), ReceiveAll( )).
Механізм рандеву.
Рандеву – реалізація моделі посилки повідомлень у язику Ада.
Нехай маємо два процеси A і B:
Створюємо вхід(ENTRY) в одній із задач (ENTRY – конструкція для прийому\передачі даних);
Task B is
Entry Data (MM:in matrix);
End B;
Виклик входу у процесі A
B.Data(MX);
Описати роботу у задачі B (accept);
Task B
Entry Data;
End B;
----------------
Task body B is
. . . .
Accept Data (MM:in Matrix) do
Buf:=MM;
End Data;
End B;
Момент синхронізації рандеву – це момент коли задача А викликає вхід Data, а задача B приймає дані за допомогою команди Accept Data.
ПРАКТИКА (5.ВПОС, Корочкін)
Опишіть модель взаємодії, що гранується на розділених змінних.
Модель, що реалізує взаємодії на загальних змінних – це монітори( захищені модулі в Ада) та семафори.
Приклад семафорів:
MA=MB*MC+MX*MZ
Етап 1. Розроблення паралельного математичного алгоритму.
MAh=MB*MCh+MX*MZh,
де
Ah – частина А, в якій h-кількість елементів
Список загальних ресурсів: МВ, МХ.
Етап 2. Розроблення алгоритмів задач.
Т1 |
ТС |
Т2 |
ТС |
|
S2.1
W2.1 КД
W2.2 |
|
S1.1
W1.1 КД
S1.2 |
Етап 3. Розроблення схеми взаємодії задач.
Етап 4. Розроблення програми(Лістинг програми)
Опишіть модель взаємодії, що ґрунтується на посилці повідомлень.
Приклад Рандеву.
A=B*(MO*MX)+L*Z
Етап 1. Розроблення паралельного математичного алгоритму.
Ah=B*(MO*MXh)+L*Zh, де Ah – частина А, в якій h-кількість елементів
Етап 2. Розроблення алгоритмів задач.
Т1 |
Т2 |
Т3 |
|
|
|
Т4 |
Т5 |
Т6 |
|
|
|
Етап 3. Розроблення схеми взаємодії задач.
Опишіть процедуру синхронізації процесів.
Синхронізація – у алгоритмах кожного процесу синхронізація реалізована в точках синхронізації (пр. Сигнал події, чекати події). Точки синхронізації пов’язані з очікуванням або на подію. Приклад: Wij, Sij, де
W – чекати подію;
S – сигнал про подію;
I – номер процесу у якому відбувається подія;
J – порядковій номер процесу у задачі.
Нехай маємо два процеси, які виконують механізм синхронізації семафорів. Початковий алгоритм має наступний вигляд: MAh=MB*MCh+MX*MZh
Т1 |
ТС |
Т2 |
ТС |
|
S2.1
W2.1 КД
W2.2 |
|
S1.1
W1.1 КД
S1.2 |
Семафори в бібліотеці Win32.
Семафор - це особливий тип роздільної змінної, яка обробляється тільки двома неподільними операціями Р(S) і V(S). Значення семафора є невід'ємним цілим числом. Операція V(ВИХІД КД) використовується для сигналізації про те, що подія відбулася, тому вона збільшує значення семафора. Операція Р(ВХІД КД) призупиняє процес до моменту, коли відбудеться деяка подія, тому вона, дочекавшись, коли значення семафора стане позитивним, зменшує його.
Класс Semaphore Так виглядає реалізація класу Semaphore в Win32
class Semaphore {
private:
HANDLE semaphore;
public:
Semaphore(void) {
CreateSemaphore((void *)0, 0, 0x7ffffff, (void*)0); // Створення семафору
}
Semaphore(int available) {
CreateSemaphore((void *)0, available, 0x7ffffff, (void*)0);
}
~Semaphore(void) {
CloseHandle(semaphore);
}
void Wait(void) {
WaitForSingleObject(semaphore, INFINITE); // Операція Р(S)
}
void Post(void) {
ReleaseSemaphore(semaphore, 1, (void*)0); // Операція V (S)
}
void Post(int how_many) {
ReleaseSemaphore(semaphore, how_many, (void*)0);
}
};
Етапи розробки програми для високопродуктивні обчислювальні системи.
Розробка програми складається з 4 етапів:
Побудова паралельного математичного алгоритму;
Розробка алгоритмів роботи кожного процесу;
Розроблення структурної схеми взаємодії задач;
Розроблення програми.
Приклад:
Завдання.
A=B+C*(MO*MX)
Етап 1. Розроблення паралельного математичного алгоритму.
Ah=Bh+C*(MO*MXh),
де
Ah – частина А, в якій h-кількість елементів
Список загальних ресурсів: C, МO.
Етап 2. Розроблення алгоритмів задач.
Т1 |
ТС |
Т2 |
ТС |
|
W2.1 W4.2
КД
S2.1 |
|
S1.1 S3.2 S4.3 W4.1
КД
W1.2 W3.3 W4.4
|
Т3 |
ТС |
Т4 |
ТС |
|
W2.1 W4.2
КД
S2.1 |
|
S1.1 S2.2 S3.3 W2.1
КД
S2.4 |
Етап 3. Розроблення схеми взаємодії задач.
Етап 4. Розроблення програми
Лістинг програми…