Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лістинг 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; просмотров: 224; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.220 (0.007 с.) |