Page 57 - 6571
P. 57

7. Дайте визначення поняттю «взаємне виключення»
                  8. Яка основна вимога повинна задовольнятися для можливо-
            сті розпаралелювання будь-якої програми?
                  9. Яке призначення оператора co під час реалізації паралель-

            ної програми?
                  10. У чому полягає суть незалежності паралельних процесів?



                                                  ЛЕКЦІЯ 7

                      НЕПОДІЛЬНІ ДІЇ ТА ОПЕРАТОРИ ОЧІКУВАННЯ



                  7.1 Дрібномодульна неподільність


                  Як згадувалося раніше, виконання паралельної програми мо-
            жна представити як чергування неподільних дій, що виконуються

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

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

                  Нагадаємо, що неподільна дія виконує неподільну модифіка-
            цію стану. Це означає, що будь-який проміжний стан, який може
            виникнути при виконанні цієї дії, не повинен бути видимим для

            інших процесів. Дрібномодульна неподільна дія – це дія, що реа-
            лізується безпосередньо апаратним забезпеченням, на якому ви-
            конується програма.

                  У послідовній програмі неподільними є оператори присвоєн-
            ня, оскільки при їх виконанні немає проміжних станів, видимих
            програмі (за винятком, можливо, випадків, коли виникає помил-

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

            програму  і  припустимо,  що  дрібномодульні  неподільні  дії  –  це
            зчитування і запис змінних.

                  int y = 0, z = 0;
                  co x = y+z; // y = 1; // z = 2; oc;

                                                        56
   52   53   54   55   56   57   58   59   60   61   62