Механізм черг дає процесам можливість надсилати іншим процесам потоки сформатированных даних. Процес має можливість надіслати повідомлення в певну чергу і прийняти повідомлення з черги. Передача даних в черзі відбувається завжди повідомленнями, причому кожне повідомлення має заголовок і тіло. Заголовок завжди має фіксований для даної системи формат. У нього обов'язково входить довжина повідомлення, а інша інформація залежить від специфікацій конкретної системи: це може бути пріоритет повідомлення, тип повідомлення, ідентифікатор процесу, що послав повідомлення, і т.п. Тіло повідомлення інтерпретується за правилами, встановленими самими процесами: відправником і одержувачем. Заголовок і тіло являють собою істотно різні структури даних і розташовуються в різних місцях в пам'яті. Власне чергу ОС складає з заголовків повідомлень. У елементи черги включаються покажчики на тіла повідомлень, що розташовуються в пам'яті системи.
Системні виклики Unix/Linux
ОС Unix/Linux механізм черг повідомлень забезпечується чотирма системними викликами:
msgget,
msgctl,
msgsnd,
msgrcv.
Системний виклик msgget створює нову чергу або повертає ідентифікатор вже існуючої черги. Як і інші засоби взаємодії між процесами, черги в Unix/Linux (як і семафори) не мають зовнішніх імен. При отриманні ідентифікатора черзі процес користується числовим ключем. Гарантовано унікальну чергу можна створити з використанням ключа IPC_PRIVATE. При роботі з чергою один з процесів створює чергу і отримує її ідентифікатор. Цей ідентифікатор потім передається використовується процесом-творцем іншим (можливо, дочірнім) процесам і використовується процесами для виконання операцій з чергою. Сформувати ключ також можна за допомогою ftok.
Системний виклик msgctl дозволяє виконувати керуючі операції над чергою: отримувати інформацію про її стан, змінювати права доступу до неї, знищувати чергу.
Системні виклики msgsnd і msgrcv виконують здійснювати та отримувати повідомлення відповідно. При надсиланні і прийом повідомлень процеси оперують числовим типом повідомлення і текст повідомлення. Тип повідомлення може виконувати роль пріоритету: процес може вибирати з черги повідомлення заданого типу або повідомлення, які мають найменше число типу. Якщо вибірка за типом не застосовується, повідомлення вибираються за принципом FIFO
Увага!
пВ процесі налагодження програми у Вас можуть виникати ситуації, коли програма
пбудет аварійно закінчуватися або перериватися Вами, перш ніж вона знищить
псозданные нею черги. Такі черги не видаляються в системі автоматично і
пмогут накопичуватися протягом багатьох днів. Накопичення таких "забутих" черг
допоможе привести до того, що буде вичерпано системний ліміт на кількість
почередей, і черговий виклик msgget закінчиться з
пошибкой. Для того, щоб цього не відбувалося, регулярно робіть процедуру
почистки IPC: /home/metod/rmipc. Виконуйте
пету процедуру також перед кожним виходом з сеансу.
Список створених Вами черг Ви можете побачити, виконавши команду:
ipcs-q.
|
Приклад виконання наведено тут.
Довідковий матеріал
Обрані системні виклики Linux/Unix. Короткий опис.
Довідник бібліотечних функція мови З: частина 1,
частина 2 (кодування кирилиця ibm866).