Systemy operacyjne - projekt drugi
wiosna 2007
|
-
Wąski most.
Z miasta A do miasta B prowadzi droga, na której znajduje się wąski
most umożliwiający tylko ruch jednokierunkowy. Most jest również dość
słaby, także może po nim przejeżdżać tylko jeden samochód na raz.
Napisać program w którym N samochodów (wątków) będzie nieustannie
przejeżdżało z miasta do miasta, pokonując po drodze most (N
przekazywane jako argument linii poleceń). Zsynchronizuj dostęp wątków
do mostu:
a) nie wykorzystując zmiennych warunkowych (tylko mutexy/semafory) [17p]
b) wykorzystując zmienne warunkowe (condition variables) [17p]
Aby móc obserwować działanie programu, każdemu samochodowi przydziel
numer. Program powinien wypisywać komunikaty według poniższego
przykładu:
A-5 10>>> [>>
4 >>] <<<4 6-B
Oznacza to, że
po stronie miasta A jest 15 samochodów z czego 10 czeka w kolejce przed
mostem, przez most przejeżdża samochód z numerem 4 z miasta A do B, po
stronie miasta B jest 10 samochodów, z czego 4 oczekują w kolejce przed
mostem. Komunikat należy wypisywać w momencie, kiedy w programie zmieni
się którakolwiek z tych wartości.
|
-
Czytelnicy i pisarze. Z
czytelni korzysta na okrągło pewna ilość czytelników i pisarzy, przy
czym jednoczesnie może w niej znajdować się albo dowolna ilość
czytelników, albo jeden pisarz, albo nikt – nigdy inaczej. Problem ten
ma trzy rozwiązania – z możliwością zagłodzenia pisarzy, z możliwością
zagłodzenia czytelników oraz wykluczające zagłodzenie. Napisać:
a) dwa programy symulujące dwa różne rozwiązania tego problemu, bez
korzystania ze zmiennych warunkowych [17 p], lub
b) dwa programy symulujące dwa różne rozwiązania tego problemu, przy
czym jeden z nich musi korzystać ze miennych warunkowych (condition
variable). [27 p], lub
c) trzy programy symulujące trzy różne rozwiązania tego problemu, przy
czym przynajmniej jeden z nich musi korzystać ze zmiennych warunkowych
[34 p].
Ilość wątków pisarzy R i czytelników W można przekazać jako argumenty
linii poleceń. Zarówno czytelnicy jak i pisarze wkrótce po opuszczeniu
czytelni próbują znów się do niej dostać. Program powinien wypisywać
komunikaty według poniższego przykładu:
ReaderQ: 11 WriterQ: 10 [in:
R:0 W:1]
Oznacza to, że w kolejce przed czytelnią czeka 10
pisarzy i 11 czytelników a sama czytelnia zajęta jest przez jednego
pisarza. Komunikat należy wypisywać w momencie zmiany którejkolwiek z
tych wartości.
|
Uwagi dot. sprawozdania:
Koniecznie zaznaczyć wybraną wersję projektu (tym samym
oczekiwaną
ilość punktów).
Zamieścić w sprawozdaniu tą część kod programu, wyróżniając (np.
pogrubioną czcionką) fragmenty korzystające z mechanizmów
synchronizacji.
Opisać konkretne przeznaczenie i sposób wykorzystania każdego
mechanizmu synchronizacji (semafora, mutexu, zmiennej warunkowej).
Można to zrobić w formie komentarzy do kodu umieszczonych w miejscach,
gdzie używany jest któryś z tych mechanizmów).
Za każdy przypadek
potencjalnego wyścigu -3p.
|
|
|
Zadania
opracował: Krzysztof Bandurski
|
|
|