русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Чергу повідомлень в Linux і Unix

Механізм черг дає процесам можливість надсилати іншим процесам потоки сформатированных даних. Процес має можливість надіслати повідомлення в певну чергу і прийняти повідомлення з черги. Передача даних в черзі відбувається завжди повідомленнями, причому кожне повідомлення має заголовок і тіло. Заголовок завжди має фіксований для даної системи формат. У нього обов'язково входить довжина повідомлення, а інша інформація залежить від специфікацій конкретної системи: це може бути пріоритет повідомлення, тип повідомлення, ідентифікатор процесу, що послав повідомлення, і т.п. Тіло повідомлення інтерпретується за правилами, встановленими самими процесами: відправником і одержувачем. Заголовок і тіло являють собою істотно різні структури даних і розташовуються в різних місцях в пам'яті. Власне чергу ОС складає з заголовків повідомлень. У елементи черги включаються покажчики на тіла повідомлень, що розташовуються в пам'яті системи.

 

 

Системні виклики 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).


Переглядів: 10325

Повернутися в зміст:ОС Linux




Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн