
- •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. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
2. Хід роботи
Ознайомитись з основними теоретичними відомостями даної лабораторної роботи.
Ознайомитись з приведеними в основних теоретичних відомостях прикладами програм.
Затвердити номер індивідуального завдання у викладача.
Виконати завдання згідно з затвердженим номером.
3. Зміст звіту
Звіт повинен містити:
- титульну сторінку;
- тему, мету роботи;
- завдання, робочий варіант тексту програми, результат виконання програми;
- тексти зовнішніх модулів, використовуваних при компілюванні;
- короткі висновки по проведеній роботі.
4. Індивідуальні завдання
Завдання на 60 балів:
1. Написати програму, яка створює новий процес і запускає редактор vi з командною стрчкою "vi hello.c".
2. Написати програму, яка створює новий процес і запускає файловий менеджер "Midnight Commander".
3. Написати програму, що запускає утиліту "grep", яка в свою чергу шукає стрічку "pthread_create" в усіх файлах та підкаталогах поточного каталогу.
4. Написати програму, що запускає команду "ls" для перегляду вмісту поточного каталогу.
5. Написати програму, що задопомогою команди "mkdir" створює підкаталог "hello" в поточному каталозі.
6. Написати програму, що за допомогою команди “ps” виводить на екран активні процеси в системі.
7. Написати програму, що за допомогою команди “perror” взнає опис помилки з номером 117.
Написати програму, що за допомогою команди “gzip” створює архів всього вмісту поточного каталогу.
Написати програму, що за допомогою команди “jobs” взнає про всі завдання в системі.
Написати програму, що за допомогою команди “hostname” взнає ім’я машини на якій її було запущено.
Завдання на 85 балів:
1. Написати програму, яка запускає новий процес, що в свою чергу друкує розмір в байтах основних типів мови С у вашій системі (char, short, int, long, float, double, long double, unsigned).
2. Завдання таке ж, як і в 1 цього підпункту, тільки запускається не процес, а новий потік.
3. Новий процес виводить на екран символи від A до z і цифри від 0 до 9 разом з іх ASCII-кодами значеннями.
4. Завдання таке ж, як і в 3 цього підпункту, тільки запускається не процес, а новий потік.
5. Новий процес виводить на екран максимальні значення, що представляються основними типами мови С у форматі: "тип - макс. знач.". Максимальні значення вивести в десятковій формі для типів char, short, int, long, float, double, long double, unsigned.
6. Завдання таке ж, як і в 5 цього підпункту, тільки запускається не процес, а новий потік.
7. Завдання таке ж, як і в 5 цього підпункту, тільки максимальні значення виводяться в шістнадцятковій формі.
8. Завдання таке ж, як і в 5 цього підпункту, тільки запускається не процес, а новий потік, і значення виводяться в шістнадцятковій формі.
9. Новий процес за допомогою функції ctime() друкує поточну дату у зручній для користувача формі. (Див. on-line допомогу по функції ctime()).
10. Завдання таке ж, як і в 9 тільки запускається новий потік.
11. Новий процес виводить на екран весь свій командний рядок разом зі своєю назвою.
12. Новий процес виводить на екран вміст свого масиву змінних оточення (Див. on-line допомогу по змінній “environ”).
Завдання на 95 балів:
1. Робочий процес, з командної стрічки бере кількість та розмірність масивів цілих чисел, динамічно виділяє для них пам'ять, заповнює масиви випадковими числами і проводить їх сортування бульбашковим методом. Відсортовані масиви виводяться на екран.
2. Завдання теж саме, що і в 1, тільки сортування відбувається методом вибору.
3. Задано три вказівники на цілі числа. Програма з командного рядка першим параметром після своєї назви бере розмірність масивів, динамічно виділяє для них пам'ять і заповнює випадковими числами. Далі запускаються три потоки, що кожен сортує свій масив бульбашковим методом. Масиви передаються сортуючим потокам в якості останнього параметру функції pthread_create. Головний потік повинен дочекатися завершення кожного з новостворених потоків. Після закінчення сортування головний потік програми виводить на екран відсортовані масиви у вигляді: "Масив <номер>: <значення>". Сортування відбувається по спаданню.
4. Завдання таке ж, як і в 3 цього підпункту, тільки сортування відбувається по зростанню.
5. Використовуючи розклад функції sin(x) в ряд Маклорена (див. Додаток 1), написати програму, що реалізує обчислення функції sin(x) в новому процесі. Точність обчислень (кількість доданків в сумі) взяти з командого рядка батьківського процесу. Результат порівняти зі значенням стандартної функції sin(x) з математичної бібліотеки мови С (math.h).
6. Завдання таке ж, як і в 5 цього підпункту, тільки обчислення відбувається в новому потоці.
7. Завдання таке ж, як і в 5 цього підпункту, тільки обчислити значення cos(x).
8. Новий процес зі своєї командної стрічки бере ціле число n і обчислює функцію n!. Обчислення провести рекурсивним способом; результат вивести в sdtout.
9. Завдання таке ж, як і в 8 цього підпункту, тільки обчислення проводиться за допомогою ітерацій.
10. Завдання таке ж, як і в 8 цього підпункту, тільки запускається не процес, а новий потік.
11. Завдання таке ж, як і в 8 цього підпункту, тільки запускається не процес, а новий потік, і обчислення проводиться за допомогою ітерацій.
12. Новий процес зі своєї командної стрічки бере ціле додатнє число n і обчислює функцію fibonacci(n) рекурсивним способом; результат вивести в stdout (див. Додаток 1).
13. Завдання таке ж, як і в 12 цього підпункту, тільки обчислення проводиться за допомогою ітерацій.
14. Завдання таке ж, як і в 12 цього підпункту, тільки запускається новий потік.
15. Завдання таке ж, як і в 12 цього підпункту, тільки запускається новий потік і обчислення проводиться за допомогою ітерацій.