Переваги і недоліки потокового обміну даними.



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


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



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


ЗНАЕТЕ ЛИ ВЫ?

Переваги і недоліки потокового обміну даними.



Практичне заняття 4

Засоби System V IPC. Організація роботи з пам'яттю, що розділяється, в UNIX. Поняття ниток виконання (thread): версія для друку і PDA

Мета: Розглянути переваги і недоліки потокового обміну даними. Ознайомитися на практиціз наступними поняттями та функціями: поняття System V IPC, простір імен, адресація в System V IPC, функція ftok(), дескриптори System V IPC, пам'ять, що розділяється, в UNIX, системні виклики shmget(), shmat(), shmdt(), команди ipc і ipcrm. Здійснити практичне використання системного виклику shmctl() для звільнення ресурсу. Розглянути необхідність синхронізації процесів і ниток виконання, що використовують загальну пам'ять.

Переваги і недоліки потокового обміну даними.

На попередньому семінарі ми познайомилися з механізмами, що забезпечують потокову передачу даних між процесами в операційній системі UNIX, а саме з pip'ами і FIFO. Потокові механізми достатньо прості в реалізації і зручні для використовування, але мають ряд істотних недоліків:

· Операції читання і запису не аналізують вміст передаваних даних. Процес, що прочитав 20 байт з потоку, не може сказати, чи були вони записані одним процесом або декількома, чи записувалися вони за один раз або було, наприклад, виконано 4 операції запису по 5 байт. Дані в потоці ніяк не інтерпретуються системою. Якщо потрібна яка-небудь інтерпретація даних, то передаючий і приймаючий процеси повинні наперед погоджувати свої дії і уміти здійснювати її самостійно.

· Для передачі інформації від одного процесу до іншого потрібно, як мінімум, дві операції копіювання даних: перший раз – з адресного простору передаючого процесу в системний буфер, другий раз – з системного буфера в адресний простір приймаючого процесу.

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

Поняття про System V IPC

Вказані вище недоліки потоків даних привели до розробки інших механізмів передачі інформації між процесами. Частина цих механізмів, що вперше з'явилися в UNIX System V і згодом що перекочували звідти практично у всі сучасні версії операційної системи UNIX, одержала загальну назву System V IPC (IPC – скорочення від interprocess communications). До групи System V IPC входять: черги повідомлень, пам'ять і семафори, що розділяється. Ці засоби організації взаємодії процесів зв'язані не тільки спільністю походження, але і володіють схожим інтерфейсом для виконання подібних операцій, наприклад, для виділення і звільнення відповідного ресурсу в системі. Ми розглядатимемо їх в порядку від менш семантично навантажених з погляду операційної системи до більш семантично навантаженим. Іншими словами, чим пізніше ми почнемо займатися яким-небудь механізмом з System V IPC, тим більше дій по інтерпретації передаваної інформації доведеться виконувати операційній системі при використовуванні цього механізму.

Отримання значення ключа з двох компонентів здійснюється функцією 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.

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

Системний виклик shmget()

#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h> int shmget(key_t key, int size int shmflg);

Опис системного виклику

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

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

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

Параметр shmflg – прапори – грає роль тільки при створенні нового сегменту пам'яті, що розділяється, і визначає права різних користувачів при доступі до сегменту, а також необхідність створення нового сегменту і поведінка системного виклику при спробі створення. Він є деякою комбінацією (за допомогою операції побітове або – "|") наступних приречених значень і вісімкових прав доступу:

· IPC_CREAT – якщо сегменту для вказаного ключа не існує, він повинен бути створений;

· IPC_EXCL – застосовується спільно з прапором IPC_CREAT. При сумісному їх використовуванні і існуванні сегменту з вказаним ключем, доступ до сегменту не проводиться і констатується помилкова ситуація, при цьому змінна errno, описана у файлі <errno.h>, прийме значення EEXIST;

· 0400 – дозволено читання для користувача, що створив сегмент;

· 0200 – дозволений запис для користувача, що створив сегмент;

· 0040 – дозволено читання для групи користувача, що створив сегмент;

· 0020 – дозволений запис для групи користувача, що створив сегмент;

· 0004 – дозволено читання для всієї решти користувачів;

· 0002 – дозволений запис для всієї решти користувачів.

Значення, що повертається

Системний виклик повертає значення дескриптора System V IPC для сегменту пам'яті при нормальному завершенні, що розділяється, і значення -1 при виникненні помилки.

