Zadanie #
W tym zadaniu zasymulujemy Laboratorium SOP. Laboratorium składa się z n
(3 <= n <= 20
, jedyny parametr programu) studentów oraz jednego nauczyciela. Studenci rozwiązują zadanie podzielone na cztery etapy, warte odpowiednio 3, 6, 7 i 5 punktów. Każdy student ma poziom umiejętności k
(losowa liczba całkowita, 3 <= k <= 9
), który określa jego zdolność do rozwiązania zadania.
Etapy #
Tworzenie procesów:
- Proces główny (nauczyciel) tworzy
n
procesów potomnych (studentów). - Każdy student wypisuje swój identyfikator procesu (PID) i kończy działanie.
- Proces główny (nauczyciel) tworzy
Sprawdzanie obecności:
- Studenci komunikują się z nauczycielem za pomocą łączy nienazwanych.
- Wszyscy studenci piszą do jednego, wspólnego łącza, natomiast nauczyciel komunikuje się ze studentami przez indywidualne łącza.
- Nauczyciel sprawdza listę obecności, wysyłając do każdego studenta oraz na standardowe wyjście:
Teacher: Is [PID] here?
. - Studenci odpowiadają
Student [PID]: HERE
zarówno przez łącze, jak i na standardowe wyjście. - Po sprawdzeniu obecności wszyscy kończą działanie.
Rozwiązywanie zadań:
Po sprawdzeniu obecności studenci rozpoczynają pracę nad zadaniem. Każdy etap zadania przebiega według następujących kroków:
- Wylosowanie liczby całkowitej
t
z zakresu[100, 500]
. - Oczekiwanie
t
milisekund. - Wylosowanie liczby
q
z zakresu[1, 20]
, oznaczającej wynik ich próby. - Obliczenie wyniku próby jako
k + q
. - Wysłanie swojego PID-a i wyniku próby do nauczyciela.
- Nauczyciel porównuje wynik próby studenta z poziomem trudności (
d
), który jest sumą punktów za dany etap oraz losowej liczby z zakresu[1, 20]
. - Jeśli
k + q >= d
, student przechodzi etap pomyślnie; w przeciwnym razie go nie zalicza. Informacja o tym jest wysyłąna z powrotem do studenta. - Nauczyciel wypisuje jeden z komunikatów:
Teacher: Student [PID] finished stage [X]
(gdy zaliczył).Teacher: Student [PID] needs to fix stage [X]
(gdy nie zaliczył).
- Jeśli student ukończył wszystkie cztery etapy, wypisuje
Student [PID]: I NAILED IT!
i kończy działanie.
- Wylosowanie liczby całkowitej
Nauczyciel oczekuje na zakończenie wszystkich studentów. Gdy wszyscy skończą, nauczyciel wypisuje
Teacher: IT'S FINALLY OVER!
i kończy działanie.
Ograniczenie czasowe:
- Laboratorium może zakończyć się, jeśli skończy się czas przewidziany na zadanie. Obsługę tego przypadku realizuje funkcja
alarm(2)
, uruchamiana po sprawdzeniu obecności. - Po otrzymaniu sygnału
SIGALRM
nauczyciel wypisujeTeacher: END OF TIME!
, przestaje oceniać studentów, wypisuje tabelę wyników, zwalnia zasoby i kończy pracę. - Każdy ze studentów wykrywa, że nauczyciel zakończył pracę i wypisuje
Student [PID]: Oh no, I haven't finished stage [X]. I need more time.
przed zakończeniem działania.
- Laboratorium może zakończyć się, jeśli skończy się czas przewidziany na zadanie. Obsługę tego przypadku realizuje funkcja
Przykładowe wyjście #
./sop-lab 5
Student: 47807
Student: 47808
Student: 47809
Student: 47810
Teacher: 47806
Teacher: Is 47807 here?
Student 47807: HERE!
Teacher: Is 47808 here?
Student: 47811
Student 47808: HERE!
Teacher: Is 47809 here?
Student 47809: HERE!
Teacher: Is 47810 here?
Student 47810: HERE!
Teacher: Is 47811 here?
Student 47811: HERE!
Teacher: Student 47808 finished stage 1
Teacher: Student 47809 finished stage 1
Teacher: Student 47811 finished stage 1
Teacher: Student 47807 needs to fix stage 1
Teacher: Student 47810 finished stage 1
Teacher: Student 47809 finished stage 2
Teacher: Student 47807 finished stage 1
Teacher: Student 47808 needs to fix stage 2
Teacher: Student 47810 finished stage 2
Teacher: Student 47811 needs to fix stage 2
Teacher: Student 47807 needs to fix stage 2
Teacher: Student 47809 finished stage 3
Teacher: Student 47810 needs to fix stage 3
Teacher: Student 47808 needs to fix stage 2
Teacher: Student 47807 needs to fix stage 2
Teacher: Student 47809 needs to fix stage 4
Teacher: Student 47811 needs to fix stage 2
Teacher: Student 47807 needs to fix stage 2
Teacher: Student 47809 needs to fix stage 4
Teacher: Student 47807 finished stage 2
Teacher: Student 47811 needs to fix stage 2
Teacher: Student 47810 needs to fix stage 3
Teacher: Student 47808 needs to fix stage 2
Teacher: Student 47809 needs to fix stage 4
Teacher: Student 47807 finished stage 3
Teacher: Student 47811 finished stage 2
Teacher: Student 47810 needs to fix stage 3
Teacher: Student 47808 needs to fix stage 2
Student 47807: I NAILED IT!
Teacher: Student 47807 finished stage 4
Teacher: END OF TIME!
Teacher: 47807 - 21
Teacher: 47808 - 3
Teacher: 47809 - 16
Teacher: 47810 - 9
Teacher: 47811 - 9
Teacher: IT'S FINALLY OVER!
Student 47809: Oh no, I haven't finished stage 4. I need more time.
Student 47810: Oh no, I haven't finished stage 3. I need more time.
Student 47811: Oh no, I haven't finished stage 3. I need more time.
Student 47808: Oh no, I haven't finished stage 2. I need more time.