Монітороподібні засоби синхронізації паралельних процесів.
Як показав аналіз вирішенню деяких паралельних задач механізм семафорів з такими перевагами як простота, незалежність від кількості процесів, відсутність станів активного очікування має ряд недоліків. Це пов’язане з тим, що семафори не вказують явно ні на умову синхронізації, ні на відповідний критичний ресурс, тому при побудові складних систем синхронізації алгоритми вирішення паралельних задач стають занадто складними. Тому використовують так звані монітори – пасивні набори змінних, які можуть розділяти самі процеси і спеціальні процедури для доступу до змінних, які мають властивості рекурсивного (повторного) виклику.
Паралельні процеси використовують монітор в режимі розділення часу. В кожен момент часу монітором може користуватись лише один процес. Наприклад, якщо будь – який ресурс розподіляється програмним планувальником, то при кожному розподіленні цього ресурсу процес повинен звернутися до цього планувальника, який повинен мати змінні для відслідковування зайнятий цей ресурс чи ні. До цього планувальника процеси можуть звернутися в будь – який момент часу, але планувальник не забезпечує обслуговування декількох процесів одночасно. Така програма планувальник є найпростішим прикладом монітору.
В моніторі автоматично здійснюється вирішення задачі взаємного виключення поцесів. Якщо процес звертається до деякого ресурсу монітора і цей ресурс є зайнятий, то монітор видає команду очікування (wait()) з кодом помилки, який визначає причину очікування. Процес, який запитує цей ресурс звільняє монітор і очікує звільнення відповідного ресурсу у зовнішній по відношенню до монітора черзі. На протязі певного часу, якщо процес, який займав цей ресурс звільняє і віддає його системі, то відповідна процедура монітора приймає повідомлення про звільнення ресурсу. Потім монітор може чекати поки не з’являться запити від інших процесів яким необхідний цей ресурс. А може існувати ситуація, коли є декілька процесів, які очікують звільнення ресурсів. В цьому випадку монітор видає команду signal(), яка сповіщає, що один з очікуваних процесів може зайти і використати даний необхідний ресурс.
Використання моніторів як основного засобу синхронізації дозволяє звільнити процеси від необхідності явного розподілення інформації між собою. Доступ до розділювальних змінних та областей пам’яті контролюється власне тілом самого монітора. Так як монітори входять в склад ОС, то його змінні є завжди системними змінним. Це автоматично виключає критичні інтервали (секції) процесів тому, що в певний момент часу монітором може користуватися тільки один процес. Одночасно два процеси не можуть отримати доступ до змінних монітору.
Основні переваги моніторів:
· гнучкий механізм, який дозволяє реалізувати не тільки семафор, а й інші операції синхронізації;
· наявність всіх розділювальних змінних в тілі монітора, що дозволяє їх виключити з вихідних модулів паралельних процесів;
· монітори дають змогу паралельним процесам сумісно використовувати програмні модулі, які є критичними секціями, на відміну від семафорів, які вимагають наявність критичних секцій в кожному з паралельних процесів.
Поштові ящики.
Взаємодія між паралельними процесами обумовлює не тільки синхронізацію (обмін тимчасовими сигналами), але й передачу і отримання довільних повідомлень. Крім того в паралельних процесах неможливо гарантувати відправку повідомлень одним процесом і отримання іншим процесом практично в один і той самий момент часу. Тому є необхідність тимчасового зберігання повідомлення в спеціальному буфері обміну, який називається поштовий ящик. Наприклад, для того, щоб послати процес Р2, процес Р1 повинен запитати його у відповідний поштовий ящик, звідки Р2 може зчитати це повідомлення в будь – який момент часу. Як правило, поштові ящики є системними об’єктами і для їх використання процес повинен запросити операційну систему відповідним запитом. Як правило, поштові ящики складаються з головного елементу, в якому міститься інформація про параметри цього поштового ящика і декількох наступних елементів (комірок) в яких розміщується повідомлення. Розмір комірки визначається при створенні поштового ящика.
Найпростіший алгоритм роботи поштового ящика полягає в тому, що процес Р1 посилає повідомлення в поштовий ящик до тих пір, поки є вільні комірки, а процес Р2 – зчитує ці повідомлення поки є заповнені комірки. В більш складних випадках використовуються двонаправлені поштові ящики які дозволяють підтверджувати прийом (зчитування) повідомлень. В цьому випадку в кожній комірці міститься або повідомлення від процесу Р1, або підтвердження про зчитування (прийняття) повідомлення від процесу Р2.
Технічна реалізація поштових ящиків в ОС Windows – самостійно!
Основними перевагами поштових ящиків є:
1) процесу нема необхідності знати про існування інших паралельних процесів до того моменту, поки він не отримає повідомлення від них;
2) два процеси можуть обмінюватись одним повідомленням більше ніж один раз;
3) ОС може гарантувати, що ніякий інший процес не буде вмішуватись у взаємодію двох процесів;
4) наявність декількох комірок дозволяє процесу відправнику продовжувати роботу не звертаючи уваги на процес отримувач.
Недоліком поштових ящиків є поява ще одного ресурсу (власне поштового ящика) яким необхідно керувати, крім цього другим недоліком є статичний характер поштового ящика в якому чітко визначено розмір і кількість комірок.
Конвеєри.
Термін конвеєр вперше був введений в склад операційної системи Unix для систем міні – машин. Конвеєр (pipe) – це ресурс операційної системи, за допомогою якого можна здійснювати обмін повідомленнями між процесами. Розмір конвеєра для ОС міні - машин складав 64 Кб. Механізм роботи конвеєра аналогічний механізму роботи з файлами ОС Unix. Процес який передає інформацію функціонує так само як і при записі інформації у файл, а процес якому призначене це повідомлення просто зчитує ці дані з файлу “pipe” аналогічно зв’язку. Функції ОС, за допомогою яких можна записати інформацію в канал і зчитати з каналу є тими самими, що і при роботі з файлами. Однак канал представляє собою не файл на диску, а буфер в оперативній пам’яті.
Маючи фіксований розмір конвеєра доступ до нього можна забезпечити циклічно. Для цього в системі конвеєра існують два вказівники, один з яких вказує на перший елемент конвеєра, інший – на останній. В початковий момент часу ці вказівники дорівнюють нулю. Добавлення першого елементу в пустий конвеєр приводить до того, що ці два вказівники приймають значення одиниці. При записі в конвеєр нового елементу викликає змінну другого вказівника (що вказує на кінець черги), читання або знищення елемента з конвеєра викликає модифікацію першого елемента черги.
Як ресурс в рамках ОС кожен описується ідентифікатором, розміром та двома вказівниками. Так як конвеєр є системним ресурсом, то процес повинен здійснити запит до ОС на право користування конвеєром. Процеси які знають ідентифікатор конвеєра можуть вільно обмінюватись даними через нього.
Недоліком конвеєра є фіксований розмір, що обмежує розмір повідомлень якими можна обмінюватись.
Черги повідомлень.
Черги повідомлень є більш складними механізмами зв’язку між взаємодіючими процесами. За допомогою черг можна з одного чи декількох процесів посилати повідомлення деякому процесу приймачу незалежним чином. При цьому процес приймач має право читати і знищувати повідомлення з черги, процеси клієнти мають право тільки записувати свої повідомлення у чергу. Якщо між процесами необхідно забезпечити двосторонній зв’язок, то створюються дві черги повідомлень.
Механізм черг має наступні властивості:
· можна використовувати декілька дисциплін обробки повідомлень в черзі (наприклад, FIFO, LIFO);
· якщо при читанні з конвеєра повідомлення повинно бути знищене з відповідної комірки, у випадку черг повідомлення не знищується і може бути прочитане декілька разів;
· можна аналізувати не тільки чергу самих повідомлень, а й чергу адрес повідомлень, що дозволить розміщувати самі повідомлення в спільній пам’яті доступній для всіх процесів.
Дата добавления: 2016-07-27; просмотров: 1793;