ZADANIE NR 2 – FAQ
2014-12-18
-
Czy powinno być
Głosów nieważnych: j
?
-
Nie, to moja pomyłka. Poprawka w treści oznaczona jest na czerwono.
-
Podobnie z K zamiast M w raporcie.
-
Czy każdy wątek może alokować osobną tablicę L * K?
-
Tak, ale przy takim podejściu proszę wprowadzić ograniczenie na maksymalną liczbę wątków
lub rozmiar pamięci na takie bufory w formie stałej w programie serwer lub pliku nagłówkowym.
Ograniczenie ma działać w taki sposób, że klienci będą czekać na obsłużenie jeśli w danej
chwili nie można utworzyć kolejnego wątku.
W razie gdyby miały się teraz pojawić pytania o wartość tej stałej - myślę że wartość rzędu 100 wątków będzie OK.
Co należy robić gdy klient komisja wykryje niezgodność pomiędzy swoimi danymi
a potwierdzeniem od serwera?
Nie jest to wyspecyfikowane i macie tu Państwo dowolność w implementacji.
W szczególności można ten fakt zignorować.
2014-12-20
-
Przetworzonych komisji: x / M
Czy w tym miejscu /
oznacza dzielenie czy wypisanie znaku "slash"?
-
W tym miejscu chodzi o znak.
-
W jakim formacie należy wypisywać dane procentowe (frekwencję)?
Z jaką dokładnością? Czy wypisywać znak
%
?
-
Należy wypisać wartość wyrażoną w procentach (czyli iloraz pomnożony przez 100),
natomiast precyzji można użyć dowolnej (można w szczególności zaokrąglić do liczby całkowitej albo wypisywać w sposób domyślny); nie jest też określone czy znak
%
ma się pojawić: może (za liczbą), ale nie musi.
-
Czy komisja musi przesłać swoje zbiorcze wyniki w pojedynczym komunikacie?
-
Nie. Jeśli przyczyną takiej interpretacji jest zdanie
Dla danej komisji m dopuszczalne jest tylko jednorazowe połączenie w celu przesłania wyników
, to wyjaśniam, że nie chodzi tu o pojedynczy komunikat, tylko jedną "sesję" komunikacji.
Komisja nie może nadpisać wcześniej już przesłanych wyników (co tak naprawdę jest dla Państwa ułatwieniem, bo wyniki można dzięki temu sumować na bieżąco).
W praktyce - program komisja uruchomiony z tym samym m,
które już raz było wykorzystane, ma zakończyć się
porażką po próbie komunikacji z serwerem.
Natomiast sesja komunikacji między komisją a serwerem może składać się
z wielu komunikatów.
2014-12-21
-
Jakie limity rozmiaru komunikatu nas obowiązują?
-
Takie jak na students (ipcs -l): 8 KiB rozmiar komunikatu, 16 KiB rozmiar kolejki. Przy czym to drugie i tak nie powinno być kluczowe dla rozwiązania; po prostu trzeba mieć świadomość, że kolejki są skończone. Rozmiar komunikatu jest oczywiście istotny.
- Czy raport może wstrzymywać wszystkie komisje, a komisja inne komisje i raporty?
Czy chodzi o zaimplementowanie rozwiązania klasycznego problemu czytelników i pisarzy (gdzie czytelnik = raport, pisarz = komisja)?
-
Nie do końca. Wiele komisji powinno móc współbieżnie przysyłać wyniki i
tu dokonujemy ochrony na poziomie pojedynczych wartości.
Ze względu na wypisywanie zbiorczych
statystyk przez każdy raport (nawet taki wypisujący tylko jedną listę)
rzeczywiście nie bardzo jest jak uwspółbieżniać raporty z komisjami.
-
Czy mamy zapewnić atomowość aktualizacji wyników, tzn. czy raport może
zaobserwować sytuację gdy (podczas odbierania wyników od komisji)
część list została już zaktualizowana, a część jeszcze nie?
-
"Wyniki wypisywane w raporcie muszą
być spójnym obrazem danych ..."
Jeśli to było niejasne, to już tłumaczę.
Raport ma zawierać dane odpowiadające sytuacji, gdy pewna część komisji
przesłała już swoje dane w całości, a reszta nie zaczęła ich jeszcze wysyłać.
Sformułowanie było tak ogólne (jeśli przez to niejasne - przepraszam),
aby nie wymuszać jednego sposobu rozwiązania (synchronizacji między procesami);
chodzi tylko o zawartość danych.
Przypominam, że przy tym
- mamy umożliwić współbieżne działanie wielu komisji (patrz odp. wyżej),
- nie chcemy doprowadzić do zagłodzenia,
- ani oczywiście do żadnego zastoju.
-
Czy można użyć tablic o stałych rozmiarach?
-
Wolałbym tablice alokowane dynamicznie na podstawie parametrów.
40 kB to nie jest jakiś gigantyczny rozmiar, ale te limity
są do pewnego stopnia "przykładowe", a rozwiązanie powinno być bardziej
ogólne.
-
Czy w przypadku kończenia serwera sygnałem SIGINT serwer może wysłać sygnał do klientów?
-
Tak, może.
-
Czy można użyć semaforów POSIXowych do eleganckiego rozwiązania problemu kończenia wątków serwera?
-
Tak, zgodziłem się na to. Ale do zasadniczej ochrony danych proszę użyć mechanizmów z pthread w nazwie.
2014-12-22
-
Czy można używać rozszerzeń GNU C / C99? Czy program musi kompilować się z flagą ANSI?
-
To ma być C (a nie C++), ale można używać najbardziej popularnych
rozszerzeń GNU C i C 99 (np. deklaracja z inicjalizacją). Flagi ANSI być
nie musi.
-
Czy trzeba jawnie zwalniać mutexy itp.?
-
Jeśli chodzi o moment kończenia serwera – nie trzeba.
Większość zasobów, w tym pamięć, mutexy, rwlocki, zmienne warunkowe, wątki,
jest zwalniana wraz z zakończeniem procesu. Inaczej jest z kolejkami,
które muszą być usunięte jawnie (to naturalne, bo nie należą do żadnego procesu).
Trzeba natomiast jawnie zwalniać zasoby, które są w serwerze używane
tymczasowo (np. tylko na czas obsługi jednego klienta), gdyż ich nie
zwalnianie doprowadzi do wycieku zasobów i serwer nie będzie mógł
działać "dowolnie długo".