Programowanie systemowe – semafory

ćwiczenia laboratoryjne



Przydatne biblioteki i funkcje



Zadania


Zadanie 1. Zapoznaj się z konstrukcją semaforów binarnych (semafory, które mogą być albo otwarte – wartość 1, albo zamknięte – wartość 0).
Stwórz symulator pracowników, którzy korzystają z jednej drukarki. Pracownicy powinni być symulowani przez wątki oraz powinni przez jakiś czas korzystać z drukarki, która jest symulowana przez semafor. Pracownicy (wątki) powinni być odpowiedni zsynchronizowani, przy pomocy semafora: Pracownik co jakiś czas wybiera w sposób "losowy", czy chce skorzystać z drukarki.
Liczba pracowników powinna być wczytana z pliku.

Zadanie 2. Zapoznaj się z konstrukcją semaforów licznikowych (semafory, mogą być otwarte, kiedy przyjmują wartość dodatnią, albo zamknięte – wartość 0).
Stwórz symulator problemu producenta i konsumenta, dla dowolnej liczby producentów i konsumentów, którzy będą symulowani przez wątki. Producenci powinni co jakiś czas produkować pewien towar i umieszczać go w buforze o ograniczonej pojemności, np. 5. Konsumenci powinni co jakiś czas konsumować produkt pobierając go z bufora - bufor powinien być symulowany przez semafor.
Pracownicy (wątki) powinni być odpowiednio zsynchronizowani, przy pomocy semafora: Producent co jakiś czas, w sposób "losowy", decyduje, czy chce wyprodukować produkt. Konsument co jakiś czas w sposób "losowy", decyduje, czy chce skonsumować produkt.
Liczba producentów i konsumentów powinna być wczytana z pliku.

Zadanie 3. Napisz program, który będzie symulatorem sygnalizacji świetlnej na skrzyżowaniu dwóch ulic.
Symulator powinien składać się z: Proces nadzorujący powinien utworzyć dwa procesy potomne, które będą symulowały pasy ruchu.
Każdy z tych dwóch procesów potomnych (symulujący pas ruchu) powinien utworzyć dwa wątki: Proces nadzorujący powinien, co jakiś czas, wysyłać sygnał SIGUSR1 do "losowo" wybranego procesu symulującego pas ruchu.
Po odebraniu komunikatu SIGUSR1, proces symulujący pas ruchu powinien zapisać informację, że pojazd znajduje się na początkowej pozycji 50. Jeżeli światło jest zielone, (drugi) wątek symulujący ruch pojazdów powinien, co jakiś czas zmniejszać o 1, wartości odległości pojazdów.
Symulator powinien zakończyć działanie kiedy dojdzie do "wypadku", do którego może dojść w sytuacji: jeżeli, któryś proces symulujący pracę pasu ruchu, przyjął sygnał SIGUSR1 w momencie, kiedy zawiera już inny pojazd na pozycji 50.
Podpowiedzi: