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

Podobne dokumenty