Systemy operacyjne - projekt drugi

wiosna 2007




  1. 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.



  1. 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