Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

На этой странице собраны фото проститутки с Международной в Питере

Семафори

  Але коли ти проспиш, приховай заспівай переляк
Це була не примара, ці був лише звук
Це рушив поїзд, на який ти не попадеш.
Б. Гребенщиков

Семафор Дейкстри є цілочисельною змінною, з якою асоційована черга чекаючих ниток. Намагаючись пройти через Сема-фор, нитка намагається відняти із значення змінної 1. Якщо значення змінної більше або рівне 1, нитка проходить крізь семафор успішно (семафор відкритий). Якщо змінна дорівнює нулю (семафор закритий), нитка зупиняється і ставиться в чергу.
Закриття семафора відповідає захвату об'єкту або ресурсу, доступ до Кото-рому контролюється цим семафором. Якщо об'єкт захоплений, останні нитки вимушені чекати його звільнення. Закінчивши роботу з об'єктом (вийшовши з критичної секції), нитку збільшує значення семафора на одиницю, відкриваючи його. При цьому перша з ниток, що стояли в черзі, активізується і віднімає із значення семафора одиницю, знову закриваючи семафор. Якщо ж черга була порожня, то нічого не відбувається, просто семафор залишається відкритим. Тоді перша нитка, що підійшла до семафора, успішно прогцет через нього. Це дійсно схоже на роботу залізничного семафо. ра, контролюючого рух поїздів по одноколійній вітці (мал. 7.6)

Мал. 7.6. Залізничний семафор

Найбільш простим випадком семафора є двійковий семафор. Початкове значення змінної прапора такого семафора дорівнює 1, і взагалі вона може набувати лише значень 1 і 0. Двійковий семафор відповідає випадку, коли з ресурсом, що розділяється, в кожен момент часу може працювати лише одна нитка.
Семафори спільного вигляду можуть набувати будь-яких ненегативних значень. У сучасній літературі такі семафори називають семафорами-лічильниками (counting semaphore). Це відповідає випадку, коли декілька ниток можуть працювати з об'єктом одночасно, або коли об'єкт складається з декількох незалежних, але рівноцінних частин — наприклад, декілька однакових принтерів. При роботі з такими семафорами часто дозволяють процесам віднімати і додавати до змінної прапора значення, великі одиниці. Це відповідає захвату/освобожденію декількох частин ресурсу.
Багато систем надають також сервіси, що дозволяють проглянути достаток семафора без його зміни і провести "неблокируюшуюся" форму захвату, яка повертає помилку за ситуації, коли нормальний захват семафора привів би до блокування. Теоретики не дуже люблять такі примітиви, але при розробці складних сценаріїв взаємодії за участю багатьох семафорів вони бувають корисні.
У багатьох сучасних книгах і операційних системах семафорами називаються лише семафори спільного вигляду, двійкові ж семафори носять коротше і виразніше ім'я мутекс (mutex — від Mutnal Exclusion, взаємне виключення). Прослідити генезис цієї назви авторові не удалося, але можна з упевненістю сказати, що воно увійшло до широкого вживання не раніше кінця 80-х. Так, в тій, що розроблялася в середині 80-х років Os/2 1.0, двійкові семафори ще називаються семафорами, а в Win32, розробка якої відбувалася на початку 90-х, вже з'являється назва mutex. Операції над мутексом називаються захватом (acquire) (відповідає входу в критичну секцію) і звільненням (release) (відповідає виходу з неї).
Багато ОС надають для синхронізації семафори Дейкстри або схожі на них механізми.

Прапори подій в Rsx-11 і VMS
Так, наприклад, в системах Rsx-11 і VMS основним засобом синхронізації є прапори подій (event flags). Процеси і система можуть очищати (clear) або зводити (set) ці прапори. Прапори діляться на локальних і глобальних. Локальні прапори використовуються для взаємодії між процесом і ядром системи, глобальні, — між процесами. Процес може зупинитися, чекаючи установки певного прапора, тому прапори в багатьох ситуаціях можна використовувати замість двійкових семафорів. Крім того, процес може пов'язати з прапором події процедуру-обработчик AST (Asynchronous System Trap — асихронно [що викликається] системний обробник).
AST багато в чому нагадують сигнали або апаратні переривання. Зокрема, прапори подій використовуються для синхронізації призначеної для користувача програми з асинхронного виконання запитів на уведення-виведення. Виконуючи запит, програма задає локальний прапор події. Потім вона може зупинитися, чекаючи цього прапора, який буде зведений після виконання запиту. При цьому ми отримуємо псевдосинхронне уведення-виведення, що нагадує синхронні операції чтенія/запіси в UNIX і MS DOS. Але програма може і не зупинятися! При цьому запит виконуватиметься паралельно з виконання самої програми, і вона буде оповіщена про завершення операції відповідною процедурою AST.

Асинхронне уведення-виведення часто життєво необхідне в програмах реального часу, але буває корисний і в інших випадках.

 

:: Реклама ::

универсал шевроле лачетти цена

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017