Page 48 - 4868
P. 48

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

               процесами.  При  взаємодії  процесів  не  всі  чергування  є  допустимими.  Ціль
               синхронізації  –  запобігти  небажаним  чергування.  Це  здійснюється  шляхом
               об’єднання  дрібномодульних  неподільних  операцій  в  крупномодульні
               (складені)  дії  або  затримки  виконання  процесу  до  досягнення  програмою
               стану,  що  задовольняє  деякому  предикату.  Перша  форма  синхронізації
               називається взаємним виключенням, а друга – умовною синхронізацією.
                     Нагадаємо,  що  неподільна  дія  виконує  неподільнумодифікацію  стану.
               Це  означає,  що  будь-який  проміжний  стан,  який  може  виникнути  при
               виконанні  цієї  дії,  не  повинен  бути  видимим  для  інших  процесів.
               Дрібномодульна  неподільна  дія  –  це  дія,  що  реалізується  безпосередньо
               апаратним забезпеченням, на якому виконується програма.
                     У послідовній програмі неподільними є оператори присвоєння, оскільки
               при  їх  виконанні  немає  проміжних  станів,  видимих  програмі  (за  винятком,
               можливо,  випадків,  коли  виникає  помилка,  обумовлена  апаратним

               забезпеченням).  Однак  у  паралельних  програмах  оператор  присвоєння  не  є
               неподільною  дією,  оскільки  він  може  бути  реалізований  у  вигляді
               послідовності  дрібномодульних  машинних  інструкцій.  Як  приклад
               розглянемо наступну програму і припустимо, що дрібномодульні неподільні
               дії – це зчитування і запис змінних.
                     int y = 0, z = 0;
                     cox = y+z; // y = 1; //z = 2; oc;

                     Якщо вираз x = y + z реалізовано завантаженням значення змінної y в
               регістр  і  подальшим  додаванням  значення  змінної  z,  то  кінцевими
               значеннями змінної x можуть бути значення 0, 1, 2 або 3. Це відбувається
               тому, що ми можемо отримати як початкові значення yта z, так і їх кінцеві
               значення або деяку комбінацію значень, в залежності від ступеня виконання
               другого процесу.Ще одна особливість наведеної програми полягає в тому, що
               кінцевим  значенням  змінної  x  може  бути  і  значення  2,  хоча  неможливо
               зупинити програму і побачити стан в якому сума y + zрівна значенню 2.
                     Передбачається,  що  обчислювальні  машини  володіють  наступними

               характеристиками:
                     1. Значення  базових  типів  (наприклад  int)  зберігаються  в  елементах
               пам’яті  (наприклад  словах),  які  зчитуються  і  записуються  неподільними

               операціями.
                     2. Значення  обробляються  в  наступній  послідовності:  спочатку  їх
               поміщають в регістри, там до них застосовують операції і потім записують

               результати назад в пам’ять.
                     3. Кожен  процес  має  свій  власний  набір  регістрів.  Це  реалізується  або
               шляхом  надання  кожному  процесу  окремого  набору  регістрів,  або  шляхом
               збереження  і  відновлення  значень  регістрів  при  виконанні  різних  процесів

               (це  називається  перемиканням  контексту,  оскільки  регістри  утворюють
               контекст виконання процесу).
                     4. Будь-які  проміжні  результати,  що  з’являються  при  обчисленні
               складних виразів, зберігаються в регістрах або областях пам’яті, що належать
   43   44   45   46   47   48   49   50   51   52   53