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

4.Примітиви міжпроцесної взаємодії.

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

В якості прикладу використання примітивів розглянемо проблему виробника і споживача (sleep – системний запит, в результаті якого викликаючий процес блокується, поки його не запустить інший процес; у запиту wake up є один параметр – це процес, який потрібно запустити). Аналогічно, якщо споживач хоче забрати дані з буфера, а буфер порожній, споживач переходить в стан очікування і виходить з нього як тільки виробник положить що-небудь в буфер і розбудить його. Це рішення є досить простим, але воно приводить до стану змагання.

5.Семафори та їх використання.

В 1965 році Дейкстра запропонував цілу зміну для підрахунку сигналів запуску, збережених на майбутнє. Ним був запропонований новий тип змінних (семафори), значення яких може бути нулем (у випадку відсутності збережених сигналів активізації) або деяким додатнім числом, яке відповідає кількості відкладених активізуючих сигналів.

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

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

В оригіналі Декстра використав замість down і up позначення Р і V відповідно. Вперше позначення down і up з’явились в мові Algol 68.

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

Якщо використовуються декілька процесорів, то кожен семафор потрібно запустити з змінною блокування з використанням команди TSL, щоб гарантувати одночасне звертання до семафору тільки одного процесора.

6.Поняття м’ютекса.

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

М’ютекси легко реалізувати в просторі користувача, якщо доступна команда TSL.