Treść zadania
Transkrypt
Treść zadania
Systemy Operacyjne I – tematy projektów (wątki POSIX) (st. stacjonarne, lato 2007/2008) 1. Roboty drogowe. Na pewnym odcinku drogi z miasta A do miasta B trwają roboty drogowe, przez co jeden pas jest zamknięty. Na otwartym pasie zorganizowano ruch wahadłowy, tzn. na każdym końcu odcinka ustawiono sygnalizator ze światłem zielonym i czerwonym. Ruch przepuszczany jest naprzemiennie, a sygnalizatory przełączają się co określony odcinek czasu T. W momencie zmiany kierunku ruchu oba światła pozostają czerwone do momentu opuszczenia odcinka przez wszystkie samochody. a) Napisać program, w którym wątki NS wątków samochodów będzie w nieskończonej pętli podróżować z miasta A do miasta B i z powrotem, spędzając w każdym mieście losowy czas od 0 do TM. Sygnalizacja przełączana jest przez osobny wątek (wątki?). Odcinek jest na tyle krótki i kręty, że jednocześnie może się na nim znajdować SMAX samochodów, a czas przejazdu przed odcinek wynosi TP sekund. Wszystkie parametry (T, NS, TM, SMAX, TP) program pobiera z linii poleceń (sugeruję wykorzystać funkcję getopt lub getopt_long). Na ekranie wypisywane są komunikaty w następującej postaci. [A = 5]: S=10, C [ << 3 << ] Z, S =5 [B=5] Oznacza to, że w mieście A jest 5 samochodów, 10 czeka na czerwonym (C) świetle po stronie miasta A, przez wąski odcinek jadą aktualnie 3 pojazdy od strony miasta B, kolejnych 5 czeka na wjazd na odcinek, a w mieście B znajduje się 5 aut [20p]. b) Oprócz zwykłych samochodów, między miastami A i B porusza się także NU pojazdów uprzywilejowanych (NU również przekazywane w linii poleceń). Mają one bezwzględne pierwszeństwo i powodują natychmiastowe przełączenie sygnalizacji (ale wciąż z zachowaniem pauzy na opuszczenie odcinka przez jadące nim samochody). Komunikaty zmienią się następująco: [A = 5, 1U]: S=10, 0U , C [ << 3, 0U << ] Z, S=5 [B=5, 2U] Liczby z sufiksem U oznaczają ilość pojazdów uprzywilejowanych. [34p]. 2. Problem śpiącego fryzjera. Dane jest FN wątków fryzjera i KN wątków klientów. Fryzjer pracuje w zakładzie fryzjerskim. W zakładzie tym znajduje się FN krzeseł fryzjerskich i PN krzeseł w poczekalni. Fryzjer pracuje według następującego protokołu: Jeżeli na krześle fryzjerskim siedzi klient, to fryzjer go strzyże. W przeciwnym wypadku fryzjer zasypia. Klient wykonuje następujący protokół: Przez pewien czas zajmuje się swoimi sprawami, następnie udaje się do zakładu fryzjerskiego. Jeżeli krzesło fryzjerskie jest puste, to siada na nim. W przeciwnym wypadku sprawdza, czy jest wolne krzesło w poczekalni. Jeżeli tak to siada na nim, zajmując miejsce w kolejce. Jeżeli brak jest wolnego miejsca w poczekalni, to klient opuszcza zakład. Jeżeli krzesło fryzjerskie się zwolni, to siada na nim klient z poczekalni wybrany zgodnie z zasadą FIFO. Po opuszczeniu zakładu klient powraca do niego po losowo wybranym czasie. (Klienci działają w pętli nieskończonej, okresowo próbując dostać się do zakładu). a) Napisać program koordynujący pracę fryzjera i klientów, w którym FN, KN i PN podawane są jako argumenty linii poleceń programu. Klient jest strzyżony przez tego fryzjera, który najdłużej “odpoczywał”. [14p]. Program powinien wypisywać komunikaty wg poniższego przykładu: Kolejka: 0/10, [F0: 2, F1: 0, F2: -], Klient 3 wyszedł Oznacza to, że zakład właśnie opuścił klient o numerze 3, w kolejce jest 10 miejsc z czego zajętych jest 0, fryzjer 0 strzyże klienta o numerze 2, fryzjer 1 strzyże klienta o numerze 0, a fryzjer 2 śpi (nikogo nie strzyże). Komunikat należy wypisywać w momencie zmiany którejkolwiek z tych wartości (przy wejściu/wyjściu klienta, przy rozpoczęciu/zakończeniu strzyżenia prze fryzjera...). b) Oprócz wątków zwykłych klientów z zakładu korzysta także NSK stałych klientów (NSK również przekazywane w linii poleceń), którzy obsługiwani są bez kolejki (ale liczba wszystkich klientów w zakładzie dalej nie może przekroczyć ilości miejsc w poczekalni). Ponadto zagwarantowane jest, że fryzjer, który właśnie skończył strzyc stałego klienta wpuści następnie na fotel zwykłego klienta. Komunikaty: Kolejka: 0(0s)/10 , [F0: 2s, F1: 0, F2: -], Klient 3 wyszedł Gdzie sufiks oznacza stałych klientów. (czyli w kolejce jest 0 klientów, wśród nich 0 stałych klientów, fryzjer F0 strzyże stałego klienta o numerze 2 itd..) [34p]. WAŻNE! Projekty realizowane są w grupach 3 osobowych. Na projekt składa się kod programu (dostarczony na nośniku lub e-mailem) oraz sprawozdanie w formie papierowej. Sprawozdanie MUSI zawierać nazwiska autorów, zakres realizacji zadania (część podstawowa – obowiązkowo + ewentualne podpunkty dodatkowe), opis konkretnego przeznaczenia i sposobu wykorzystania mechanizmów synchronizacji (semaforów, mutexów, zmiennych warunkowych. Do sprawozdania należy też dołączyć dobrze skomentowany kod programu (wydrukowany czcionką courier), w którym fragmenty korzystające z mechanizmów synchronizacji będą wyróżnione pogrubioną czcionką . Należy dobrać parametry programów tak, aby można było wyraźnie obserwować działanie mechanizmów synchronizacji. Rozmiar czcionki 10 p (szanujmy lasy!). UWAGA: Dopuszczalna jest każda forma współpracy, również między zespołami, OPRÓCZ UDOSTĘPNIANIA KODU (proszę to potraktować poważnie). Projekty nie są trudne, ale wymagają poszerzenia wiedzy, przestudiowania fragmentów manuala itp. Pracując systematycznie przez te parę tygodni można je wykonać bez trudu, poza tym na zajęciach i konsultacjach chętnie udzielę Państwu wskazówek. Termin odbioru projektu: 10.06.2008. Każdy tydzień spóźnienia: -4 wyścigu/aktywnego czekania -3p. Opracował: Krzysztof Bandurski p, każdy przypadek potencjalnego