
- •6.050101 «Комп’ютерні науки»
- •Загальні вимоги до виконання лабораторних робіт
- •Лабораторна робота №1
- •1. Основні теоретичні відомості
- •1.1 Основні поняття
- •1.2 Створення процесу
- •1.3 Створення потоку
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6.Список використаної літератури
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Функція CreateProcess створює новий процес.
- •Додаток 4
- •Додаток 5
- •Addr ThreadId – Створює новий потік.
- •Додаток 6
- •Додаток 7
- •Лабораторна робота №2
- •1. Основні теоретичні відомості
- •1.1 Механізми міжпроцесової взаємодії
- •1.2 Механізми синхронізації процесів та потоків
- •1.3 Об’єкти синхронізації
- •1.4 Очікуючі функції
- •1.5 Створення атома
- •1.6 Створення каналу
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6.Список використаної літератури
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Додаток 4
- •Додаток 5 Детальний опис функції створення анонімного каналу
- •Додаток 6 Детальний опис функції створення іменованого каналу
- •Додаток 7
- •Додаток 8
- •Додаток 9 Текст програми створення анонімного каналу
- •Додаток 10
- •Лабораторна робота №3
- •1. Основні теоретичні відомості
- •2. Приклад програми створення dll
- •Опис програми My_dll.Asm та файлу лістінга My_dll.Def
- •4. Трансляція та компонування dll Для того, щоб відтранслювати(ml.Exe) та зкомпонувати (link.Exe) даний .Asm код, потрібно використовувати наступні параметри:
- •5. Приклад використання функції з бібліотеки
- •Приклад програми завантаження dll
- •7. Створення файлу лістінгу існуючої бібліотеки
- •8. Приклад передачі даних у функцію бібліотеки Створення динамічно завантажуваної бібліотеки
- •Передача параметру у функцію бібліотеки
- •9. Хід роботи
- •11. Завдання
- •12. Контрольні запитання
- •13. Список використаної літератури
- •Лабораторна робота №4
- •1. Основні теоретичні відомості
- •Параметри функції CreateToolhelp32Snapshot:
- •2. Перегляд процесів
- •3. Перегляд потоків
- •Значення результуючого параметру (регістр еах) таке саме як в Process32First і Process32Next.
- •4. Перегляд хіпів асоційованих з процесом
- •5. Перегляд модулів, які використовує процес
- •6. Керування процесами
- •7. Хід роботи
- •9. Завдання На 75 балів виконати 4 завдання:
- •10. Контрольні запитання
- •11. Список використаної літератури
- •Додаток 1
- •Лабораторна робота №5
- •Основні теоретичні відомості
- •1.1 Основні поняття
- •1.2 Категорії даних
- •1.3 Відкриття і закриття ключів реєстру
- •1.4 Створення підключа у відкритому ключі реєстру
- •1.5 Отримання інформації з ключа реєстру
- •1.6 Перелічення списку значень для заданого ключа реєстру
- •1.7 Виявлення змін в гілці реєстру
- •1.8 Робота з налаштуваннями операційної системи через реєстр
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6. Список використаної літератури
- •Додаток 1
- •Лабораторна робота №6
- •1. Основні теоретичні відомості
- •Породження процесів
- •1.2 Породження потоків
- •2. Хід роботи
- •4. Індивідуальні завдання
- •5. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
1.3 Об’єкти синхронізації
Об’єкти синхронізації - це такі об’єкти, дескриптор котрих може використовуватись в одній з функцій очікування для корегування виконання багатьох потоків. Більше ніж один процес може мати дескриптор до одного і того ж об’єкту синхронізації, таким чином роблячи міжпроцесову синхронізацію можливою.
Дані типи об’єктів використовуються виключно для синхронізації процесів та потоків:
Event – повідомляє один або декілька очікуючих процесів/потоків про те що подія відбулась.
Mutex – може бути використовуваним тільки одним процесом/потоком для доступу до розділеного ресурсу.
Semaphore – вміщує лічильник від нуля до якогось максимального значення. Даний лічильник містить кількість процесів/потоків котрі одночасно хочуть мати доступ до розділеного ресурсу.
Waitable timer – повідомляє один або декілька процесів/потоків про завершення визначеного часу.
Наступні об’єкти також можуть використовуватись для синхронізації процесів/потоків:
Change notification – даний об’єкт створюється функцією FindFirstChangeNotification. Стан даного об’єкту змінюється в сигналізований, коли відбувається визначений тип змін.
Console input – даний об’єкт створюється під час створення консолі. Стан даного об’єкту змінюється в сигналізований, коли є ще не прочитаний ввід в буфері вводу консолі. У випадку, коли буфер вводу консолі пустий - стан об’єкту змінюється в несигналізований.
Job - даний об’єкт створюється під час виклику функції CreateJobObject. Стан даного об’єкту змінюється в сигналізований під час завершення всіх процесів даного об’єкту або у випадку закінчення ліміту часу вказаного для даного процесу.
Process - даний об’єкт створюється під час виклику функції CreateProcess. Поки процес виконується, його об’єкт у несигналізованому стані. Під час завершення процесу об’єкт встановлюється у сигналізований стан.
Thread - даний об’єкт створюється під час виклику функції CreateThread або CreateRemoteThread. Під час виконання процесу його об’єкт у несигналізованому стані. Коли процес завершується, його об’єкт встановлюється у сигналізований стан.
1.4 Очікуючі функції
Очікуючі функції – це функції, котрі не передають керування іншій частині програми поки не виконається вказаний в них критерій, або поки не завершиться час очікування на даний критерій. Вказаний критерій визначає тип функції.
Існують три типи очікуючих функцій:
Одно – об’єктні (single-object)
Багато – об’єктні (multiple-object)
Функції застереження (alertable)
До одно-об’єктних відносять такі очікуючі функції: SignalObjectAndWait, WaitForSingleObjet (див. додаток 1,2), WaitForSingleObjectEx. Дані функції мають два критерії очікування: об'єкт, якого очікують завершив своє виконання та у випадку коли закінчився вказаний час очікування.
До багато – об’єкних відносять: WaitForMultipleObjects, WaitForMultipleObjectsEx, MsgWaitForMultipleObjects, MsgWaitForMultipleObjectsEx. Дані функції мають два критерії очікування: об'єкт або об’єкти, яких очікують завершили своє виконання та у випадку коли закінчився вказаний час очікування.
До функцій застереження відносять: MsgWaitForMultipleObjects, SignalObjectAndWait, WaitForMultipleObjectsEx, WaitForSingleObjectEx. Дані функції відрізняються від попередніх тим, що вони можуть виконувати застережені операції очікування.