- •Практичне заняття 6 Черги повідомлень в unix
- •Повідомлення як засоби зв'язку і засоби синхронізації процесів
- •Черги повідомлень в unix як складова частина System V ipc
- •Створення черги повідомлень або доступ до вже існуючої. Системний виклик msgget()
- •Реалізація примітивів send і receive. Системні виклики msgsnd() і msgrcv()
- •Видалення черги повідомлень з системи за допомогою команди ipcrm або системного виклику msgctl()
- •Прогін прикладу з однонаправленою передачею текстової інформації
- •Поняття мультиплексування. Мультиплексування повідомлень. Модель взаємодії процесів клієнт-сервер. Нерівноправність клієнта і серверу
- •Використовування черг повідомлень для синхронізації роботи процесів
- •Питання до захисту роботи
Поняття мультиплексування. Мультиплексування повідомлень. Модель взаємодії процесів клієнт-сервер. Нерівноправність клієнта і серверу
Використовуючи техніку з попереднього прикладу, ми можемо організувати отримання повідомлень одним процесом від безлічі інших процесів через одну чергу повідомлень і відправку їм відповідей через ту ж чергу повідомлень, тобто здійснити мультиплексування повідомлень. Взагалі під мультиплексуванням інформації розуміють можливість одночасного обміну інформацією з декількома партнерами. Метод мультиплексування широко застосовується в моделі взаємодії процесів клієнт-сервер. В цій моделі один з процесів є сервером. Сервер одержує запити від інших процесів – клієнтів – на виконання деяких дій і відправляє їм результати обробки запитів. Частіше всього модель клієнт-сервер використовується при розробці мережних додатків, з якими ми зіткнемося в матеріалах завершальних занять курсу. Вона спочатку припускає, що взаємодіючі процеси нерівноправні:
Сервер, як правило, працює постійно, на всьому протязі життя додатку, а клієнти можуть працювати епізодично.
Сервер чекає запиту від клієнтів, ініціатором же взаємодії є клієнт.
Як правило, клієнт звертається до одного серверу за раз, тоді як до серверу можуть одночасно поступати запити від декількох клієнтів.
Клієнт повинен знати, як звернутися до серверу (наприклад, якого типа повідомлення він сприймає) перед початком організації запиту до серверу, тоді як сервер може одержати бракуючу інформацію про клієнта із запиту, що прийшов.
Розглянемо наступну схему мультиплексування повідомлень через одну чергу повідомлень для моделі клієнт-сервер. Хай сервер одержує з черги повідомлень тільки повідомлення з типом 1. До складу повідомлень з типом 1, посиланих серверу, процеси-клієнти включають значення своїх ідентифікаторів процесу. Прийнявши повідомлення з типом 1, сервер аналізує його зміст, виявляє ідентифікатор процесу, що послав запит, і відповідає клієнту, посилаючи повідомлення з типом, рівним ідентифікатору запрошуючого процесу. Процес-клієнт після відправлення запиту чекає відповіді у вигляді повідомлення з типом, рівним своєму ідентифікатору. Оскільки ідентифікатори процесів в системі різні, і жоден призначений для користувача процес не може мати PID рівний 1, всі повідомлення можуть бути прочитані тільки тими процесами, яким вони адресовані. Якщо обробка запиту займає тривалий час, сервер може організовувати паралельну обробку запитів, породжувати для кожного запиту новий процес-дитина або нову нитку виконання.
Використовування черг повідомлень для синхронізації роботи процесів
В лекції 6 була доведена еквівалентність черг повідомлень і семафорів в системах, де процеси можуть використовувати пам'ять, що розділяється. Зокрема, було показано, як реалізувати семафори за допомогою черг повідомлень. Для цього вводився спеціальний синхронізуючий процес-сервер, обслуговуючий змінні-лічильники для кожного семафора. Процеси-клієнти для виконання операції над семафором посилали процесу-серверу запити на виконання операції і чекали відповіді для продовження роботи. Тепер ми знаємо, як це можна зробити в операційній системі UNIX і як, отже, можна використовувати черги повідомлень для організації взаємовиключає і взаємної синхронізації процесів.
