Zakres laboratorium:
Forma oceny-sprawozdanie:
- sprawozdanie z wykonanych zadań,
- działania każdego programu należy udokumentować przez wykonanie zrzutu ekranu i wklejenie go do sprawozdania z odpowiednim opisem,
- odpowiedzi na pytania do zadań należy umieścić w sprawozdaniu,
- sprawozdanie wysyłamy przez eportal w wyznaczonym terminie i prezentujemy prowadzącemu na zajęciach,
- na prezentacji sprawozdania należy mieć przygotowane wszystkie programu ze sprawozdania w w celu ich pokazania.
Zadanie 1
Symulator interfejsu komunikacyjnego, w jednym czasie tylko jeden wątek może wysyłać swoje informacje. W poniższym zadaniu będziemy symulować interfejs komunikacyjny na podstawie tablicy. Wątki wysyłają swój własny numer przez wykorzystanie funkcji “sendData”. Funkcja wysyła/dopisuje kolejną wiadomość/liczbę do tablicy i czeka losowy czas- symulacja interfejsu gdzie następuje komunikacja z inną maszyną, wysyłamy jakieś dane a operacja może potrwać od 2-10 sekund.
- co to jest sekcja krytyczna, opisać i wymienić kilka przykładów takiej sekcji,
- utworzyć program składający się z 4 wątków wykonywanych co 5 sekund,
- utworzyć tablicę składająca się z 100 elementów typu int – symulacja jakiego interfejsu komunikacyjnego,
- utworzyć semafor do blokady sekcji krytycznej,
- utworzyć funkcję “sendData(int numerWatku)”:
- parametr numerWatku – numer wątku przez jaki została wywołana,
- funkcja na początku sprawdza czy może wejść do sekcji krytycznej – czy semafor jest wolny,
- jeśli sekcja krytyczna jest używana przez jakiś inny wątek to funkcja zwraca false,
- jeśli sekcja krytyczna jest nieużywana to blokuje do niej dostęp i wykonuje operacje w podanej kolejności:
- dodaje numerWatku jako kolejną pozycję do tablicy,
- jeśli tablica się przepełni to wyświetlamy na ekranie “koniec bufora” i nie dodajemy kolejnej liczby,
- czeka losowy czas od 2-10 sekund,
- wypisuje na ekranie czas programu i zawartość tablicy, kolejne liczby rozdzielone przecinkiem przykładowy (48454545-1,2,3,4,3,2,1)
- odblokowuje sekcje krytyczną
- funkcja kończy swoje działanie i zwraca true
- każdy wątek uruchamia funkcje sendData ze swoim numerem:
- jeśli funkcja zwróci false to wątek wypisuje na ekranie “dostęp zabroniony przez sekcje krytyczną”
- jeśli zwróci true to nic nie wyświetla
Zadanie 2
Program zaprezentuje schemat klasycznego problemu producent-konsument. Należy utworzyć następujący program i przetestować jego działanie:
- stworzyć 3 wątki wykonywane co 5-10-15 sekund, będą to producenci,
- stworzyć jeden wątek konsumenta wykonywany co 1 sekundę,
- stworzyć strukturę danych zawierającą 3 pola (int numerWatku, int numerWywolania, TickType_t czasProdukcji),
- na podstawie struktury danych utworzyć kolejkę “xQueueCreate” na 10 elementów,
- każdy wątek producenta dodaje do kolejki strukturę uzupełnioną swoimi danymi “xQueueSend”, jeśli nie ma miejsca to musi poczekać,
- konsument oczekuje (blokuje się na kolejce-“xQueueReceive”) na nowe dane, jeśli przyjdą nowe dane to wyświetla na ekranie w jednej linii: K1:numerWatku;numerWywolania;roznicaCzasu,iloscPozostala, gdzie “roznicaCzasu” to różnica między aktualnym czasem programu a czasem produkcji dla danej informacji, “iloscPozostala” to ilość pozostałych wiadomości w kolejce,
- jak działa ten program, narysować schemat blokowy i dodać do sprawozdania, czy może dojść do zablokowania programu?
Zadanie 3
Zmodyfikować program z zdania 2:
- ustawić wątki producentów aby uruchamiały się co 5 sekund,
- ustawić wątek konsumenta aby uruchamiał się co 5 sekund,
- jak teraz będzie działał program, czy dojdzie do zablokowania producentów? Dlaczego, jak możemy rozwiązać problem?
Zadanie 4
Zmodyfikować program z zadania 3:
- dodać jeszcze jeden wątek konsumenta uruchamiany co 2 sekundy, wątek ma wyświetlać komunikat rozpoczynający się od K2,
- jak teraz działa program, który konsument częściej zostanie wywołany i dlaczego?
Zadanie 5
Zmodyfikować program z zadania 4:
- ustawić priorytety dla wątków producentów na 4, konsument-1 na 1 i konsument-2 na 2,
- jak teraz działa program, który konsument częściej zostanie wywołany i dlaczego? Czy są zmiany w porównaniu do programu 4?