Доступ до створеної області пам'яті, що розділяється, надалі забезпечується її дескриптором, який поверне системний виклик shmget(). Доступ до вже існуючої області також може здійснюватися двома способами:

· Якщо ми знаємо її ключ, то, використовуючи виклик shmget(),можем одержати її дескриптор. В цьому випадку не можна указувати як складова частина прапорів прапор IPC_EXCL, а значення ключа, природно, не може бути IPC_PRIVATE. Права доступу ігноруються, а розмір області повинен співпадати з розміром, вказаним при її створенні.

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

Після отримання дескриптора необхідно включити область пам'яті, що розділяється, в адресний простір поточного процесу. Це здійснюється за допомогою системного викликуshmat(). При нормальному завершенні він поверне адресу пам'яті, що розділяється, в адресному просторі поточного процесу. Подальший доступ до цієї пам'яті здійснюється за допомогою звичайних засобів мови програмування.

Системний виклик shmat()

#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>char *shmat(int shmid, char *shmaddr int shmflg);

Опис системного виклику

Системний виклик shmat призначений для включення області пам'яті, що розділяється, в адресний простір поточного процесу. Даний опис не є повним описом системного виклику, а обмежується рамками поточного курсу. Для повного опису звертайтеся до UNIX Manual.

Параметр shmid є дескриптором System V IPC для сегменту пам'яті, що розділяється, тобто значенням, яке повернув системний виклик shmget() при створенні сегменту або при його пошуку по ключу.

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

Параметр shmflg в нашому курсі може приймати тільки два значення: 0 – для здійснення операцій читання і запису над сегментом і SHM_RDONLY – якщо ми хочемо тільки читати з нього. При цьому процес повинен мати відповідні права доступу до сегменту.

Значення, що повертається

Системний виклик повертає адресу сегменту пам'яті в адресному просторі процесу при нормальному завершенні, що розділяється, і значення -1 при виникненні помилки.

Після закінчення використовування Після закінчення використовування пам'яті, що розділяється, процес може зменшити розмір свого адресного простору, виключивши з нього цю область за допомогою системного виклику shmdt(). Відзначимо, що як параметр системний виклик shmdt() вимагає адресу початку області пам'яті, що розділяється, в адресному просторі процесу, тобто значення, яке повернув системний виклик shmat(), тому дане значення слідує зберігати протягом всього часу використовування пам'яті, що розділяється.

Системний виклик shmdt()

#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>int shmdt(char *shmaddr);

Опис системного виклику

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

Параметр shmaddr є адресою сегменту пам’яті, що розділяється. е. значенням, яке повернув системний виклик shmat().

Значення, що повертається

Системний виклик повертає значення 0 при нормальному завершенні і значення -1 при виникненні помилки.

Команди ipcs і ipcrm

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

Команда 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, базується на припущенні, що ці засоби були створені при їх роботі, не забувайте перед їх запуском видаляти вже існуючі ресурси.

Системний виклик shmctl()

#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h> int shmctl(int shmid, int cmd struct shmid_ds *buf);

Опис системного виклику

Системний виклик shmctl призначений для отримання інформації про область пам'яті, зміни її атрибутів і видалення, що розділяється, з системи. Даний опис не є повним описом системного виклику, а обмежується рамками поточного курсу. Для вивчення повного опису звертайтеся до UNIX Manual.

В нашому курсі ми користуватимемося системним викликом shmctl тільки для видалення області пам'яті, що розділяється, з системи. Параметр shmid є дескриптором System V IPC для сегменту пам'яті, що розділяється, тобто значенням, яке повернув системний виклик shmget() при створенні сегменту або при його пошуку по ключу.

Як параметр cmd в рамках нашого курсу ми завжди передаватимемо значення IPC_RMID – команду для видалення сегменту пам'яті, що розділяється, із заданим ідентифікатором. Параметр buf для цієї команди не використовується, тому ми завжди підставлятимемо туди значення NULL.

Значення, що повертається

Системний виклик повертає значення 0 при нормальному завершенні і значення -1 при виникненні помилки.

Опис функції

Функція pthread_self повертає ідентифікатор поточної нитки виконання.

Тип даних pthread_t є синонімом для одного з цілочисельних типів мови З.

Створення і завершення thread'а. Функції pthread_create(), pthread_exit(), pthread_join()

Нитки виконання, як і традиційні процеси, можуть породжувати нитки-нащадки, правда, тільки усередині свого процесу. Кожний майбутній thread усередині програми повинен бути функцією з прототипом

