Zakres laboratorium:
- praca z procesami systemu linux (KSS-wyklad-procesy)
- tworzenie procesu potomnego
- komunikacja pomiędzy procesami, semafory (KSS-semaforyPosix)
Zadanie 1 – ocena 3
Utworzyć program:
- zawierający 2 procesy potomne, przy użyciu funkcji “fork”, co to są procesy potomne?
- procesy potomne wypisują na ekranie komunikat “Proces potomny PID: numerProcesu, krok: krokProcesu”, gdzie numer procesu i krokProcesu to odpowiednie zmienne, co jedną sekundę,
- proces macierzysty wypisuje na ekranie “Proces macierzysty krok: krokProcesu”,
- procesy potomne wykonują 15 kroków, macierzysty 10 kroków,
- co się dzieje, jak proces macierzysty kończy swoje działanie? w jakim stanie znajdują się w tedy procesy potomne?
Zadanie 2 – ocena 3,5
Zmodyfikować program z zadania 1:
- dodać oczekiwanie procesu macierzystego na zakończenie wszystkich procesów potomnych,
- po zakończeniu wszystkich procesów potomnych, powinien pojawić się komunikat “Zakończono procesy potomne”
- jak zmieni się wypisywana treść na ekranie w porównaniu do zadania 1?
- jeśli zmodyfikujemy proces macierzysty aby wykonywał 20 kroków, to będzie działał dłużej niż procesy potomne. W jakim stanie będą procesy potomne po zakończeniu się ale gdy proces macierzysty jeszcze działa?
- do czego służy funkcja “exit” jakie przyjmuje parametry?
Zadanie 3 – ocena 4
Czym są semafory nienazwane i semafory nazwane? Gdzie je wykorzystujemy?
Utworzyć program producent-konsument, wykorzystać funkcje do pracy z semaforami “sem_open”, “sem_init”, “sem_wait” itd.:
- producentem jest proces potomny a konsumentem proces macierzysty, wykonują się w krokach co 1 sekundę, wykonują po 10 kroków i kończą swoje działanie.
- utworzyć strukturę, która będzie współdzielona pomiędzy producenta a konsumenta, struktura powinna posiadać pole licznika (producent zwiększa licznik, konsument zmniejsza) i inne potrzebne pola do synchronizacji,
- wykorzystać semafor nienazwany do zabezpieczenia dostępu do struktury, jednocześnie tylko jedne proces może wprowadzać modyfikacje, wzajemne wykluczanie,
- konsument zmniejsza licznik i wypisuje jego wartość na ekranie, producent zwiększa licznik i wypisuje jego stan na ekranie
- jak działa program?
Zadanie 4 – ocena 4,5
Zmodyfikować program z zadania 3:
- dodać jeszcze jednego producenta,
- jak teraz działa program, jaka może być maksymalna wartość licznika obecnie?
- skasować z procesu konsumenta funkcję opóźniająca o 1 sekundę i wykorzystać funkcję “sem_timedwait” aby oczekiwała na semaforze na nowe zasoby od producentów?
- jak teraz działa program?
Zadanie 5 – ocena 5
Zmodyfikować program z zadania 4:
- przerobić program aby wykorzystywał do synchronizacji semafory nazwane,
- zmienić strukturę tak aby licznik był tablicą na 100 elementów,
- producenci dodają swój numer PID do tablicy na kolejną pozycję, index tablicy należy umieścić w strukturze,
- konsument odczytuje tablicę i jak następuje jej zmiana (dodanie nowego elementu) to wyświetla na ekranie jej zawartość rozdzieloną przecinkami.