Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
13-15.docx
Скачиваний:
2
Добавлен:
20.11.2019
Размер:
77.04 Кб
Скачать

Семафори

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

При роботі з іменованих семафором один з процесів повинен створити системний семафор за допомогою виклику createSemapore, інші процеси отримують доступ до створеного системного семафора за допомогою виклику openSemaphore. Серед вхідних параметрів цих викликів є зовнішнє ім'я семафора, виклики повертають маніпулятор для семафора, використовуваний для його ідентифікації при подальшій роботі з ним. При закінченні роботи з системним семафором процес повинен виконати виклик closeSemaphore. Семафор знищується, коли він закритий у всіх процесах, його використовували.

Виконання операцій над семафором може забезпечуватися системним викликом виду:

    flag = semaphoreOp (semaphorId, opCode, waitOption);

де semaphorId - маніпулятор семафора, opCode - код операції, waitOption - опція очікування, flag - повернене значення, ознака успішного виконання операції або код помилки.

Крім основних для семафорів P-і V-операцій, конкретні семафорні API ОС можуть включати в себе розширені і сервісні функції, такі як безумовна установка семафора, установка семафора і очікування його очищення, очікування очищення семафора. При виконанні системних викликів - аналогів P-операції, як правило, є можливість задати опцію очікування - блокувати процес, якщо виконання P-операції неможливо, або завершити системний виклик з ознакою помилки.

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

Всі сучасні ОС надають прикладному процесу можливість працювати з "масивами семафорів", тобто, задавати список семафорів і виконувати операцію над усім списком, наприклад, очікувати очищення будь-якого семафора в заданому списку. Найбільш розвинене це засіб в ОС Unix, де є можливість виконувати за один системний виклик semop (аналог нашого semaphoreOp) відразу декількох різних операцій над декількома семафорами, причому весь список операцій виконується, як одна транзакція.

Неіменовані семафори зазвичай використовуються як засіб взаємного виключення і синхронізації роботи ниток одного процесу

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