Лістинг 6.1b. Програма 2 (06-1b.с) для ілюстрації роботи з пам'яттю, що розділяється 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лістинг 6.1b. Програма 2 (06-1b.с) для ілюстрації роботи з пам'яттю, що розділяється



Ці програми дуже схожі одна на одну і використовують пам'ять, що розділяється, для зберігання числа запусків кожної з програм і їх суми. В пам'яті, що розділяється, розміщується масив з трьох цілих чисел. Перший елемент масиву використовується як лічильник для програми 1, другий елемент – для програми 2, третій елемент – для обох програм сумарно. Додатковий нюанс в програмах виникає через необхідність ініціалізації елементів масиву при створенні пам'яті, що розділяється. Для цього нам потрібно, щоб програми могли розрізняти випадок, коли вони створили її, і випадок, коли вона вже існувала. Ми добиваємося відмінності, використовуючи спочатку системний виклик shmget() з прапорами IPC_CREAT і IPC_EXCL. Якщо виклик завершується нормально, то ми створили пам'ять, що розділяється. Якщо виклик завершується з констатацією помилки і значення змінної errno дорівнює EEXIST, то, значить, пам'ять, що розділяється, вже існує, і ми можемо одержати її IPC дескриптор, застосовуючи той же самий виклик з нульовим значенням прапорів. Наберіть програми, збережіть під іменами 06-1а.с і 06-1b.c відповідно, відкомпілюйте їх і запустіть кілька разів. Проаналізуйте одержані результати.

Команди ipcs і ipcrm

Як ми бачили з попереднього прикладу, створена область пам'яті, що розділяється, зберігається в операційній системі навіть тоді, коли немає жодного процесу, що включає її в свій адресний простір. З одного боку, це має певні переваги, оскільки не вимагає одночасного існування взаємодіючих процесів, з другого боку, може заподіювати істотні незручності. Припустимо, що попередні програми ми хочемо використовувати так, щоб підраховувати кількість запусків протягом однієї, поточної, сеансу роботи в системі. Проте в створеному сегменті пам'яті, що розділяється, залишається інформація від попереднього сеансу, і програми видаватимуть загальну кількість запусків за весь час роботи з моменту завантаження операційної системи. Можна б було створювати для нового сеансу новий сегмент пам'яті, що розділяється, але кількість ресурсів в системі не безмежна. Нас рятує те, що існують способи видаляти невживані ресурси System V IPC як за допомогою команд операційної системи, так і за допомогою системних викликів. Всі засоби System V IPC вимагають певних дій для звільнення займаних ресурсів після закінчення взаємодії процесів. Для того, щоб видаляти ресурси System V IPC з командного рядка, нам знадобляться дві команди, ipcs і ipcrm.

Команда ipcs видає інформацію про всі засоби System V IPC, існуючі в системі, для яких користувач володіє правами на читання: областях пам'яті, що розділяється, семафорах і чергах повідомлень.

Команда ipcs

ipcs [-asmq] [-tclup]ipcs [-smq] -i idipcs -h

Опис команди

Команда ipcs призначена для отримання інформації про засоби System V IPC, до яких користувач має право доступу на читання.

Опція -i дозволяє вказати ідентифікатор ресурсів. Видаватиметься тільки інформація для ресурсів, що мають цей ідентифікатор.

Види IPC ресурсів можуть бути задані за допомогою наступних опцій:

· –s для семафорів;

· -m для сегментів пам'яті, що розділяється;

· -q для черг повідомлень;

· -a для всіх ресурсів (за умовчанням).

Опції [-tclup] використовуються для зміни складу вихідної інформації. За умовчанням для кожного засобу виводяться його ключ, ідентифікатор IPC, ідентифікатор власника, права доступу і ряд інших характеристик. Вживання опцій дозволяє вивести:

· -t часи здійснення останніх операцій над засобами IPC;

· -p ідентифікатори процесу, що створив ресурс, і процесу, що вчинив над ним останню операцію;

· -c ідентифікатори користувача і групи для творця ресурсу і його власника;

· -l системні обмеження для засобів System V IPC;

· -u загальний стан IPC ресурсів в системі.

Опція -h використовується для отримання короткої довідкової інформації.

Зі всього різноманіття інформації, що виводиться, нас цікавитимуть тільки IPC ідентифікатори для засобів, створених вами. Ці ідентифікатори використовуватимуться в команді ipcrm, що дозволяє видалити необхідний ресурс з системи. Для видалення сегменту пам'яті, що розділяється, ця команда має вигляд:

ipcrm shm <IPC ідентифікатор>

Команда ipcrm

ipcrm [shm | msg | sem] id

Опис команди

Команда ipcrm призначена для видалення ресурсу System V IPC з операційної системи. Параметр id задає IPC ідентифікатор для ресурсу, що видаляється, параметр shm використовується для сегментів пам'яті, що розділяється, параметр msg – для черг повідомлень, параметр sem – для семафорів.

Якщо поведінка програм, що використовують засоби System V IPC, базується на припущенні, що ці засоби були створені при їх роботі, не забувайте перед їх запуском видаляти вже існуючі ресурси.



Поделиться:


Последнее изменение этой страницы: 2016-12-12; просмотров: 153; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.93.221 (0.004 с.)