SYSTEMY OPERACYJNE - LABORATORIUM

Transkrypt

SYSTEMY OPERACYJNE - LABORATORIUM
SYSTEMY OPERACYJNE - LABORATORIUM - SEMESTR 2
TEMATY PROJEKTÓW
1. fork-exec.
Napisać program wypisujący identyfikatory UID, GID, PID, PPID dla danego procesu (program1_1).
Wywołać funkcję fork() 3 razy np. w pętli i wypisać powyŜsze identyfikatory dla wszystkich procesów
potomnych. Na podstawie wyników narysować „drzewo genealogiczne” tworzonych procesów. Ile powstaje
procesów i dlaczego (program1_2).
Zmodyfikować poprzedni program tak, aby komunikaty procesów potomnych były wypisywane przez program
uruchamiany przez funkcję exec(). Ile teraz powstaje procesów i dlaczego? (program1_3).
2. wątki.
Napisać program złoŜony w 2 wątków. Wątek główny losowo generuje elementy tablicy np. int tab[2][10].
Wątek 1 liczy sumę elementów pierwszego wiersza tablicy. Wątek 2 liczy sumę elementów drugiego wiersza
tablicy. Wątek główny liczy sumę całkowitą z sum cząstkowych wyznaczonych przez wątki.
3. semafory - sekcja krytyczna – wzajemne wykluczanie.
Przy pomocy mechanizmu semaforów zrealizować zadanie na wzajemne wykluczanie procesów. Czas operacji
na zasobie symulować uŜywając np. funkcji sleep(). Dla demonstracji poprawności działania programu uŜyć
komunikatów wypisywanych przez poszczególne procesy przed, w trakcie i po sekcji krytycznej (sk) oraz
funkcji podających stan semafora. Napisać specjalny program do powielania procesów wykorzystujący funkcje
fork() i exec(). Nazwę programu do inicjowania procesów oraz liczbę procesów przekazywać przez argumenty
programu powielacza.
Przykładowe wywołanie „powielacza”.
./program_główny program_potomny liczba_pp liczba_sk
gdzie,
liczba_pp
- liczba procesów potomnych rywalizujących o sk.
liczba_sk
- liczba wykonań sk przez kaŜdy z procesów potomnych
[]$ ./prog pogram 3 2
4. semafory - sekcja krytyczna – producent-konsument.
Producent zajmuje się produkcją towaru (np. liczb, znaków) i umieszczaniu ich we wspólnym buforze (np.
pliku), który moŜe pomieścić tylko jedną jednostkę towaru naraz. Konsument pobiera towar (nie niszcząc
bufora) i konsumuje go.
Aby panowała harmonia, muszą być spełnione dwa warunki:
• KaŜda wyprodukowana jednostka towaru musi zostać skonsumowana,
• śadna jednostka towaru nie moŜe być skonsumowana dwa razy (nawet jeśli konsument jest szybszy niŜ
producent).
Wykorzystując mechanizm semaforów zaimplementuj powyŜsze zadanie. Dla zademonstrowania, Ŝe nie doszło
do utraty lub zwielokrotnienia towary niech producent pobiera „surowiec” (liczby, znaki) do wytwarzania
towaru z pliku tekstowego, a konsument umieszcza pobrany towar w innym pliku tekstowym. Po zakończeniu
działania programów (wyczerpaniu zasobów „surowca”) oba pliki tekstowe powinny być identyczne. Do
symulacji róŜnych prędkości działania programów uŜyć np. funkcji sleep() (z losową liczbą sekund).
5. kolejki komunikatów – klient-serwer.
Proces klient wysyła do procesu serwera ciąg znaków. Serwer odbiera ten ciąg znaków i przetwarza go
zmieniając w nim wszystkie litery na duŜe, a następnie wysyła tak przetworzony ciąg znaków z powrotem do
klienta. Klient odbiera przetworzony ciąg znaków i wypisuje go na ekranie.
Posługując się mechanizmem kolejki komunikatów, naleŜy zaimplementować powyŜsze zadanie typu klientserwer z moŜliwością obsługi wielu klientów jednocześnie. W rozwiązaniu uŜyć jednej kolejki komunikatów.
Zastosować odpowiednie etykietowanie komunikatów w celu rozróŜniania w kolejce danych dla serwera oraz
danych dla poszczególnych klientów.