Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Семафори




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

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

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

flag = semaphoreOp(semaphorId, opCode, waitOption);

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

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

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

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




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 431; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.