Zadania (2019/20) ================= Należy wybrać jedno zadanie z sekcji `Zadania oparte na klasycznych problemach synchronizacji`_ oraz jedno zadanie z sekcji `Inne problemy synchronizacji`_. Punktacja +------------------------------+-----+ | Problem | Pkt.| +==============================+=====+ | `Czytelnicy i pisarze`_ | 100 | +------------------------------+-----+ | `Pięciu kucharzy`_ | 80 | +------------------------------+-----+ | `Pięciu głodomorów`_ | 80 | +------------------------------+-----+ | `Palacze tytoniu`_ | 100 | +------------------------------+-----+ | `Śpiący fryzjerzy-kasjerzy`_ | 100 | +------------------------------+-----+ | `Port`_ | 50 | +------------------------------+-----+ | `Taśmociąg`_ | 30 | +------------------------------+-----+ | `Lotniskowiec`_ | 50 | +------------------------------+-----+ | `Święty Mikołaj`_ | 60 | +------------------------------+-----+ | `Cząsteczki wody`_ | 50 | +------------------------------+-----+ | `Diabelska kolejka`_ | 30 | +------------------------------+-----+ | `Choinka`_ | 70 | +------------------------------+-----+ Podstawą oceny jest poprawność rozwiązania, stopień współbieżności procesów (im mniej ograniczeń na współbieżność, tym lepiej) oraz "zasobożerność" (im mniej zasobów, tym lepiej). Zadania oparte na klasycznych problemach synchronizacji ------------------------------------------------------- Zadanie z tej grupy należy zrealizować na mechanizmach System V IPC (pamięć współdzielona, semafory i kolejki komunikatów). Czytelnicy i pisarze ~~~~~~~~~~~~~~~~~~~~ Zadanie polega na realizacji problemu czytelników i pisarzy (`opis wersji klasycznej w Wikipedii `_), przy czym: 1. jest ustalona liczba procesów — :math:`N`; #. każdy proces działa naprzemiennie w dwóch fazach: fazie relaksu i fazie korzystania z czytelni; #. w dowolnym momencie fazy relaksu proces może (choć nie musi) zmienić swoją rolę: z pisarza na czytelnika lub z czytelnika na pisarza; #. przechodząc do fazy korzystania z czytelni proces musi uzyskać dostęp we właściwym dla swojej aktualnej roli trybie; #. pisarz umieszcza efekt swojej pracy — swoje **dzieło** — w formie komunikatu w kolejce komunikatów, gdzie komunikat ten pozostaje do momentu, aż wszystkie procesy, które w momencie wydania dzieła były w roli czytelnika, nie odczytają go (po odczytaniu przez wszystkie wymagane procesy komunikat jest usuwany); #. pojemność kolejki komunikatów — reprezentującej półkę z książkami — jest ograniczona, tzn. nie może ona przechowywać więcej niż :math:`K` dzieł; #. podczas pobytu w czytelni proces (również pisarz) czyta co najwyżej jedno dzieło, po czym czytelnik opuszcza czytelnię, a pisarz czeka na miejsce w kolejce, żeby opublikować kolejne dzieło. Pięciu kucharzy ~~~~~~~~~~~~~~~ Zadanie oparte jest na problemie ucztujących filozofów (`opis w Wikipedii `_), przy czym: 1. tutaj kucharz może albo przygotować porcję do zjedzenia, albo skonsumować porcję przygotowaną wcześniej (być może przez innego kucharza); #. zarówno do skonsumowania porcji, jak i do jej przygotowania kucharz potrzebuje dwóch widelców; #. porcje przygotowane przez kucharzy gromadzone są na stole, który ma ograniczoną pojemność — :math:`K` oraz dopuszczalne obciążenie — :math:`W`; #. każda przygotowana porcja zajmuje jedno miejsce na stole, a wagi przygotowywanych porcji są zróżnicowane; #. zawartość stołu jest reprezentowana przez kolejkę komunikatów. Pięciu głodomorów ~~~~~~~~~~~~~~~~~ Zadanie oparte jest na problemie ucztujących filozofów (`opis w Wikipedii `_), przy czym każdy posiłek ma swoją wagę i odnotowywana jest łączna waga posiłków zjedzonych przez każdego głodomora. Na podstawie łącznej wagi zjedzonych posiłków ustalany jest priorytet głodomora — im mniej zjadł, tym ma wyższy priorytet. Palacze tytoniu ~~~~~~~~~~~~~~~ Zadanie oparte jest na problemie palaczy tytoniu (`opis w Wikipedii (po angielsku) `_) przy czym: 1. palacze rozliczają się między sobą za udostępniane składniki po aktualnym kursie giełdowym; #. rola agenta sprowadza się do ustalania kursu giełdowego składników; #. palacze nie mogą mieć debetu, więc jeśli palacza nie stać na zakup składników, musi poczekać na zmianę kursu lub przypływ gotówki za sprzedaż własnego składnika (początkowy stan konta palacza jest większy od 0); #. palacz nabywa jednocześnie oba składniki; #. należy użyć kolejki komunikatów do przekazywania składników między palaczami. Śpiący fryzjerzy-kasjerzy ~~~~~~~~~~~~~~~~~~~~~~~~~ Zadanie oparte jest na problemie śpiącego golibrody, `opisanym w Wikipedii `_ w wersji dla jednego fryzjera/golibrody. 1. Zadanie należy zrealizować w wersji z :math:`F` fryzjerami (:math:`F` > 1) w jednym salonie oraz :math:`N` fotelami (:math:`N k_2 > ... > k_n`. Żeby dotrzeć na poziom :math:`i`-ty, skrzat musi przejść kolejno przez wszystkie niższe poziomy, nie przeciążając rusztowania. Podobnie, żeby zejść, musi przejść przez kolejne niższe poziomy. Liczba ozdób, jakie można zawiesić na choince, również jest ograniczona i na poziomie :math:`i`-tym wynosi :math:`p_i`. Ozdoby zabierane są z poziomu 0, na który dostarcza je sukcesywnie po kilka sztuk Św. Mikołaj, przy czym jest tam ograniczona przestrzeń — co najwyżej :math:`p_0` ozdób. Skrzat w jednym swoim przejściu zdoła przenieść jedną ozdobę (ozdoba nie stanowi dodatkowego obciążenia rusztowania). Cel zadania: synchronizacja skrzatów oraz Św. Mikołaja zakładając, że zawieszanie ozdoby na choince zajmuje pewien czas. .. [WG93] Weiss Z., Gruźlewski T.: Programowanie współbieżne i rozproszone w przykładach i zadaniach. WNT W-wa 1993. .. [PWit] Witkowski P.: http://www.ii.uni.wroc.pl/~pwit/Dydaktyka/so/proj/projekty.html (ostatni dostęp 20.12.2017).