Zakres laboratorium:
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.