Лабораторна робота №2

 

Тема: Взаємодія між процесами і потоками та синхронізація процесів і потоків у середовищі ОС Windows.

Мета: Навчитись створювати процеси та потоки, котрі передають дані між собою та синхронізувати їх в середовищі ОС Windows, використовуючи пакет MASM32.

 

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

 

Функції WinAPI забезпечують спрощену взаємодію та розподіл ресурсів між процесами. Механізм взаємодії між процесами називається міжпроцесовою взаємодією (Interprocess Communication - IPC), механізми, котрі забезпечують синхронізацію процесів та потоків називають механізмами синхронізації процесів (Interprocess Syncronization).

Зазвичай, програми, котрі взаємодіють між собою, поділяють на програми - клієнти та програми - сервери. Клієнт – програма вимагає обслуговування сервер - програмою. Сервер – програма відповідає на відповідні запити програми – клієнта.

 

Механізми міжпроцесової взаємодії

Функції WinAPI підтримують наступні механізми міжпроцесової взаємоїді IPC:

· Clipboard

· Component Object Model (COM)

· Dynamic Data Exchange (DDE)

· File Mapping

· Mailslot

· Pipe

· Remote Procedure Call (RPC)

· Windows Sockets

· WM_COPYDATA

· Atom

 

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

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

DDE - це протокол, котрий дає змогу програмам обмінюватись даними різних форматів.

File Mapping – даний механізм дає можливість процесові користуватись файлом на диску та як би він був занесений у пам’ять, в адресний простір даного процесу.

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

Pipe – канал. Існує однонаправлений механізм передачі даних через канал, використовуючи анонімні канали та двонаправлений – використовуючи іменовані канали.

RPC – віддалений виклик процедур. Даний механізм дозволяє керувати процесами на віддалених комп’ютерах.

Windows Sockets – незалежний від протоколу інтерфейс передачі даних.

WM_COPYDATA – повідомлення, котре шле Windows у випадку передачі даних між процесами. Дані передаються за допомогою структури COPYDATASTRUCT. Один процес записує дані у структуру COPYDATASTRUCT, а інший зчитує їх.

Atom – це число або стрічка, котрі повертаються програмі після того, як вона зробила запис у загальній таблиці атомів. Люба програма маючи atom може мати доступ до відповідного запису у таблиці атомів. Запис у таблиці атомів називається ім’ям атома. Бувають глобальні та локальні таблиці атомів.

 

Механізми синхронізації процесів та потоків

Функції WinAPI також забезпечують синхронізацію процесів та потоків (Interprocess Syncronization).

Для синхронізації доступу декількох програм до одного ресурсу використовують об’єкти синхронізації (synchronization objects) та очікуючі функції (wait functions).

Також існують інші механізми синхронізації:

· Взаємо – виключний ввід і вивід (overlapped input and output)

· Асинхронний виклик процедур (asynchronous procedure calls)

· Об’єкти критичної секції (critical section objects)

· Блокований змінний доступ (interlocked variable access)

Об’єкти синхронізації

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

 

Дані типи об’єктів використовуються виключно для синхронізації процесів та потоків:

· Event – повідомляє один або декілька очікуючих процесів/потоків про те що подія відбулась.

· Mutex – може бути використовуваним тільки одним процесом/потоком для доступу до розділеного ресурсу.

· Semaphore – вміщує лічильник від нуля до якогось максимального значення. Даний лічильник містить кількість процесів/потоків котрі одночасно хочуть мати доступ до розділеного ресурсу.

· Waitable timer – повідомляє один або декілька процесів/потоків про завершення визначеного часу.

Наступні об’єкти також можуть використовуватись для синхронізації процесів/потоків:

· Change notification – даний об’єкт створюється функцією FindFirstChangeNotification. Стан даного об’єкту змінюється в сигналізований, коли відбувається визначений тип змін.

· Console input – даний об’єкт створюється під час створення консолі. Стан даного об’єкту змінюється в сигналізований, коли є ще не прочитаний ввід в буфері вводу консолі. У випадку, коли буфер вводу консолі пустий - стан об’єкту змінюється в несигналізований.

· Job - даний об’єкт створюється під час виклику функції CreateJobObject. Стан даного об’єкту змінюється в сигналізований під час завершення всіх процесів даного об’єкту або у випадку закінчення ліміту часу вказаного для даного процесу.

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

· Thread - даний об’єкт створюється під час виклику функції CreateThread або CreateRemoteThread. Під час виконання процесу його об’єкт у несигналізованому стані. Коли процес завершується, його об’єкт встановлюється у сигналізований стан.

 

Очікуючі функції

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

Існують три типи очікуючих функцій:

· Одно – об’єктні (single-object)

· Багато – об’єктні (multiple-object)

· Функції застереження (alertable)

