Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR_СП_лекции_укр.doc
Скачиваний:
6
Добавлен:
22.04.2019
Размер:
697.34 Кб
Скачать

3.9 Повідомлення.

У межпроцессных взаємодіях дві команди працюють із повідомленнями:

  • msgsnd() - послати повідомлення,

  • msgrsv() - одержати повідомлення.

При посилці повідомлення визначається його тип і його текст.

Одержувач використовує тип повідомлення як критерій для його одержання. Якщо як критерій використовується нульовий тип повідомлення, то одержувач вибирає повідомлення в хронологічному порядку. Якщо одержувач не може знайти повідомлення бажаного типу, він виконує виклик sleep() до виявлення повідомлення потрібного типу. У такий спосіб повідомлення можна використовувати для синхронізації процесів.

Повідомлення формуються у вигляді блоків, структура яких містить текст самого повідомлення і його тип. Довжина повідомлення може бути визначена самим користувачем. Буферы, що містять СТРУКТУРИ ПОВІДОМЛЕНЬ, відзначаються як MESSAGE QUEUE HEADER (КОЛЕКТОР ЧЕРГИ ПОВІДОМЛЕНЬ).

ЧЕРГА ПОВІДОМЛЕНЬ - одновходовой список колекторів. Пам'ять, потребнаядля структури собщений, управляється як звичайне ОЗУ через таблицю MSGMAP, для якої простір виділяється й звільняється через malloc() і mfree() відповідно. Посилка собщения відбувається в кілька кроків:

  1. воно повинне бути приєднане до вільного колектора черги повідомлень;

  2. необхідно приєднати пространсрво ОЗУ, необхідне для самого тексту повідомлення;

Примітка: простору, описані в п.п. 1 і 2 "зчіплюються" з раніше прийнятою інформацією.

  1. знову створений колектор повідомлення приєднується до черги повідомлень.

Одержання повідомлення може відбуватися або відповідно до його ипом, або в хронологічному порядку (FIFO). Відразу після одержання повідомлення відповідний колектор від'єднується, займане повідомленням простір від'єднується, а займане колектором простір звільняється.

3.10 Поділювана пам'ять.

Це загальний простір, куди будь-який процес може помістити інформацію або звідки він може неї взяти. Поділювана пам'ять розглядається як простір даних для процесу.

При видачі системного виклику shmget() приєднується фізичний сегмент поділюваної пам'яті й видається його ідентифікатор процесу.

Shmat() не приєднує пам'ять, а прив'язує її до вже наявного сегмента й потім відповідний віртуальний сегмент пам'яті прив'язує до раніше подсоединенномусегменту. Якщо раніше віртуальна адреса не була визначена, то використовується перша вільна адреса, що випливає за сегментом даних. Приймаються запобіжні заходи при визначенні адреси поділюваної пам'яті, щоб магазин не ріс надмірно. Дозвіл "тільки читати" або "тільки писати" приймається на межпроцессной базі.

Різні процеси можуть використовувати сегмент поділюваної пам'яті протягом свого існування. Коли процес завершується, вылается системний виклик shmdt() для від'єднання процесу від простору поділюваної пам'яті й сегмент фізично вилучається в процесу.

Література

  1. Дансмур М. Операційна система UNIX і програмування мовою Си. / Дансмур М., Дейвис Г. - М.: Радіо й зв'язок, 1989. - 192 с.

  2. Рейчард К. Linux: довідник / К. Рейчард, П. Фолькердинг. - Спб.: Питер Кін, 1999. - 480 с.

  3. Робачевский А.М. Операційна система UNIX. - Спб.: BHV-Санкт-Петербург, 1997. - 528 с.

  4. Стивенс У. UNIX: взаємодія процесів. - Спб.: Питер, 2003. - 576 с.

  5. Теренс Чан Системне програмування на З++ для UNIX. К.: Видавнича група BHV, 1997. - 592 с.

  6. Хэвиленд К., Грэй Д., Салама Б. Системне програмування в UNIX. Керівництво програміста. - М., ДМК Пресс, 2000. - 368 с.

  7. Бовет Д., Чезати М. Ядро Linux. - Бхв-Петербург, 2007. - 1104 с.

  8. В. Белунцов. Самовчитель користувача Linux. - Москва: "ДЕСС КОМУ", 2003. - 512 с.

  9. Колисниченко Д.Н., Аллен П. В. Linux: Повне керівництво. - М., Наука й техніка, 2007 р. - 784 с.

  10. Курячий Г. В., Маслинский К. А. Операційна система Linux. Курс лекцій. Навчальний посібник. - Інтернет-Університет інформаційних технологій, 2005. - 392 с.

  11. Митчелл М. і ін. Програмування для Linux. Професійний підхід. - М., Діалектика, 2002 - 288 с.

  12. Брюс Моли. Unix/Linux. Теорія й практика програмування. - М., Кудиц-Образ, 2004. - 576 с.

  13. Роббинс А. Linux: програмування в прикладах. - М., Кудиц-Образ, 2005. - 656 с.

  14. Секунов Н. Ю. Програмування на З++ в Linux. - Спб., Бхв-Петербург, 2003. - 354 с.

  15. Скотт Максвелл. Ядро Linux у коментарях. - DiaSoft, 2000. - 488с.

  16. Стивенс У.Р. UNIX: розробка мережних додатків. - Спб., Питер, 2007. - 1039 с.

  17. Уолтон Ш. Створення мережних додатків у середовищі Linux. Керівництво розроблювача. - - М., Вільямс, 2001.- 464 c.

Жуковецька С.Л.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]