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. Будь-які проміжні результати, що з’являються при обчисленні
складних виразів, зберігаються в регістрах або областях пам’яті, що належать