Короткі теоретичні відомості. Лабораторна робота № 8 Засоби взаємодії між процесами у Windows

Лабораторна робота № 8 Засоби взаємодії між процесами у Windows

Мета: Ознайомитися із засобами організації обміну даними між процесами, навчитися використовувати іменовані канали для міжпроцесної взаємодії.

 

Короткі теоретичні відомості

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

 

Є кілька механізмів, які використовуються для обміну даними між процесами:

1. Локальні засоби IPC.

а) передача повідомлень (через чергу повідомлень, безпосередній обмін повідомленнями, за допомогою спеціального повідомлення WM_COPYDATA);

б) використання поділюваної пам’яті – shared memory (за допомогою проекцій файлу, через поділювані засоби DLL);

в) використання анонімних каналів.

2. Мережеві засоби IPC.

а) іменовані канали;

б) поштові скриньки;

в) сокети;

г) віддалений виклик процедур (RPC).

 

Розглянемо засоби обміну даними на прикладі іменованих каналів.

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

 

Відзначимо характеристики іменованих каналів:

· мають ім'я, яке використовується клієнтами для зв'язку з іменованим каналом;

· можуть бути як напівдуплексними, так і дуплексними;

· передача даних може здійснюватися як потоком, так і повідомленнями;

· обмін даними може бути як синхронним, так і асинхронним;

 

Обмін даними між процесами через іменований канал може бути організована таким чином:

· створення іменованого каналу сервером:

· з'єднання сервера з примірником іменованого каналу;

· з'єднання клієнта з примірником іменованого каналу;

· обмін даними через іменований канал;

· від'єднання сервера від примірника іменованого каналу;

· закриття іменованого каналу клієнтом і сервером.

 

Схематично взаємодію клієнта і сервера з використанням іменованого каналу можна відобразити так:

  Сервер | | | Клієнт  
Створення каналу CreateNamedPipe() | |    
Очікування вхідних з’єднань ConnectNamedPipe() | | | WaitNamedPipe() Очікування готовності каналу
    | | CreateFile() З’єднання з каналом
Одержання даних ReadFile()   WriteFile() Відправка даних
Відправка даних WriteFile() ® ReadFile() Одержання даних
Від’єднання від каналу DisconnectNamedPipe() | |    
Закриття каналу CloseHandle() | | CloseHandle() Закриття каналу

Рис. 3. Взаємодія процесів через іменований канал.