ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Механізми Взаємодія між процесами в операційній системі Unix
         

     

    Інформатика, програмування

    Механізми Взаємодія між процесами в операційній системі Unix

    Сергій Кузнецов

    виникли проблеми

    Надмірна набір системних засобів, призначених для забезпечення можливості взаємодії та синхронізації процесів, які не обов'язково пов'язані ставленням спорідненості

    IPC - Inter-Process Communication Facilities

    з появою UNIX System V Release 4.0 всі ці кошти були узаконені і увійшли до фактичний стандарт ОС UNIX сучасного зразка

    в різних варіантах системи кошти IPC реалізуються по-різному

    ефективність реалізації розрізняється

    ускладнюється розробка мобільних асинхронних програмних комплексів

    Пакет засобів IPC

    UNIX System V Release 3.0

    кошти, забезпечують можливість наявності загальної пам'яті між процесами (сегменти розділяється пам'яті - shared memory segments)

    кошти, забезпечують можливість синхронізації процесів при доступі до спільно використовуваних ресурсів, наприклад, до поділюваного пам'яті (семафори - semaphores)

    кошти, забезпечують можливість посилки процесом повідомлень іншому безпідставного процесу (черги повідомлень - message queues)

    Загальні властивості всіх трьох механізмів:

    для кожного механізму підтримується загальносистемна таблиця, елементи якої описують всіх існуючих в даний момент представників механізму (конкретні сегменти, семафори або черги повідомлень)

    елемент таблиці містить деякий числовий ключ, який є вибраним користувачем ім'ям представника відповідного механізму

    процес, бажаючий почати користуватися одним з механізмів, звертається до системи з системним викликом із сімейства "get", у відповідь параметром є числовий дескриптор

    ключ IPC_PRIVATE

    ключ IPC_CREAT

    захист доступу грунтується на тих же принципах, що і захист доступу до файлів

    Колективна пам'ять

    shmget створює новий сегмент розділяється пам'яті або знаходить існуючий сегмент з тим ж ключем

    shmat підключає сегмент із зазначеним дескриптором до віртуальної пам'яті звертається процесу

    shmdt відключає від віртуальної пам'яті раніше підключений до неї сегмент із зазначеним віртуальним адресою початку

    shmctl служить для управління параметрами, пов'язаними з існуючим сегментом

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

    shmid = shmget (key, size, flag);

    size визначає бажаний розмір сегмента в байтах

    якщо в таблиці розділяється пам'яті знаходиться елемент, що містить заданий ключ, і права доступу не суперечать поточним характеристиками процесу, то значенням системного виклику є дескриптор існуючого сегмента

    реальний розмір сегмента можна дізнатися за допомогою системного виклику shmctl

    інакше створюється новий сегмент з розміром не менше встановленого в системі мінімального розміру сегмента розділяється пам'яті і не більше встановленого максимального розміру

    створення сегмента не означає негайного виділення під нього основної пам'яті

    відкладається до виконання першого системного виклику підключення сегмента до віртуальної пам'яті деякого процесу

    при виконання останнього системного виклику відключення сегмента від віртуальної пам'яті відповідна основна пам'ять звільняється

    virtaddr = shmat (id, addr, flags);

    id - Це раніше отриманий дескриптор сегмента

    addr - Бажаний процесом віртуальну адресу, який повинен відповідати початку сегмента у віртуальній пам'яті

    virtaddr - Реальний віртуальний адреса початку сегмента

    НЕ обов'язково таке саме, як прямого параметра addr

    якщо addr == 0, ядро вибирає найбільш зручний віртуальну адресу початку сегмента

    shmdt (addr);

    addr - Віртуальний адреса початку сегменту у віртуальній пам'яті, раніше отриманий від системного виклику shmat

    shmctl (id, cmd, shsstatbuf);

    cmd ідентифікує потрібне конкретна дія

    важлива функція знищення сегмента розділяється пам'яті

    Семафори

    Узагальнення класичного механізму семафорів загального вигляду Діекстри

    Доцільність узагальнення сумнівна

    Зазвичай використовувався полегшений варіант двійкових семафорів

    Відомий алгоритм реалізації семафорів загального вигляду на основі двійкових

    Семафор в ОС UNIX:

    значення семафора

    ідентифікатор процесу, який хронологічно останнім працював з семафором

    число процесів, що очікують збільшення значення семафора

    число процесів, що очікують нульового значення семафора

    Три системних виклику:

    semget для створення і отримання доступу до набору семафорів

    semop для маніпулювання значеннями семафорів

    semctl для виконання керуючих операцій над набором семафорів

    id = semget (key, count, flag);

    key, flag і id - звичайний сенс

    count - Число семафорів в наборі семафорів, що володіють одним і тим же ключем

    індивідуальний семафор ідентифікується дескриптором набору семафорів і номером семафора в наборі

    якщо набір семафорів з вказаним ключем вже існує, то число семафорів у групі можна дізнатися за допомогою системного виклику semctl

    oldval = semop (id, oplist, count);

    id - Дескриптор групи семафорів

    oplist - Масив описувачів операцій над семафора групи

    count - Розмір цього масиву

    повертається значення останнього обробленого семафора

    Елемент масиву oplist:

    номер семафора у вказаному наборі семафорів

    операція

    прапори

    Якщо перевірка прав доступу проходить нормально

    зазначені в масиві oplist номера семафорів не виходять за межі загального розміру набору семафорів

    для кожного елемента масиву oplist значення семафора змінюється відповідно до значенням поля "операція"

    Значення поля операції позитивно

    значення семафора збільшується на одиницю

    все процеси, які очікують збільшення значення семафора, активізуються (пробуджуються)

    Значення поля операції дорівнює нулю

    якщо значення семафора дорівнює нулю, вибирається наступний елемент масиву oplist

    інакше число процесів, що очікують нульового значення семафора, збільшується на одиницю

    звернувся процес переводиться в стан очікування (присипляються)

    Значення поля операції негативно

    (1) його абсолютне значення менше або дорівнює значенню семафора

    це від'ємне значення додається до значення семафора

    якщо значення семафора стало нульовим, то ядро активізує всі процеси, які очікують нульового значення цього семафора

    (2) значення семафора менше абсолютної величини поля операції

    число процесів, що очікують збільшення значення семафора збільшується на одиницю

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

    Прагнення домогтися можливості уникати безвихідних ситуацій

    Системний виклик semop виконується як атомарна операція

    Прапор IPC_NOWAIT змушує ядро ОС UNIX не блокувати поточний процес

    лише повідомляти у відповідних параметрах про виникнення ситуації, що призвела б до блокування процесу

    semctl (id, number, cmd, arg);

    id - Це дескриптор групи семафорів

    number - Номер семафора в групі

    cmd - Код операції

    arg - Покажчик на структуру, вміст якої інтерпретується в залежності від операції

    Можна знищити індивідуальний семафор у зазначеній групі

    Черги повідомлень

    Чотири системних виклику:

    msgget для утворення нової черги повідомлень або отримання дескриптора існуючої черги

    msgsnd для посилки повідомлення (його постановки в чергу повідомлень)

    msgrcv для прийому повідомлення (вибірки повідомлення з черги)

    msgctl для виконання керуючих дій

    msgqid = Msgget (key, flag);

    Повідомлення зберігаються у вигляді зв'язного списку

    Декскріптор черги повідомлень - індекс у масиві заголовків черг повідомлень

    В заголовку черги зберігаються:

    покажчики на перше і останнє повідомлення в цій черзі

    число повідомлень

    загальний розмір в байтах повідомлень, що знаходяться в черзі

    ідентифікатори процесів, які останніми послали або прийняли повідомлення через дану чергу

    тимчасові мітки останніх виконаних операцій msgsnd, msgrsv і msgctl

    Структури даних, що використовуються для організації черг повідомлень

    msgsnd (msgqid, msg, count, flag);

    msg - Це покажчик на структуру, яка містить цілочисельний тип повідомлення і символьний масив

    count - Задає розмір повідомлення в байтах

    flag визначає дії ядра при виході за межі допустимих розмірів внутрішньої буферної пам'яті

    Умови успішної постановки повідомлення в чергу:

    процес повинен мати право на запис у чергу

    довжина повідомлення не повинна перевищувати верхню межу

    загальна довжина повідомлень не повинна перевищувати встановленої межі

    тип повідомлення повинен бути позитивним цілим числом

    Процес продовжує своє виконання

    Ядро активізує (будить) всі процеси, які очікують надходження повідомлень з черги

    перевищується верхня межа сумарної довжини повідомлень

    звернувся процес відкладається до розвантаження черги

    але є прапор IPC_NOWAIT (як для семафорів)

    count = msgrcv (id, msg, maxcount, type, flag);

    msg - Покажчик на структуру даних в адресному просторі користувача для розміщення прийнятого повідомлення

    maxcount - Розмір області даних (масиву байтів) у структурі msg

    type специфікує тип повідомлення, яке бажано прийняти

    flag вказує ядра, що слід зробити, якщо у зазначеній черги повідомлень немає повідомлення з вказаним типом

    count - Реальне число байтів, переданих користувачеві

    Значенням параметра type є нуль

    вибирається перше повідомлення

    копіюється в задану структуру для користувача даних

    процеси, відкладені через переповнення черги повідомлень, активізуються

    якщо значення параметра maxcount виявляється менше реального розміру повідомлення, ядро не видаляє повідомлення з черги і повертає код помилки

    якщо задано прапор MSG_NOERROR, то вибірка повідомлення виробляється, і в буфер користувача переписуються перший maxcount байтів повідомлення

    Значення type є позитивне ціле число

    вибирається перше повідомлення з таким же типом

    Значення type є негативне ціле число

    вибирається перше повідомлення, значення якого типу менше або рівне абсолютним значенням type

    В черги відсутні повідомлення, відповідні специфікації type

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

    але є прапор IPC_NOWAIT

    msgctl (id, cmd, mstatbuf);

    опитування стану описувача черги повідомлень

    зміна його стану

    знищення черги повідомлень

    Програмні канали

    Створення неіменованного програмного каналу

    pipe (fdptr);

    fdptr - Це покажчик масиву з двох цілих чисел для розміщення дескриптора для читання з програмного каналу (за допомогою read) та запису в програмний канал (з допомогою write)

    звичайні дескриптори файлів

    два елемента таблиці відкритих файлів процесу

    Створення іменованих програмних каналів (або отримання доступу до існуючих)

    Звичайний системний виклик open

    якщо канал відкривається на запис, і ні один процес не відкрив його для читання, то процес блокується до тих пір, поки деякий процес не відкриє цей канал для читання

    аналогічно обробляється відкриття для читання

    є прапор NO_DELAY

    Запис і читання: read і write

    при запису дані містяться в початок каналу

    при читанні вибираються з кінця каналу

    можливі відкладання процесів

    Закінчення роботи процесу: close

    при виконання останнього закриття каналу за записом всі процеси, які очікують читання з програмного каналу, активізуються з поверненням коду помилки з системної дзвінка

    Програмні гнізда (sockets)

    Підтримуваний ядром механізм, що приховує особливості мережевої середовища і що дозволяє одноманітно взаємодіяти процесів

    що виконуються на одному комп'ютері

    в межах однієї локальної мережі

    рознесеним на різні комп'ютери територіально розподіленої мережі

    Перше рішення:

    UNIX BSD 4.1 у 1982 р.

    Три складових:

    компонент рівня програмних гнізд (незалежний від мережевого протоколу і середовища передачі даних)

    компонентом протокольного рівня (незалежний від середовища передачі даних)

    компонентом рівня управління мережним пристроєм

    Одна з можливих конфігурацій програмних гнізд

    Допустимі комбінації протоколів і драйверів задаються при конфігурації системи

    під час роботи системи змінювати не можна

    За духу організація програмних гнізд близька до ідеї потоків

    Але менш гнучка схема

    НЕ допускає зміни конфігурації "на ходу"

    Взаємодія процесів засноване на моделі "клієнт-сервер"

    процес-сервер "слухає (listens)" своє програмне гніздо

    процес-клієнт намагається спілкуватися з процесом-сервером через інше програмне гніздо

    ядро підтримує внутрішні з'єднання і маршрутизацію даних від клієнта до сервера

    Програмні гнізда із загальними комунікаційними властивостями, такими як спосіб іменування та протокольний формат адреси, групуються у домени

    "домен системи UNIX "для процесів, які взаємодіють через програмні гнізда в межах одного комп'ютера

    "домен Internet "для процесів, які взаємодіють у мережі відповідно до сімейством протоколів TCP/IP

    Два типу програмних гнізд

    з віртуальним з'єднанням (stream sockets)

    дейтаграмним гнізда (datagram sockets)

    Віртуальні з'єднання:

    передача даних від клієнта до сервера у вигляді безперервного потоку байтів з гарантією доставки

    до початку передачі даних повинне бути встановлене з'єднання

    дейтаграмним програмні гнізда:

    НЕ гарантують абсолютної надійною, послідовною доставки повідомлень і відсутності дублікатів дейтаграм

    НЕ потрібне попереднє встановлення з'єднань

    За замовчуванням забезпечується відповідний протокол для кожної допустимої комбінації "домен-гніздо"

    TCP для віртуальних з'єднань

    UDP для дейтаграмним способу комунікацій

    Створення нового програмного гнізда:

    sd = Socket (domain, type, protocol);

    domain - Домен гнізда

    type - Тип (з віртуальним з'єднанням або дейтаграмним)

    protocol - Бажаний мережевий протокол

    sd - Дескриптор програмного гнізда

    Закриття (знищення) гнізда

    close (sd)

    Зв'язування раніше створеного програмного гнізда з ім'ям:

    bind (sd, socknm, socknlen);

    sd - Дескриптор раніше створеного програмного гнізда

    socknm - Адреса структури, яка містить ім'я (ідентифікатор) гнізда, відповідне вимогам домену даного гнізда й використовуваного протоколу

    для домену системи UNIX ім'я є ім'ям об'єкту у файловій системі

    при створення програмного гнізда створюється файл

    socknlen - Довжина в байтах структури socknm

    Запит зв'язку з існуючим програмним гніздом з боку процесу-клієнта:

    connect (sd, socknm, socknlen);

    сенс параметрів, як у функції bind

    ім'я програмного гнізда на іншій стороні комунікаційного каналу

    у гнізда з дескриптором sd і у гнізда з ім'ям socknm повинні бути однакові домен і протокол

    якщо тип гнізда з дескриптором sd - дейтаграмним, то connect служить для системи інформування про адресу призначення пакетів, які в подальшому будуть надсилатися за допомогою функції send

    Інформування про те, що процес-сервер планує встановлення віртуальних з'єднань через вказане гніздо:

    listen (sd, qlength);

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

    Вибірка процесом-сервером чергового запиту на встановлення з'єднання з зазначеним програмним гніздом служить функція accept:

    nsd = accept (sd, address, addrlen);

    sd - Дескриптор існуючого програмного гнізда, для якого раніше була виконана функція listen

    address - Масив даних, до якого повинна бути поміщена інформація, що характеризує ім'я програмного гнізда клієнта

    addrlen - Адреса, за якою знаходиться довжина масиву address

    виконання функції призводить до встановлення віртуального з'єднання

    nsd - Новий дескриптор програмного гнізда, який повинен використовуватися при роботі через дане з'єднання

    по адресою addrlen пом?? тається реальний розмір масиву даних, які записані по адресою address

    Передача і отримання даних через програмні гнізда з встановленим віртуальним з'єднанням:

    count = send (sd, msg, length, flags);

    count = recv (sd, buf, length, flags);

    В send:

    msg вказує на буфер з даними, які потрібно послати

    length - Довжина цього буфера

    flags == MSG_OOB позачергова посилка даних

    В recv:

    buf вказує на буфер, в який слід помістити приймаються дані

    length - Максимальна довжина цього буфера

    flags == MSG_PEEK перепис повідомлення в користувальницький буфер без його видалення з системних буферів

    Замість send і recv можна використовувати read і write

    виконуються аналогічно send і recv

    Для здійснення та отримання повідомлень в дейтаграмним режимі:

    count = sendto (sd, msg, length, flags, socknm, socknlen);

    count = recvfrom (sd, buf, length, flags, socknm, socknlen);

    сенс параметрів sd, msg, buf і lenght аналогічний змістом однойменних параметрів функцій send і recv

    socknm і socknlen функції sendto задають ім'я програмного гнізда, в яке надсилається повідомлення

    можуть бути опущені, якщо до цього викликалася функція connect

    параметри socknm і socknlen функції recvfrom дозволяють серверу отримати ім'я того, хто вислав повідомлення процесу-клієнта

    Негайна ліквідація встановленого з'єднання:

    shutdown (sd, mode);

    негайно зупинити комунікації

    з боку посилає процесу

    з приймаючої сторони процесу

    з обох сторін

    в залежно від значення параметра mode

    shutdown відрізняються від close:

    виконання close останньою "пригальмовується" до закінчення спроб системи доставити вже відправлені повідомлення

    shutdown розриває з'єднання, але не ліквідує дескриптори раніше з'єднаних гнізд

    для ліквідації потрібно виклик close

    Потоки (streams)

    UNIX System V

    бібліотека TLI (Transport Layer Interface)

    транспортний сервіс на основі стеку протоколів TCP/IP

    Дозволяють організовувати різноманітні види комунікації процесів

    Різноманіття і складність набору функцій бібліотеки TLI

    Належить до теми реалізацій Семирівнева моделі ISO/OSI

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://www.citforum.ru/

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status