void *thread(void *arg);

Параметр arg передається цій функції при створенні thread'a і може, до деякої міри, розглядатися як аналог параметрів функції main(). Значення, що повертається функцією, може інтерпретуватися як аналог інформації, яку батьківський процес може одержати після завершення процесу-дитини. Для створення нової нитки виконання застосовується функція pthread_create().

Опис функції

Функція pthread_create служить для створення нової нитки виконання (thread'а) всередині поточного процесу. Справжній опис не є повним описом функції, а служить тільки цілям даного курсу. Для вивчення повного опису звертайтеся до UNIX Manual.

Новий thread виконуватиме функцію start_routine з прототипом

void *start_routine(void *)

передаючи їй як аргумент параметр arg. Якщо вимагається передати більше одного параметра, вони збираються в структуру, і передається адреса цієї структури. Значення, що повертається функцією start_routine не повинне указувати на динамічний об'єкт даного thread'а.

Параметр attr служить для завдання різних атрибутів створюваного thread'а. Їх опис виходить за рамки нашого курсу, і ми завжди вважатимемо їх заданими за умовчанням, підставляючи як аргумент значення NULL.

Значення, що повертаються

При вдалому завершенні функція повертає значення 0 і поміщає ідентифікатор нової нитки виконання за адресою, на яку указує параметр thread. У разі помилки повертається позитивне значення (а не негативне, як в більшості системних викликів і функцій!), яке визначає код помилки, описаний у файлі <errno.h>. Значення системної змінної errno при цьому не встановлюється.

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

Важливою відмінністю цієї функції від більшості інших системних викликів і функцій є те, що у разі невдалого завершення вона повертає не негативне, а позитивне значення, яке визначає код помилки, описаний у файлі <errno.h>. Значення системної змінної errno при цьому не встановлюється. Результатом виконання цієї функції є поява в системі нової нитки виконання, яка виконуватиме функцію, асоційовану з thread'ом, передавши їй специфікований параметр, паралель з вже існуючими нитками виконання процесу.

Створений thread може завершити свою діяльність трьома способами:

· За допомогою виконання функції pthread_exit(). Функція ніколи не повертається в нитку виконання, що викликала її. Об'єкт, на який указує параметр цієї функції, може бути вивчений в іншій нитці виконання, наприклад, в завершився thread, що породила. Цей параметр, отже, повинен указувати на об'єкт, що не є локальним для thread'а, що завершився, наприклад, на статичну змінну;

· За допомогою повернення з функції, асоційованої з ниткою виконання. Об'єкт, на який указує адресу, що повертається функцією, як і у попередньому випадку, може бути вивчений в іншій нитці виконання, наприклад, в завершився thread, що породила, і повинен указувати на об'єкт, що не є локальним для thread'а, що завершився;

· Якщо в процесі виконується повернення з функції main() або де-небудь в процесі (в будь-якій нитці виконання) здійснюється виклик функції exit(), це приводить до завершення всіх thread'ов процесу.

Опис функції

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

Функція ніколи не повертається в той, що викликав її thread. Об'єкт, на який указує параметр status, може бути згодом вивчений в іншій нитці виконання, наприклад в нитці, що породила нитку, що завершилася. Тому він не повинен указувати на динамічний об'єкт thread'а, що завершився.

Функція pthread_join()

#include <pthread.h>int pthread_join (pthread_t thread void **status_addr);

Опис функції

Функція pthread_join блокує роботу нитки виконання, що викликала її, до завершення thread'а з ідентифікатором thread. Після того, що розблокував в покажчик, розташований за адресою status_addr, заноситься адреса, яка повернула thread, що завершився, або при виході з асоційованої з ним функції, або при виконанні функції pthread_exit(). Якщо нас не цікавить, що повернула нам нитку виконання, як цей параметр можна використовувати значення NULL.

Значення, що повертаються

Функція повертає значення 0 при успішному завершенні. У разі помилки повертається позитивне значення (а не негативне, як в більшості системних викликів і функцій!), яке визначає код помилки, описаний у файлі <errno.h>. Значення системної змінної errno при цьому не встановлюється.

Питання до захисту роботи

  1. Дайте визначення pip'а і FIFO.
  2. Перерахуйте відомі вам недоліки потокового обміну даними.
  3. Що таке IPC? З чого він складається?
  4. Що таке пряма і непряма адресація? В чому їх відмінність?
  5. Що таке простір імен? В чому полягає його призначення?
  6. З чого складається простір імен для FIFO та IPC?
  7. Що таке ключ та як він отримує своє значення?
  8. В чому особливості отримання ключем значення? З чим це пов’язано?
  9. Яка функція генерує ключ? Опишіть її параметри.
  10. Що таке файловий дескриптор? В чому особливість його використання при роботі з пам’яттю, що розділяється?
  11. Який системний виклик створює ділянку пам'яті, що розділяється? Як це відбувається?
  12. Який системний виклик організовує доступ до ділянки пам'яті, що розділяється? Як це відбувається?
  13. Яким чином здійснюється доступ до ділянки пам'яті, що розділяється?
  14. Як пов’язати ділянку пам'яті, що розділяється з адресним простором поточного процесу? Як працює цей системний виклик?
  15. Як пвиключити ділянку пам'яті, що розділяється з адресного простору поточного процесу? Як працює цей системний виклик?
  16. Чи є якісь незручності при використанні пам'яті, що розділяється? Якщо так, то які? Якщо ні, то чому?
  17. Як дізнатися, до яких засобів System V IPC є доступ на даний момент? Як працює дана команда?
  18. Як видалити ресурси System V IPC з системи? Перерахуйте всі відомі вам методи.
  19. Як працюють згадані команди?
  20. Дайте визначення процесу та нитки виконання? Що вони мають спільного? В чому полягає їх різниця?
  21. Яким чином ідентифікуються нитки процесу в системі? Як дізнатися ідентифікатор нитки?
  22. Яка функція створює нитку виконання? Опишіть її роботу.
  23. Яка функція завершує нитку виконання? Опишіть її роботу.
  24. Поясніть призначення і механізм роботи функції pthread_join.

Практичне заняття 4

Засоби System V IPC. Організація роботи з пам'яттю, що розділяється, в UNIX. Поняття ниток виконання (thread): версія для друку і PDA

Мета: Розглянути переваги і недоліки потокового обміну даними. Ознайомитися на практиціз наступними поняттями та функціями: поняття System V IPC, простір імен, адресація в System V IPC, функція ftok(), дескриптори System V IPC, пам'ять, що розділяється, в UNIX, системні виклики shmget(), shmat(), shmdt(), команди ipc і ipcrm. Здійснити практичне використання системного виклику shmctl() для звільнення ресурсу. Розглянути необхідність синхронізації процесів і ниток виконання, що використовують загальну пам'ять.

Переваги і недоліки потокового обміну даними.

На попередньому семінарі ми познайомилися з механізмами, що забезпечують потокову передачу даних між процесами в операційній системі UNIX, а саме з pip'ами і FIFO. Потокові механізми достатньо прості в реалізації і зручні для використовування, але мають ряд істотних недоліків:

· Операції читання і запису не аналізують вміст передаваних даних. Процес, що прочитав 20 байт з потоку, не може сказати, чи були вони записані одним процесом або декількома, чи записувалися вони за один раз або було, наприклад, виконано 4 операції запису по 5 байт. Дані в потоці ніяк не інтерпретуються системою. Якщо потрібна яка-небудь інтерпретація даних, то передаючий і приймаючий процеси повинні наперед погоджувати свої дії і уміти здійснювати її самостійно.

· Для передачі інформації від одного процесу до іншого потрібно, як мінімум, дві операції копіювання даних: перший раз – з адресного простору передаючого процесу в системний буфер, другий раз – з системного буфера в адресний простір приймаючого процесу.

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

Поняття про System V IPC

Вказані вище недоліки потоків даних привели до розробки інших механізмів передачі інформації між процесами. Частина цих механізмів, що вперше з'явилися в UNIX System V і згодом що перекочували звідти практично у всі сучасні версії операційної системи UNIX, одержала загальну назву System V IPC (IPC – скорочення від interprocess communications). До групи System V IPC входять: черги повідомлень, пам'ять і семафори, що розділяється. Ці засоби організації взаємодії процесів зв'язані не тільки спільністю походження, але і володіють схожим інтерфейсом для виконання подібних операцій, наприклад, для виділення і звільнення відповідного ресурсу в системі. Ми розглядатимемо їх в порядку від менш семантично навантажених з погляду операційної системи до більш семантично навантаженим. Іншими словами, чим пізніше ми почнемо займатися яким-небудь механізмом з System V IPC, тим більше дій по інтерпретації передаваної інформації доведеться виконувати операційній системі при використовуванні цього механізму.



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

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