втоматично розміщуються операційною системою в буфер. У цьому рішенні використовуються N повідомлень, за аналогією з сегментами в буфері. Споживач починає з того, що посилає виробникові N порожніх повідомлень. Як тільки у виробника виявляється елемент даних, який він може надати споживачеві, він беріг пусте зміщення і відсилає назад повне. Таким чином, загальне число повідомлень у системі постійно їх можна зберігати в заздалегідь заданій ділянці пам'яті.
Якщо виробник працює швидше, ніж споживач, всі повідомлення будуть очікувати споживача в заповненому вигляді. При цьому виробник блокується в очікуванні порожнього повідомлення. Якщо споживач працює швидше, ситуація інвертується: всі повідомлення будуть порожніми, а споживач буде блокований в очікуванні повного повідомлення.
Передача тексту може бути реалізована по-різному. Розглянемо спосіб адресації повідомлень. Можна присвоїти кожному з процесів унікальну адресу і адресувати повідомлення безпосередньо процесам. Інший підхід полягає у використанні нової структури даних, званої поштовою скринькою. Поштова скринька - це буфер для певної кількості повідомлень, тип яких задається при створенні ящика. При використанні поштових скриньок в якості параметрів адреси send і receive задаються поштові скриньки, а не процеси. Якщо процес намагається послати повідомлення в повний поштову скриньку, йому доводиться почекати, поки хоча б одне повідомлення нс буде видалено з ящика.
У задачі виробника і споживача обидва вони створять поштові скриньки, досить великі, щоб зберігати N повідомлень. Виробник буде посилати повідомлення з даними в поштову скриньку споживача, а споживач буде посилати порожні повідомлення в поштову скриньку виробника. З використанням поштових скриньок метод буферизації очевидний: в поштовій скриньці одержувача зберігаються повідомлення. які були послані процессу-одержувачу, але ще не отримані.
Нижче наведена програма.
Працюють 3 процесу: Р1, Р2, Р3. І поштові скриньки, передающія повідомлення процесам g, i, k.
Працює процес Р1, потім передає повідомлення поштової скриньки g, поштова скринька g передає повідомлення процесу Р2, Р2-I, i-P3, P3- k, k-P1.
Рис.2.1 Передача повідомлень
Рис.2.2 Передача повідомлень
Рис.2.3 Передача повідомлень
Завдання №3-А
А) Розробити програму виявлення взаємних блокувань процесів в обчислювальній системі при наявності одного ресурсу кожного типу. Розподіл ресурсів в обчислювальній системі задається графом розподілу ресурсів.
Виявлення блокувань в обчислювальній системі при наявності одного примірника ресурсів кожного типу виробляється на основі аналізу побудованого графа ресурсів і процесів. Наявність циклів у графі вказує на взаємне блокування в обчислювальній системі.
У графі процеси позначаються як коло з ім'ям процесу, а ресурси позначаються як квадрат з ім'ям ресурсу. Вихідне ребро від процесу до ресурсу означає, що процес вимагає даний ресурс. Вхідне ребро від ресурсу до процесу означає, що процес зайняв даний ресурс.
Один з можливих алгоритмів пошуку циклів у графі наступний. Для кожного з N вузлів в графі виконується п'ять кроків:
. Задаються початкові умови: L-порожній список, всі ребра немаркованих.
. Поточний вузол додаємо в кінець списку L і перевіряємо кількість появи вузла в списку. Якщо він зустрічається два рази, значить цикл і взаімоблокіровка.
. Для заданого вузла дивимося, чи виходить з нього хоча б одне немаркованих ребро. Якщо так, то переходимо до кроку 4, якщо ні, то переходимо до кроку 5.
. Вибираємо нове немаркованих виходить ребро і маркіруємо його. І переходимо по ньому до новому вузлу і повертаємося до кроку 3.
. Зайшли в глухий кут. Видаляємо останній вузол зі списку і повертаємося до попереднього вузла. Повертаємося до кроку 3. Якщо це початковий вузол, значить, циклів немає, і алгоритм завершується.
Для реалізації роботи алгоритму була розроблена програма (рисунок 3.2 і 3.4).
У дану програму для швидкого виклику внесені приклади з методичного вказівки, а також реалізована перевірка на коректність введених даних.
Рис. 3.1. Граф процесів і ресурсів наприклад рис. 3.2.
Рис. 3.2. Блокування не виявлені.
Рис. 3.3. Граф процесів і ресурсів наприклад рис. 3.4.
Рис. 3.4.Есть блокування.
Завдання №3-В