Лабораторні роботи

1. Лабораторна робота №1

Тема: "Процеси та потоки"

Взаємодія між процесами. 
Розподіл даних між процесами. 
Робота з файлами які відображуються у пам'ять.

 Завдання 1

Необхідно написати дві програми (три), які будуть мати спільні дані  та одночасно до них звертатися.

Існує кілька механізмів реалізації спільного доступу до даних різних процесів.

Скористаємося одним з них, найбільш зручним - проектуванням файлу в пам'ять.

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

 

Створіть файл data.dat. У ньому мають бути записані числа, згенеровані випадковим чином. Кількість чисел - 20-30 штук. Діапазон значень: від 10 до 100. (Це саме числа, а не символьні рядки зберігають ASCII коди цифр !!!)

 

Програма №1. "Сортування даних" (консольна)

Беремо за основу програму "Hello windows"
Включаємо обробку події натискання клавіші, і відстежуємо в ньому натискання пробілу. Якщо користувач натиснув пробіл, значить починаємо сортування даних.
Виконуємо проектування файлу в пам'ять. Використовуємо для цього створений файл data.dat. В результаті отримаємо доступ до даних як до звичайного одновимірного масиву.
Виконуємо сортування масиву, будь-яким з методів сортування. Вставте 1-но секундну затримку для кожної ітерації сортування масиву, це дозволить потім наочніше побачити процес сортування.
По закінченню сортування, програма виводить у вікно, рядок «Робота завершена».
 

Програма №2. «Виведення файлу даних у вікно» (віконна)


Виконуємо проектування файлу в пам'ять. Використовуємо для цього створений файл data.dat. В результаті отримаємо доступ до даних як до звичайного одновимірного масиву. Цей же файл проектує в пам'ять попередня програма.
Створюємо таймер на 0.5 секунди. При отриманні повідомлення від таймера, виконуємо висновок всього масиву в вікно. Передбачте коректний перевивід даних у вікно, без накладень. У вікно виводиться не числа з масиву, а рядки одного і того ж символу, наприклад «*», в кількості, що дорівнює числу з масиву.
 

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

 

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

 

Завдання 2.

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

Для організації такої синхронізації потрібно використати об'єкт ядра ОС mutex або semaphor, або інший синхронізуючий об'єкт, а також функції очікування (наприклад, WaitForSinglJbject()).

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

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

Додаткове завдання.

Написати четверту програму (консольну), яка буде одночасно працювати, та намагатися відсортувати той самий масив в іншому напрямку та іншим відомим методом сортування.

Завдання підвищеної складності.

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