Page 89 - 4868
P. 89

87                                                               Ошибка! Стиль не определен.

                     Розглянемо  роботу  аналога  одномісного  семафора,  що  називається
               м’ютексом  (слово  mutex  походить  від  mutual  exclusion  –  «взаємне
               виключення»),  який  використовується  для  синхронізації  одночасно
               виконуваних потоків.
                     М’ютекс  відрізняється  від  семафора  тим,  що  тільки  потік,  який  ним
               володіє  може  його  перевести  в  інший  стан.  Вони  реалізовані  в  більшості
               відомих  на  даний  час  операційних  системах  і  основне  їх  призначення  –
               організація процедури взаємного виключення для декількох процесів.
                     М’ютекс представляє собою двійковий семафор, який може перебувати
               в  одному  із  двох  станів  –    сигнальному  або  несигнальному  (відкритий  і
               закритий відповідно). Коли певний процес стає власником об’єкта mutex, то

               останній переводиться в несигнальний стан. Якщо потік покидає м’ютекс, то
               його стан відповідно стає сигнальним.
                     Завдання  м’ютекса  полягає  у  захисті  об’єкта  від  доступу  до  нього  з
               інших  процесів,  відмінних  від  того,  який  заволодів  м'ютексом.  М’ютекс
               перебуває в сигнальному стані тільки тоді, коли він не належить жодному із
               процесів. Як тільки хоча б один процес отримує контроль над м’ютексом, він
               переходить  у несигнальний стан  і залишається в  ньому доти, поки не буде
               звільнений  власником.  На  відміну  від  критичних  секцій,  м’ютекси
               дозволяють  задавати  точний  інтервал  очікування,  а  м’ютекси,  покинуті
               закінченими  процесами,  автоматично  переходять  у  сигнальний  стан.  Мета
               використання м’ютексів полягає у захисті даних від пошкодження внаслідок
               асинхронних змін (стан гонки).
                     Нехай  об’єкт  mutex  –  семафор  з  початковим  значенням  1.  Виконання
               операції P(mutex) – це те ж саме, що і очікування, доки значення змінної
               lock не стане рівним 1,  і подальше присвоєння  їй значення  0.  Аналогічно
               виконання операції V(mutex) - це присвоєння змінній lock значення 1 (за
               умови,  що  вона  має  значення  0).  Дані  міркування  приводять  до  вирішення
               задачі критичної секції, показаному в лістингу 1.16.

                     Лістинг 1.16– Рішення задачі критичної секції з використанням підходу
               на основі м’ютексів

                     sem mutex = 1;
                     process CS[i = 1 to n] {
                       while (true) {
                         P(mutex);
                         критична секція;
                         V(mutex);
                         некритична секція;
                       }
                     }

                     2.Задача  реалізації  бар’єрів(сигнальні  події).  У  реалізаціях  бар’єрів  з
               активним         очікуванням         використовуються            змінні-прапорці,         які
               встановлюються процесами, що підходять до бар’єра і скидаються процесами
   84   85   86   87   88   89   90   91   92   93   94