Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Простір імен. Адресація в System V IPC. Функція ftok()
Всі засоби зв'язку з System V IPC, як і вже розглянуті нами pipe і FIFO, є засобами зв'язку з непрямою адресацією. Як ми встановили раніше, для організації взаємодії неспоріднених процесів за допомогою засобу зв'язку з непрямою адресацією необхідно, щоб цей засіб зв'язку мав ім'я. Відсутність імен у pip'ів дозволяє процесам одержувати інформацію про розташування pip'а в системі і його стан тільки через споріднені зв'язки. Наявність асоційованого імені у FIFO – імені спеціалізованого файлу у файловій системі – дозволяє неспорідненим процесам одержувати цю інформацію через інтерфейс файлової системи. Безліч всіх можливих імен для об'єктів якого-небудь вигляду прийнято називати простором імен відповідного виду об'єктів. Для FIFO простором імен є безліч всіх допустимих імен файлів у файловій системі. Для всіх об'єктів з System V IPC таким простором імен є безліч значень деякого цілочисельного типу даних – key_t – ключа. Причому програмісту не дозволено напряму привласнювати значення ключа, це значення задається опосередковано: через комбінацію імені якого-небудь файлу, вже існуючого у файловій системі, і невеликого цілого числа – наприклад, номеру екземпляра засобу зв'язку. Такий спосіб отримання значення ключа пов'язаний з двома міркуваннями: · Якщо дозволити програмістам самим привласнювати значення ключа для ідентифікації засобів зв'язку, то не виключено, що два програмісти випадково скористаються одним і тим же значенням, не підозрюючи про це. Тоді їх процеси будуть несанкціоновано взаємодіяти через один і той же засіб комунікації, що може привести до нестандартної поведінки цих процесів. Тому основним компонентом значення ключа є перетворене в числове значення повне ім'я деякого файлу, доступ до якого на читання дозволений процесу. Кожний програміст має нагоду використовувати для цієї мети свій специфічний файл, наприклад виконуваний файл, пов'язаний з одним з взаємодіючих процесів. Слід зазначити, що перетворення з текстового імені файлу в число ґрунтується на розташуванні вказаного файлу на жорсткому диску або іншому фізичному носії. Тому для утворення ключа слід застосовувати файли, що не міняють свого положення протягом часу організації взаємодії процесів;
· Другий компонент значення ключа використовується для того, щоб дозволити програмісту пов'язати з одним і тим же ім'ям файлу більше одного екземпляра кожного засобу зв'язку. Як такий компонент можна задавати порядковий номер відповідного екземпляра. Отримання значення ключа з двох компонентів здійснюється функцією ftok(). Функція для генерації ключа System V IPC #include <sys/types.h>#include <sys/ipc.h>key_t ftok(char *pathname, char proj);Опис функції Функція ftok служить для перетворення імені існуючого файлу і невеликого цілого числа, наприклад, порядкового номера екземпляра засобів зв'язку, в ключ System V IPC. Параметр pathname повинен бути покажчиком на ім'я існуючого файлу, доступного для процесу, що викликає функцію. Параметр proj – це невелике ціле число, що характеризує екземпляр засобу зв'язку. У разі неможливості генерації ключа функція повертає негативне значення, інакше вона повертає значення ключа, що згенерувався. Тип даних key_t звичайно є 32-бітовим цілим. Ще раз підкреслимо три важливі моменти, зв'язані з використанням імені файлу для отримання ключа. По-перше, необхідно указувати ім'я файлу, який вже існує у файловій системі і для якого процес має право доступу на читання (не плутайте із завданням імені файлу при створенні FIFO, де указувалося ім'я для знов створюваного спеціального файлу). По-друге, вказаний файл повинен зберігати своє положення на диску до тих пір, поки всі процеси, що беруть участь у взаємодії, не одержать ключ System V IPC. По-третє, завдання імені файлу, як одного з компонентів для отримання ключа, у жодному випадку не означає, що інформація, передавана за допомогою асоційованого засобу зв'язку, розташовуватиметься в цьому файлі. Інформація зберігатиметься усередині адресного простору операційної системи, а задане ім'я файлу лише дозволяє різним процесам згенерувати ідентичні ключі. Дескриптори System V IPC Ми говорили, що інформацію про потоки уведення-виведення, з якими має справу поточний процес, зокрема про pip'и і FIFO, операційна система зберігає в таблиці відкритих файлів процесу. Системні виклики, що здійснюють операції над потоком, використовують як параметр індекс елемента таблиці відкритих файлів, відповідного потоку, – файловий дескриптор. Використовування файлових дескрипторів для ідентифікації потоків усередині процесу дозволяє застосовувати до них вже існуючий інтерфейс для роботи з файлами, але в той же час приводить до автоматичного закриття потоків при завершенні процесу. Цим, зокрема, пояснюється один з перерахованих вище недоліків потокової передачі інформації.
При реалізації компонентів System V IPC була прийнята інша концепція. Ядро операційної системи зберігає інформацію про всі засоби System V IPC, що використовуються в системі, зовні контексту призначених для користувача процесів. При створенні нового засобу зв'язку або отриманні доступу до вже існуючого, процес одержує ненегативне ціле число – дескриптор (ідентифікатор) цього засобу зв'язку, який однозначно ідентифікує його у всій обчислювальній системі. Цей дескриптор повинен передаватися як параметр всім системним викликам, що здійснюють подальші операції над відповідним засобом System V IPC. Подібна концепція дозволяє усунути один з найістотніших недоліків, властивих потоковим засобам зв'язку – вимога одночасного існування взаємодіючих процесів, але в той же час вимагає підвищеної обережності для того, щоб процес, одержуючий інформацію, не прийняв замість нових старі дані, випадково залишені в механізмі комунікації.
|
||||||
Последнее изменение этой страницы: 2016-12-12; просмотров: 161; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.31.247 (0.006 с.) |