- •Анотація
- •1 Середовище програмування ос unix
- •1.1 Структура ос unix
- •1.2 Створення програми
- •1. Препроцесор
- •2. Транслятор
- •2.1 Компілятор
- •2.2 Асемблер
- •3. Редактор зв'язків(Компонувальником)
- •1.3 Формати об'єктних файлів
- •2 Використання файлової системи unix
- •2.1 Основні поняття
- •2.1.1 Типи та іменування файлів
- •2.1.2 Права доступу до файлів
- •2.1.3 Cистемные структури керування файлами
- •2.1.4 Системні виклики роботи з файлами
- •2.2 Створення та відкриття файлів
- •2.2.1 Системний виклик open
- •2.2.2 Системний виклик create
- •2.2.3 Системний виклик close
- •2.3 Читання та зипис в файл
- •2.3.1 Системний виклик read
- •2.3.2 Системний виклик write
- •2.4 Позіціонування у файлі
- •2.4.1 Системний виклик lseek
- •2.4.2 Системні виклики pread і pwrite
- •2.4.3 Системні виклики readv і writev
- •2.5 Контрольні операції над файлами
- •2.5.1 Системні виклики stat, fstat і lstat
- •2.5.2 Контроль прав доступу до файлу
- •2.5.3 Функція fcntl
- •2.5.4 Системні виклики truncate і ftruncate
- •2.6 Управління каталогами
- •2.6.1 Створення і видалення
- •2.6.2 Читання каталога
- •2.6.3 Зміна каталога
- •2.7 Управління посиланнями
- •2.7.1 Управління жорсткими посиланнями
- •2.7.2 Управління символічними посиланнями
- •2.7.3 Перейменування файлів і каталогів
- •3 Керування процесами ос unix
- •3.1 Процеси ос unix
- •3.2 Сисвизови створення процесів
- •3.3 Завершення процесу
- •3.4 Взаємодія процесів в ос unix
- •3.5 Сигнали
- •3.5.1 Поняття сигналу
- •3.5.2 Розробка оброблювачів сигналів
- •3.5.3 Генерація сигналів
- •3.5.4 Посилка сигналів іншим процесам
- •3.5.5 Блокування сигналів
- •3.5.6 Очікування сигналу
- •3.6 Трасування процесу.
- •3.7 Канали й fifo-Файли
- •3.7.1 Поняття
- •3.7.2 Створення каналу
- •3.7.3 Створення fifo-Файлів
- •3.8 Семафори
- •3.9 Повідомлення.
- •3.10 Поділювана пам'ять.
- •Література
- •Системне програмування Навчальний посібник
- •65082, Одеса, вул. Дворянська, 1/3
3.9 Повідомлення.
У межпроцессных взаємодіях дві команди працюють із повідомленнями:
msgsnd() - послати повідомлення,
msgrsv() - одержати повідомлення.
При посилці повідомлення визначається його тип і його текст.
Одержувач використовує тип повідомлення як критерій для його одержання. Якщо як критерій використовується нульовий тип повідомлення, то одержувач вибирає повідомлення в хронологічному порядку. Якщо одержувач не може знайти повідомлення бажаного типу, він виконує виклик sleep() до виявлення повідомлення потрібного типу. У такий спосіб повідомлення можна використовувати для синхронізації процесів.
Повідомлення формуються у вигляді блоків, структура яких містить текст самого повідомлення і його тип. Довжина повідомлення може бути визначена самим користувачем. Буферы, що містять СТРУКТУРИ ПОВІДОМЛЕНЬ, відзначаються як MESSAGE QUEUE HEADER (КОЛЕКТОР ЧЕРГИ ПОВІДОМЛЕНЬ).
ЧЕРГА ПОВІДОМЛЕНЬ - одновходовой список колекторів. Пам'ять, потребнаядля структури собщений, управляється як звичайне ОЗУ через таблицю MSGMAP, для якої простір виділяється й звільняється через malloc() і mfree() відповідно. Посилка собщения відбувається в кілька кроків:
воно повинне бути приєднане до вільного колектора черги повідомлень;
необхідно приєднати пространсрво ОЗУ, необхідне для самого тексту повідомлення;
Примітка: простору, описані в п.п. 1 і 2 "зчіплюються" з раніше прийнятою інформацією.
знову створений колектор повідомлення приєднується до черги повідомлень.
Одержання повідомлення може відбуватися або відповідно до його ипом, або в хронологічному порядку (FIFO). Відразу після одержання повідомлення відповідний колектор від'єднується, займане повідомленням простір від'єднується, а займане колектором простір звільняється.
3.10 Поділювана пам'ять.
Це загальний простір, куди будь-який процес може помістити інформацію або звідки він може неї взяти. Поділювана пам'ять розглядається як простір даних для процесу.
При видачі системного виклику shmget() приєднується фізичний сегмент поділюваної пам'яті й видається його ідентифікатор процесу.
Shmat() не приєднує пам'ять, а прив'язує її до вже наявного сегмента й потім відповідний віртуальний сегмент пам'яті прив'язує до раніше подсоединенномусегменту. Якщо раніше віртуальна адреса не була визначена, то використовується перша вільна адреса, що випливає за сегментом даних. Приймаються запобіжні заходи при визначенні адреси поділюваної пам'яті, щоб магазин не ріс надмірно. Дозвіл "тільки читати" або "тільки писати" приймається на межпроцессной базі.
Різні процеси можуть використовувати сегмент поділюваної пам'яті протягом свого існування. Коли процес завершується, вылается системний виклик shmdt() для від'єднання процесу від простору поділюваної пам'яті й сегмент фізично вилучається в процесу.
Література
Дансмур М. Операційна система UNIX і програмування мовою Си. / Дансмур М., Дейвис Г. - М.: Радіо й зв'язок, 1989. - 192 с.
Рейчард К. Linux: довідник / К. Рейчард, П. Фолькердинг. - Спб.: Питер Кін, 1999. - 480 с.
Робачевский А.М. Операційна система UNIX. - Спб.: BHV-Санкт-Петербург, 1997. - 528 с.
Стивенс У. UNIX: взаємодія процесів. - Спб.: Питер, 2003. - 576 с.
Теренс Чан Системне програмування на З++ для UNIX. К.: Видавнича група BHV, 1997. - 592 с.
Хэвиленд К., Грэй Д., Салама Б. Системне програмування в UNIX. Керівництво програміста. - М., ДМК Пресс, 2000. - 368 с.
Бовет Д., Чезати М. Ядро Linux. - Бхв-Петербург, 2007. - 1104 с.
В. Белунцов. Самовчитель користувача Linux. - Москва: "ДЕСС КОМУ", 2003. - 512 с.
Колисниченко Д.Н., Аллен П. В. Linux: Повне керівництво. - М., Наука й техніка, 2007 р. - 784 с.
Курячий Г. В., Маслинский К. А. Операційна система Linux. Курс лекцій. Навчальний посібник. - Інтернет-Університет інформаційних технологій, 2005. - 392 с.
Митчелл М. і ін. Програмування для Linux. Професійний підхід. - М., Діалектика, 2002 - 288 с.
Брюс Моли. Unix/Linux. Теорія й практика програмування. - М., Кудиц-Образ, 2004. - 576 с.
Роббинс А. Linux: програмування в прикладах. - М., Кудиц-Образ, 2005. - 656 с.
Секунов Н. Ю. Програмування на З++ в Linux. - Спб., Бхв-Петербург, 2003. - 354 с.
Скотт Максвелл. Ядро Linux у коментарях. - DiaSoft, 2000. - 488с.
Стивенс У.Р. UNIX: розробка мережних додатків. - Спб., Питер, 2007. - 1039 с.
Уолтон Ш. Створення мережних додатків у середовищі Linux. Керівництво розроблювача. - - М., Вільямс, 2001.- 464 c.
Жуковецька С.Л.