SYSTEMY OPERACYJNE II ROK INFORMATYKA TEMATY
Transkrypt
SYSTEMY OPERACYJNE II ROK INFORMATYKA TEMATY
SYSTEMY OPERACYJNE II ROK INFORMATYKA TEMATY PROJEKTÓW 1. fork-exec. Napisać program wypisujący identyfikatory UID, GID, PID, PPID dla danego procesu. 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. 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?. 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 - synchronizacja. Rozwiązać zadanie synchronizacji trzech procesów przy pomocy semaforów: P1: t11, t12 P2: t21, t22, t23 P3: t31, t32, t33 Kolejność czasowa zdefiniowana jest zbiorem par G={(t21,t31),(t32,t22),(t22,t11),(t12,t23),(t23,t33)}. JeŜeli para (a,b) naleŜy do zbioru, to akcja b musi być poprzedzona akcją a. KaŜdy z tasków tij(dla i,j=1,2,3) wyprowadza na ekran ciąg znaków: Sekcja tij procesu o PID=tu podaje PID procesu, oraz powyŜszy ciąg znaków zapisuje w pliku o nazwie spr1.txt. KaŜdy z tasków kończy się funkcją: sleep(1); Napisz program do generowania procesów P1, P2, P3 w oparciu o funkcje fork(), exec(). W programie tym naleŜy utworzyć oraz usunąć (po zakończeniu procesów P1, P2, P3) zbiór semaforów uŜyty do synchronizacji. 4. 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 5. pamięć dzielona - semafory - sekcja krytyczna – producent-konsument. Producent zajmuje się produkcją towaru(np. liczb, znaków) i umieszczaniu ich we wspólnym buforze (pamięć dzielona), 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). Wykorzystać jako bufor segment pamięci dzielonej. 6. 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. 7. potoki nazwane (mkfifo) i nienazwane (pipe) – producent-konsument. Zadanie jak w pkt.4. Uogólnić zadanie na wielu producentów i wielu konsumentów. 8. gniazdo (socket) – klient-serwer. Zadanie jak w pkt.5 z wykorzystaniem gniazda internetowego.