Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PANCHENKO.doc
Скачиваний:
1
Добавлен:
16.09.2019
Размер:
396.29 Кб
Скачать
  1. Распределенная память или общая память

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

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

Приблизний сценарій використання розділяється пам'яті при реалізації технологій «клієнт-сервер» має вигляд:

  • сервер отримує доступ до поділюваного пам'яті, використовуючи семафор;

  • сервер робить запис даних в поділювану пам'ять;

  • після завершення запису даних сервер звільняє доступ до поділюваного пам'яті за допомогою семафора;

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

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

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

  1. Именованные/Неименованные каналы

Іменовані канали в Linux. Іменовані канали в Linux (в UNIX їх іноді називають FIFO) можуть використовуватися як засіб взаємодії між неспорідненими і навіть віддаленими процесами. Такий канал має зовнішнє ім'я, яке включається в простір імен файлової системи. Тому іменований канал ще більш схожий на файл, ніж неіменовані. В системі канал представляється спеціальним файлом і створюється спеціальним системним викликом:

int mknod (char* name, int mode, int dev);

Цей системний виклик може використовуватися також і для створення звичайних файлів, каталогів та інших спеціальних файлів. Параметр name цього виклику є покажчиком на символьну рядок, що містить ім'я каналу (ім'я може включати в себе також і шлях). Параметр mode визначає тип створюваного файлу і режим доступу до нього. Старші 7 біт цього числа визначають тип створюваного файлу (для іменованого каналу він може кодуватися макроконстантой: S_IFIFO, молодші 9 біт визначають права доступу "rwx" для власника (старша трійка), для групи (середня трійка), для всіх інших (молодша трійка) . Так, наприклад, для каналу, який буде доступний тільки для власника, код параметра mode буде S_IFIFO | 0x140, а для каналу, доступного для всіх-всіх-всіх - S_IFIFO | 0x1B6. (Природно, право "x" для каналу не визначається .) Третій параметр при створенні каналу задається 0.

Іменовані канали в Windows. У Windows дизайн іменованих каналів зміщений до взаємодії «клієнт-сервер», і вони працюють багато в чому як сокети: крім звичайних операцій читання і запису, іменовані канали в Windows підтримують явний «пасивний» режим для серверних додатків (для порівняння: Unix domain socket) . Windows 95 підтримує клієнти іменованих каналів, а системи гілки Windows NT можуть служити також і серверами.

До іменовані канали можна звертатися в значній мірі як до файлу. Можна використовувати функції Windows API CreateFile, CloseHandle, ReadFile, WriteFile, щоб відкривати і закривати канал, виконувати читання і запис. Функції стандартної бібліотеки Сі такі як fopen, fread, fwrite і fclose, теж можна використовувати, на відміну від сокетів Windows (англ.), які не реалізують використання стандартних файлових операцій у мережі. Інтерфейс командного рядка (як в Unix) відсутня.

Іменовані канали - не існують постійно і не можуть, на відміну від Unix, бути створені як спеціальні файли у довільній доступною для запису файлової системи, але мають тимчасові імена (звільняються після закриття останньої посилання на них), які виділяються в корені файлової системи іменованих каналів (англ. named pipe filesystem, NPFS) і монтуються на спеціальне шляху «\ \. \ pipe \» (тобто в каналу під назвою «foo» повне ім'я буде «\ \. \ pipe \ foo»). Анонімні канали, що використовуються в конвеєрах - це насправді іменовані канали з випадковим ім'ям.

Іменовані канали зазвичай не доступні безпосередньо користувачеві, але є суттєві винятки. Наприклад, засіб віртуалізації робочих станцій VMWare може відкривати емульований послідовний порт для головної системи як іменований канал, а відладчик рівня ядра kd від Microsoft підтримує іменовані канали в якості засобу повідомлення при налагодженні (фактично, так як kd зазвичай вимагає підключення до цільового комп'ютера по послідовному порту , VMware і kd можна з'єднати разом для налагодження драйверів пристроїв на одному комп'ютері).Обидві програми вимагають від користувача зазначення імені каналу у вигляді «\ \. \ Pipe \ ім'я».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]