Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПЗ_лекції.docx
Скачиваний:
148
Добавлен:
23.02.2016
Размер:
136.33 Кб
Скачать

Лекція 4. Потоки в операційних системах.

  1. Поняття про потоки.

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

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

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

Потоки розділяють не тільки адресний простір, але й відкриті файли, дочірні процеси, сигнали і т.д.

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

Таблиця 4.1.

Концепція потоків полягає в можливості сумісного використання набору ресурсів деякими потоками для виконання деякої задачі в тісній взаємодії.

  1. Використання потоків.

Основною причиною використання потоків є виконання більшістю додатків суттєвої кількості дій, деякі з них можуть час від часу блокуватись. Схему програми можна суттєво спростити, якщо розбити додаток на декілька послідовних потоків, які запущені в квазіпаралельному режимі. Оскільки з потоком не пов’язані жодні ресурси, то потоки легко створюються і знищуються (в часі приблизно в 100 раз за процес).

Є два основних способи реалізації пакету потоків : в просторі користувача і ядрі.

Потоки часто використовуються в розподілених системах. Одним з прикладів є обробка вхідних повідомлень (запитів на обслуговування). Традиційний підхід полягає в наявності процесу або потоку, який блокується за системним запитом receive, очікуючи вхідного повідомлення. Якщо воно надходить, то приймається і обробляється. Інший підхід полягає в тому, що по надходженню повідомлення система створює новий потік для його обробки.

Досить багато програм було написано для однопоточних процесів і зробити їх багатопотоковими досить складно, бо по-перше програма потоку складається з декількох процедур, в яких є змінні, параметри; по-друге, більшість бібліотечних процедур не є реєнтабельними.

Тому введення потоків в існуючу систему неможливе без детально продуманої реконструкції всієї системи.

3. Міжпроцесна взаємодія.

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

Основним способом уникнення проблем, пов’язаних з сумісним використанням пам’яті, файлів і ін., є заборона одночасного запису і читання розділених даних більш ніж одним процесом. Іншими словами є необхідність у взаємному виключенні. Це означає, що коли один процес використовує розділені дані, іншому процесу це робити заборонено. Частину програми, в якій є звернення до сумісно використовуваних даних, називається критичною областю або критичною секцією. Якщо вдається уникнути одночасного знаходження двох процесів в критичних областях, тоді можна уникнути змагань. Ця вимога виключає змагання, але її недостатньо для правильної сумісної роботи паралельних процесів та ефективного використання спільних даних.

Рис.4.1.Взаємне виключення з використанням критичних областей

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

Використовується також рішення, яке вимагає апаратного забезпечення. Багато комп’ютерів, особливо розроблених з розрахунком на декілька процесорів, мають команду TSL RX.LOCK (перевірити і заблокувати), яка діє так: в регістр RX зчитується вміст слова пам’яті lock, а в комірці пам’яті lock зберігається деяке нульове значення.