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