До одно-об’єктних відносять такі очікуючі функції: SignalObjectAndWait, WaitForSingleObjet (див. додаток 1,2), WaitForSingleObjectEx. Дані функції мають два критерії очікування: об'єкт, якого очікують завершив своє виконання та у випадку коли закінчився вказаний час очікування.

До багато – об’єкних відносять: WaitForMultipleObjects, WaitForMultipleObjectsEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx. Дані функції мають два критерії очікування: об'єкт або об’єкти, яких очікують завершили своє виконання та у випадку коли закінчився вказаний час очікування.

До функцій застереження відносять: MsgWaitForMultipleObjects, SignalObjectAndWait, WaitForMultipleObjectsEx, WaitForSingleObjectEx. Дані функції відрізняються від попередніх тим, що вони можуть виконувати застережені операції очікування.

Створення атома

Атом - це число або стрічка, котрі повертаються програмі після того, як вона зробила запис у загальній таблиці атомів. В цій таблиці розміщуються ідентифікатори (атоми) та стрічки (імена атомів).

    Створити атом можна за допомогою функції AddAtom, створити глобальний атом можна за допомогою функції GlobalAddAtom (Див. додаток 3). Функція, котра створює атом, тобто заносить певну стрічку у таблицю атомів, отримує ідентифікатор (атом). Знаючи цей атом люба функція може мати доступ до відповідного запису у таблиці атомів.

    Знищити атом можна за допомогою функцій DeleteAtom та GlobalDeleteAtom.

Отримати запис з таблиці атомів можна за допомогою функції GetAtomName та GlobalGetAtomName.

    Щоб отримати ідентифікатор (атом), знаючи ім’я атома можна використати функції FindAtom та GlobalFindAtom (див. додаток 4). Будь – яка програма, може за глобальним атомом дістати відповідний запис у таблиці атомів. Локальний атом дійсний тільки в межах однієї програми.

   

Створення каналу

Pipe – це канал з двома кінцями. Канал можна використовувати для обміну даними між двома різними процесами, або всередині одного процесу.

Існує два види каналів: анонімні та іменовані. Створити анонімний канал можна за допомогою функції CreatePipe. (див. додаток 5). Створити іменований канал можна за допомогою функції CreateNamedPipe (див. додаток 6).

 Канали бувають однонаправлені, або двонаправлені. В однонаправленому каналі дані передаються в одному напрямку, в двонаправленому каналі дані можуть передаватись в обох напрямках. Анонімний канал завжди має один напрямок. Іменований канал може бути як однонаправлений так і двонаправлений.

Зазвичай іменовані канали використовуються в мережевому оточенні – де сервер може контактувати з декількома клієнтами (див. додаток 7, 8).

Анонімний канал використовується для зв’язку між батьківським та дочірнім процесом. Анонімний канал найбільш часто використовується під час взаємодії з консольною програмою, тобто програмою, котра свій ввід/вивід здійснює через консоль (Див. додаток 9, 10). Так можна перенаправити ввід/вивід консольної програми у вікно власної програми.

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

Після створення каналу користувач отримує два дескриптори на запис та зчитування з каналу. Один із них потрібно закрити, використовуючи функцію CloseHandle.

 

Хід роботи

 

1. Ознайомитись з основними теоретичними відомостями даної лабораторної роботи.

2. Ознайомитись з приведеними в додатках прикладами програм.

3. Ознайомитись з додатковими джерелами, приведеними в п. 6 (Література).

4. Затвердити номер індивідуального завдання у викладача.

5. Виконати завдання згідно з номером.

Зміст звіту

Звіт повинен містити:

- титульну сторінку;

- мету роботи;

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

- короткі висновки по проведеній роботі.

Завдання

Розробити на мові асемблер для ОС Windows програму, використовуючи пакет MASM32. Результат виводиться на екран.

На 60 балів одна програма має створювати глобальний атом, який має містити П.І.П. Інша програма має виводити атом (ідентифікатор у таблиці атомів) у вікно повідомлення вказаного типу:

Тип вікна повідомлення – згідно варіанту:

Тип
1 2 MB_ABORTRETRYIGNORE
3 4 MB_OK
5 6 MB_OKCANCEL
7 8 MB_RETRYCANCEL
9 10 MB_YESNO
11 12 MB_YESNOCANCEL
13 14 MB_ICONEXCLAMATION
15 16 MB_ICONWARNING
17 18 MB_ICONINFORMATION
19 20 MB_ICONASTERISK
21 22 MB_ICONQUESTION
23 24 MB_ICONSTOP
25 26 MB_ICONERROR
27 28 MB_ICONHAND

 

На 75 балів програма має перенаправити консольний вивід у вікно повідомлення, використовуючи анонімні канали. Консольна програма має виводити П.І.П та групу. Тип вікна повідомлення вибрати з завдання на 60 балів згідно варіанту.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: