Ostatnia aktualizacja: 2017-12-07

Zasady zaliczenia laboratorium

Zaliczenie laboratorium odbywa się na podstawie zaliczenia czterech indywidualnych mini-projektów. Do zaliczenia laboratorium wymagane jest pozytywne zaliczenie wszystkich projektów. Każdy projekt składa się z następujących elementów:

  1. Implementacja zadania projektowego.
  2. Wykonanie dokumentacji zadania w skład której muszą wchodzić:
    • Opis treści zadania.
    • Wyjaśnienie sposobu wykonania zadania.
    • Opis implementacji (np. wykorzystanych klas lub bibliotek).
    • Dyskusja wykonanych eksperymentów potwierdzających (lub nie) poprawność implementacji.
  3. Obrona projektu w formie pytań dotyczących projektu. Przykładowe pytania podane są poniżej.

Tematy zadań projektowych

  • Preferowana technologia implementacji: Język Java.
  • Dokumentacja do pakietu java.util.concurrent w postaci tutoriala dostępna jest tutaj.
  1. Implementacja Algorytmu Petersona.
    • Celem zadania jest zaimplementowanie i przebadanie algorytmu Petersona.
    • Dokumentacja
    • Wikipedia
    • Slajdy do wykładu
  2. Symulacja problemu producentów i konsumentów przy użyciu klasy BlockingQueue.
    • Zadanie polega na zaimplementowaniu i przebadaniu klasycznego problemu producentów i konsumentów przy użyciu klasy z pakietu java.util.concurrent o nazwie BlockingQueue. Po zaimplementowaniu należy sprawdzić poprawność implementacji.
    • Dokumentacja
  3. Symulacja gaszenia pożaru przy użyciu klasy Exchchanger.
    • Wyobraźmy sobie następującą scenę. Po prawej stronie widzimy palący się budynek. Po lewej stronie znajduje studnia. Pomiędzy budynkiem i studnią znajduje się k osób, które będą gasić pożar. Gaszenie pożaru polega na przekazywaniu wiader napełnionych wodą od osoby, która znajduje się najbliżej studni do osoby, która znajduje się przy palącym się budynku. Osoba przy studni odpowiedzialna jest za napełnianie wiader, natomiast osoba przy budynku za ich opróżnianie. Należy przyjąć następujące założenia: liczba wiader jest równa liczbie osób, liczba obiektów Exchanger jest o 1 mniejsza od liczby osób.
    • Dokumentacja
    • Przykładowa implementacja
  4. Symulacja dworca autobusowego (lub lotniska) przy użyciu funkcji języja Java takich jak: notify / notifyAll / wait.
    • Przystanek, na którym gromadzą się pasażerowie pełni rolę obiektu za pomocą którego pasażerowie będą synchronizować się z autobusem. Każdy pasażer, dochodząc do przystanku, wywołuje na nim funkcję wait i zaczyna czekać na autobus. Autobus natomiast, jako odrębny wątek, po dojechaniu do przystanku, wybudza pasażerów za pomocą wywołania na przystanku funkcji notifyAll.
    • Guarded blocks
    • Przykładowa implementacja

Przykładowe pytania pomocne w zaliczaniu zadań projektowych

  1. Algorytm Petersona.
    • Czym charakteryzuje się algorytm Petersona?
    • W którym momencie następuje przełączenie pomiędzy procesami?
    • Wskazać i wyjaśnić w którym miejscu znajduje się sekcja krytyczna.
    • Dlaczego dwa procesy nie mogą jednocześnie znaleźć się w sekcji krytycznej?
  2. BlockingQueue.
    • Co stanie się w przypadku kiedy producent wyprodukuje zbyt dużo obiektów?
    • Co stanie się w przypadku kiedy konsument będzie próbował odbierać obiekty z pustego bufora?
  3. Symulacja gaszenia pożaru.
    • Jaki wpływ na gaszących będzie miała niedyspozycja (niemożność przekazania wiadra w jedną lub drugą stronę) jednego z gaszących?
    • W jaki sposób należy zainicjować zmienne Bucket?
    • Co się stanie w sytuacji gdy wszystkie wiadra będą na początku puste?
    • Czy w przypadku wyschnięcia studni gaszący nadal będą przekazywać sobie wiadra?
  4. Symulacja dworca / lotniska.
    • Co stanie się z pasażerami jeśli autobus nigdy nie przyjedzie?
    • Co stanie się jeśli autobus przyjedzie, ale na przystanku nie będzie pasażerów?

Slajdy do wykładu (Jesień 2016)