Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2.docx
Скачиваний:
11
Добавлен:
12.02.2016
Размер:
1.41 Mб
Скачать

Спливаючі потоки

Потоки часто використовуються в розподілених системах. Одним з прикладів може послужити обробка вхідних повідомлень, наприклад запитів на обслуговування. Традиційний підхід полягає у використанні процесу або потоку, який блокуєтсья системним викликом receive в очікуванні вхідного повідомлення. Після прибуття повідомлення він його приймає, розпаковує, перевіряє його вміст і проводить подальшу обробку. Але можливий також і зовсім інший підхід, при якому надходження повідомлення змушує систему створити новий потік для його обробки. Такий потік, показаний називається спливаючим. Основна перевага спливаючих потоків полягає в тому, що вони створюються заново і не мають ніяких регістрів, стека і всього іншого, що повинно бути відновлено. Кожен такий потік починається з самого початку, і кожен з них є ідентичний до всіх іншим. Це дозволяє створювати такі потоки досить швидко. Новий потік отримує повідомлення для подальшої обробки. В результаті використання спливаючих потоків затримку між надходженням і початком обробки повідомлення можна звести до мінімуму.

Взаємодія процесів

Взаємодія між процесами - InterProcess Communication, або IPC – це передача інформації між процесами через добре продуману структуру без використання переривань.

3 основні питання, що стосуються міжпроцесної взаємодії:

  1. Як один процес може передавати інформацію іншому.

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

  3. Визначення правильної послідовності на основі існуючих взаємозалежностей: якщо процес А виробляє дані, а процес Б їх роздруковує, то процес Б, перед тим як друкувати, повинен почекати, поки процес А не виробить певні дані.

Два останні питання стосуються як процесів так і потоків, їм властиві схожі проблеми та методи їх вирішення.

Змагання між процесами

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

Коли процесу необхідно роздрукувати який-небудь файл, він поміщає ім'я цього файлу в спеціальний каталог спулера. Інший процес під назвою демон принтера періодично веде перевірку наявності файлів для друку, і в тому разі, якщо такі файли є, роздруковує їх і видаляє їх імена з каталогу. Також є дві загальні змінні: out, яка вказує на наступний файл, призначений для друку, і in, яка вказує на наступну вільну область в каталозі. Уявимо, що майже одночасно процеси А і Б вирішують, що їм потрібно поставити файл у чергу на друк. Ця ситуація показана на рис. 2.15.

Процес А зчитує значення змінної in і зберігає значення 7 в локальній змінній по імені next_free_slot (наступна вільна область). Відразу ж після цього відбувається переривання за таймером, центральний процесор вирішує, що процес А пропрацював досить довго, і переключається на виконання процесу Б. Процес Б також зчитує значення змінної in і також отримує число 7. Він також зберігає його у своїй локальної змінної next_ free_slot. До поточного моменту обидва процеси вважають, що наступною доступною областю буде 7. Процес Б продовжує виконуватися. Він зберігає ім'я свого файлу в області 7 і присвоює змінній in оновлене значення 8. Потім він переходить до виконанню яких-небудь інших дій. Через деякий час виконання процесу A поновлюється з того місця, де він був зупинений. Він зчитує значення змінної next_frее_slot, бачить там число 7 і записує ім'я свого файлу в область 7, затираючи ім'я файлу, яке тільки що було в нього поміщено процесом Б. Потім він обчислює next_ free_slot + 1, отримує значення 8, і привласнює його змінній in. У каталозі спулера немає внутрішніх суперечностей, тому демон друку не помітить ніяких проблем, але процес Б ніколи не отримає виведення на друк.

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

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