Page 67 - 2578
P. 67

Процес  може  розміщувати  у  черзі  повідомлення  за
                            допомогою  функції  msgsnd(2),  отримувати  повідомлення
                            певного  типу  з  черги  за  допомогою  msgrcv(2),  керувати
                            повідомленнями за допомогою функції msgctl(2).
                                Типова  є  ситуація  взаємодії  процесів,  коли  серверний
                            процес  обмінюється  даними  з  кількома  клієнтами,  виглядає
                            таким  чином:  в  одній  черзі  можна  мультиплексувати
                            повідомлення  від  різних  процесів,  що  дозволяє  виконувати
                            для  обміну  одну  чергу,  але  кожному  з  повідомлень,
                            спрямованих від будь-якого клієнта серверові, треба надавати
                            значення типу, наприклад, 1; якщо в тілі повідомлення клієнт
                            певним чином ідентифікує себе, наприклад передає свій PID,
                            то сервер може переспрямовувати повідомлення конкретному
                            клієнтові,  привласнюючи  тип  повідомлення  дорівнюваним
                            цьому ідентифікаторові, функція msgrcv(2) дозволяє приймати
                            повідомлення  певного  типу,  тому  сервер  прийматиме
                            повідомлення з типом 1, а клієнти — повідомлення з типами,
                            що вони дорівнюють ідентифікаторам їхніх клієнтів.
                                Семафори      використовуються       для    синхронізування
                            доступу  кількох  процесів  до  розподілюваних  ресурсів.  Вони
                            виконують     функцію     дозволу     або   заборони     процесу
                            використання  того  чи  того  розподілюваного  ресурсу.
                            Семафори      є    системним     ресурсом,     дії   над    яким
                            зреалізовуються  через  інтерфейс  системних  функцій  і  не
                            призначені  для  обміну  потужними  обсягами  даних.  UNIX
                            припускає  три  можливі  операції  над  семафором,  що  вони
                            визначаються  системним  викликом  semop(2),  а  саме  його
                            полем semop
                                int semop(int semid, struct sembuf  *semop, size_t nops):
                                1  якщо  величина  semop  додатна,  поточне  значення
                            семафора збільшується на цю величину;
                                2  якщо  значення  semop  дорівнює  нулю,  процес  очікує,
                            допоки семафор не обнулиться;

                                                           66
   62   63   64   65   66   67   68   69   70   71   72