виконання — усі ці події є результатом збігу багатьох обставин і можуть бути інтерпретовані як випадкові. У кращому випадку можна оцінити можливі характеристики обчислювального процесу, наприклад імовірність його завершення за даний період часу.
Будь-яка взаємодія процесів чи потоків зв'язано з їхньою синхронізацією, що полягає в узгодженні їхніх швидкостей шляхом припинення потоку до настання деякої події і наступної його активізації при настанні цієї події. Синхронізація лежить в основі будь-якої взаємодії потоків, чи зв'язана ця взаємодія з поділом ресурсів чи з обміном даними. Наприклад, потік-одержувач повинен звертатися за даними тільки після того, як вони поміщені в буфер потоком-відправником. Якщо ж потік-одержувач звернувся до даних до моменту їхнього надходження в буфер, то він повинний бути припинений.
При спільному використанні апаратних ресурсів синхронізація також зовсім необхідна. Коли, наприклад, активному потоку потрібний доступ до послідовного порту, а з цим портом у монопольному режимі працює інший потік, що знаходиться в даний момент у стані чекання, то ОС припиняє активний потік і не активізує його доти, поки потрібний йому порт не звільниться. Часто потрібна також синхронізація з подіями, зовнішніми стосовно обчислювальної системи, наприклад реакції на натискання комбінації клавіш Ctrl+C.
Для синхронізації потоків ПП програміст може використовувати як власні засоби і прийоми синхронізації, так і засоби ОС. Наприклад, два потоки одного прикладного процесу можуть координувати свою роботу за допомогою доступної для них обох глобальної логічної змінної, котра встановлюється в одиницю при здійсненні— деякої події.
4. 2. Проблема тупіків.
При організації рівнобіжного виконання декількох процесів однією з функцій ОС є рішення складної задачі коректного-розподілу ресурсів між процесами які виконуються.-При рівнобіжному виконанні процесів можуть виникати ситуації, при яких два чи більше процесів весь час знаходитимуться в заблокованому стані. Кажуть, що в мультипрограмній системі процес знаходиться в стані тупіка, якщо він чекає подію, яка ніколи не виконається. Частіше тупіки виникають, із-за конкуренції незв’язаних, паралельних процесів за ресурси системи, але іноді до тупіків приводять помилки програмування.
При розгляді проблеми тупіків доцільно поняття ресурсів систем розділити на два класи — повторно використовувані (чи системні) ресурси (типу RR чи SR) і споживані (ті що витрачаються) ресурси (типу CR).
Повторно використовуваний ресурс (SR) є кінцева безліч ідентичних одиниць з наступними властивостями :
число одиниць ресурсу постійно;
кожна одиниця ресурсу, доступна чи розподілена одному і тільки одному процесу.
процес може звільнити одиницю ресурсу (зробити її доступною), тільки якщо він раніше одержав цю одиницю, тобто ніякий процес не може впливати ні на один ресурс, якщо він йому не належить.
Дане визначення виділяє істотні для вивчення проблеми тупіків властивості звичайних системних ресурсів, до яких ми відносимо такі типи апаратури, як основна пам'ять, допоміжна (зовнішня) пам'ять, периферія і, можливо, процесори, а також програмне і інформаційне забезпечення, таке як файли даних, таблиці і „дозвіл ввійти у критичну секцію”.
Ресурс, що витрачається (CR) відрізняється від ресурсу типу SR у декількох відносинах :
число доступних одиниць деякого ресурсу типу CR змінюється по мірі того, як здобуваються й звільняються (виробляються) окремі їхні елементи процесам що виконуються.
- процес „користувач” зменшує число одиниць ресурсу, спочатку запрошуючи, а потім здобуваючи (споживаючи) одну чи більше одиниць. Одиниці ресурсу, що придбані, у загальному випадку не повертаються ресурсу, а споживаються (витрачаються).
Методи боротьби з тупіками.
Проблема тупіків є надзвичайно серйозною та складною. У деяких випадках ціна, яку приходиться платити за те, щоб зробити систему вільною від тупіків, занадто висока. В інших випадках, наприклад у системах керування процесами реального часу, просто немає іншого вибору, оскільки виникнення тупіка може привести до катастрофічних наслідків.
Проблема боротьби з тупиками стає усе більш актуальною і складною по мірі розвитку і впровадження рівнобіжних обчислювальних систем.
Запобігання тупіків
Запобігання тупіків базується на ідеї про надзвичайно високу його вартість, тому краще витратити додаткові ресурси системи, щоб виключити імовірність виникнення тупіка при будь-яких обставинах. Цей підхід використовується в найбільш відповідальних системах, часто це системи реального часу.
Запобігання можна розглядати як заборону існуванню небезпечних станів.
Умову взаємного виключення можна придушити шляхом дозволу необмеженого поділу ресурсів. Умову чекання можна придушити, попередньо виділивши ресурси. При цьому процес може почати виконання, тільки одержавши всі необхідні ресурси. Необхідно також відзначити, що попереднє виділення переважно неможливе, тому що всі необхідні ресурси стають відомими процесу тільки після початку виконання.
Умову кругового очікування можна виключити, передбачаючи утворення ланцюгу запитів. Це можна забезпечити за допомогою принципу ієрархічного виділення ресурсів.
В цілому стратегія запобігання тупіків — це дуже дороге вирішення проблеми, і вона використовується нечасто.
Обхід тупіків.
Обхід тупіків можна представити як заборону входу в небезпечний стан. Якщо жодна з 4-ох умов не виключено, то вхід в небезпечний стан можна передбачити при наявності в систёмі інформації про послідовність запитів, зв'язаних з кожним рівнобіжним процесом. Доведено, що якщо обчислення знаходяться в будь-якому небезпечному стані, то існує принаймні одна послідовність станів, що обходить небезпечне. Отже, досить перевірити, чи не приведе виділення необхідного ресурсу відразу ж до небезпечного стану. Якщо так, то запит відходить. Якщо ні, то можна його виконати. Визначення того, чи є стан небезпечним чи ні, вимагає аналізу послідовних запитів процесів.
4.3. Критична секція
Важливим поняттям синхронізації потоків є поняття «критичної секції» програми.
Критична секція — це частина програми, результат виконання якої може непередбачено мінятися, якщо змінні, стосовно до цієї частини програми, змінюються іншими потоками в той час, коли виконання цієї частини ще