Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операційні системи.doc
Скачиваний:
0
Добавлен:
13.01.2020
Размер:
6.41 Mб
Скачать

Монітори

Конструкція монітор запропонований в 1974 р. Ч. Хоаром. Вона є більше високорівневою і більше надійною конструкцією для синхронізації, чим семафори.

Монітор є багатовходовим модулем особливого роду. Він містить описи загальних для декількох паралельних процесів даних й операцій над цими даними у вигляді процедур P1, …, Pn... Користувачі монітора - паралельні процеси - мають доступ до описаного в ньому загальним даним тільки через його операції, причому в кожен момент часу не більш ніж один процес може виконувати яку-небудь операцію монітора; інші процеси, що бажають виконати операцію монітора, повинні чекати, поки перший процес закінчить виконувати моніторну операцію.

По суті справи, концепція монітора з'явилася розвитком запропонованої також Ч. Хоаром концепції абстрактного типу даних (АТД) – визначення типу даних як сукупності опису його конкретного подання й абстрактних операцій над ним (у вигляді процедур). Концепція монітора додає до АТД можливість синхронізації процесів за загальним даними.

Для реалізації очікування усередині монітора по різних умовах, уводяться умовні змінні (condition variables) – змінні з описами виду condition x,y, доступ до яких можливий тільки операціями wait й signal: наприклад, x.wait(); x.signal(). Операція x.wait() означає, що процес, її виконав, затримується до того моменту, поки інший процес не виконає операцію x.signal(). Операція x.signal() відновляє рівно один припинений процес. Якщо припинених процесів нема, вона не виконує ніяких дій.

Схематичне зображення монітора наведене на рис. 12.2.

Рис. 12.2.  Схематичне зображення монітора.

Схема монітора з умовними змінними наведена на рис. 12.3.

Рис. 12.3.  Монітор з умовними змінними.

Рішення завдання " філософи, що обідають," за допомогою моніторів

Реалізуємо рішення завдання " філософи, що обідають," ) за допомогою монітора. Для кожного філософа визначимо стану (голодний, обідає, думає), і для їхнього зберігання будемо використати масив state. Для керування переходом філософа зі стану в стан використаємо масив умовних змінних self. Для кожного філософа визначимо операції pickup - взяти паличку; putdown - звільнити паличку ; test - перевірити стан філософа й, якщо це можливо і якщо він голодний, перевести його в стан eating.

Синхронізація в ОС Solaris

Система Solaris надає різноманітні види блокіровщиків для підтримки багатозадачності, багатопоточності (включаючи потоки реального часу) і мультипроцессирования. Використовуються адаптивні мюьтексы (adaptive mutexes) – ефективний засіб синхронізації доступу до даних при їхній обробці короткими сегментами коду. Для більше довгих сегментів коду використаються умовні змінні й блокіровщики читачів-письменників (reader-writer locks; rwlocks).

Для синхронізації потоків використовуються "вертушки" (turnstiles) – синхронізуючі примітиви, які дозволяють використати або adaptive mutex, або rwlock.

Синхронізація в Windows 2000

Для захисту доступу до даних на однопроцесорних системах використовуються маски переривань. Для багатопроцесорних систем використовуються spinlocks ( замки, що вертяться). У системі реалізовані також об'єкти-диспетчери, які можуть функціонувати як мьютекси і як семафори. Об'єкти-диспетчери генерують події, семантика яких аналогічна семантиці умовної змінної.