Iндивiдуальнi завдання до захисту роботи.

  1. Створити три процеси та органiзувати обмiн даними мiж ними за топологiєю "Лiнiйка". Тобто перший процес передає данi другому, а другий - третьому.
  2. Створити три процеси та органiзувати циклiчний обмiн даними мiж ними. Тобто перший потiк повинен передавати дани до другого, другий - до третього, а третiй - до першого.
  3. Створити чотири процеси та органiзувати обмiн даними мiж ними за топологiєю "Зiрка". Тобто один (головний) процес повинен роздати данi iншим трьом (пiдлеглим) процесам.
  4. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = 1 + 1 / (1 + 1 / (1 + 1 / (1 + 1 / x))).
  5. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * (1 + a * (1 + a * (1 + a * (1 + a)))).
  6. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * x / (a * x / (a * x / (a * x))).
  7. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a / (x + a / (x + a / (x + a / (x + a / x)))).
  8. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * b / (x + a * b / (x + a * b / (x + a * b / (x + a * b / x)))).
  9. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = 1 + (1 + (1 + (1 + x) / x) / x) / x.
  10. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = 2 * (2 * (2 * (2 * x - 1) * x - 1) * x - 1) * x - 1.
  11. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a / (a / (a / (a / x - b) - b) - b) - b.
  12. Розробити паралельну програму - конвеєр даних для табулювання функцiї y = a * (b / (a * (b / (a * (b / x) + c)) + c)) + c.

 


 

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

Тема: Розподілене програмування на мовi Java з використанням механiзму Sockets.

Мета: Опанувати методику створення розподілених програм з використанням механізму Sockets.

 

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

Розподілене програмування мовою Java з використанням сокетів

Мова Java підтримує розподілене програмування за допомогою потоків, поділюваних змінних і синхронізованих методів. Тому мову Java можна використовувати для написання розподілених програм. У цій мові немає вбудованих примітивів для передачі повідомлень, але є стандартний модуль java.net. Класи цього модуля підтримують низькорівневу взаємодію, використовуючи дейтаграми, зв'язок більш високого рівня за допомогою сокетів і взаємодію через Internet за допомогою адрес URL (Uniform Resource Locator - уніфікований покажчик інформаційного ресурсу).

 

Мережі і сокети

Мережа складається з набору вузлів (ведучих комп'ютерів - host), зв'язаних за допомогою комунікаційного простору. Наприклад, локальна мережа може складатися із серверів і робочих станцій, зв'язаних за допомогою Ethernet. Internet - це приклад глобальної мережі, що містить мільйони вузлів і тисячі взаємозалежних мереж. Кожен вузол має унікальне ім'я, тому інші вузли можуть зв'язуватися з ним. Фактично вузли мережі Internet мають по двох унікальних імені: символьне ім'я домена Internet і числова адреса для протоколу IP (Internet protocol).

Програми, що виконуються на різних вузлах, використовують протоколи взаємодії. Таких протоколів існує дуже багато. Вони підтримують різні типи даних (від тексту і графіки до фільмів), різні рівні абстракції (такі як передача файлів або пакетів даних) і різні співвідношення властивостей, наприклад, швидкості і надійності. Системні програмісти звичайно використовують два протоколи - TCP (Transmission Control Protocol - протокол керування передачею) і UDP (User Data Protocol - протокол даних користувача). Ці протоколи звичайно реалізовані на основі протоколу IP (Internet Protocol), що, у свою чергу, заснований на апаратних протоколах, таких як драйвер Ethernet. З іншого боку, на основі протоколу TCP реалізовані високорівневі протоколи передачі файлів (file transfer protocol - FTP) і передачі гіпертекстів (hypertext transfer protocol - HTTP).

Взаємодія за протоколом TCP грунтується на з'єднаннях і потоках. З'єднання - це зв'язок між двома вузлами, що встановлюється перед процесом взаємодії й існує до його завершення. З'єднання можна представити як “програмний канал” між вузлами. Потік взаємодії - це послідовність повідомлень, переданих по з'єднанню. Потік забезпечує надійну й упорядковану взаємодію, тобто повідомлення не губляться і доставляються в порядку їхнього відправлення. Таким чином, семантично потік збігається з каналом.

Протокол UDP заснований на дейтаграмах. Дейтаграма складається з адреси призначення і невеликого “пакета” даних, що є просто масивом байтів. З'єднання не потрібні, оскільки адреса призначення є в кожної дейтаграмі. Зв'язок за протоколом UDP не надійний, оскільки дейтаграми можуть губитися або приходити не один за одним. З іншого боку, зв'язок за допомогою дейтаграм набагато швидше, ніж зв'язок, заснований на потоках. Таким чином, альтернативність протоколів TCP і UDP пов'язана головним чином з вибором між надійністю і швидкістю.

Модуль java.net містить кілька класів, що підтримують мережну взаємодію за допомогою як дейтаграм, так і потоків. Далі ілюструється використання двох класів, Socket і ServerSocket, що широко використовуються у додатках типу “клієнт-сервер”.