Zadanie
Zaimplementuj mechanizm komunikacji między procesami
wykorzystujący sygnały. Użyj w tym celu sygnałów pozostawionych do zdefiniowania
przez użytkownika: SIGUSR1 i SIGUSR2 oraz sygnałów pozostawionych bez
implementacji: SIGUNUSED i SIGSTKFLT. Ponieważ tradycyjna implementacja
sygnałów nie pozwala na przenoszenie przez nie żadnej informacji (wiadomo
tylko, że sygnał nadszedł), należy zmienić tę implementację na potrzeby
zadania. Można to oczywicie zrobić w sposób radykalny (kolejkując sygnały
i pozwalając by przenosiły każdą możliwą informację); ja jednak proponuję
tu uproszczoną wersję komunikacji, która pozwala wymieniać informacje
tylko przez dwa procesy między sobą to znaczy proces w czasie komunikowania
się z jednym z pozostaych procesów w systemie nie będzie się jednoczenie
komunikował z innymi). Proponowana przeze mnie zmiana implementacji dotyczy
jedynie dodania do struktury task_struct procesu pól związanych z wykorzystywanymi
w mechanizmie komunikacji sygnałami tak, by było gdzie zapisać przenoszone
przez nie informacje.
Na potrzeby zadania należy najpierw zmienić nazwy sygnałów:
Proponowany scenariusz działania:
UWAGA: Ten schemat ze względu na fakt, że w Linuxie nie ma kolejkowania sygnałów danego typu, nie pozwala na komunikację jednego procesu z kilkoma innymi jednocześnie - mogą zaginąć na przykład sygnały SIGCOMM, gdy któryś kolejny zdąžy nadejść zanim obsużyliśmy poprzedni). Oczywiście można zaimplementować bardziej skomplikowany (lub byc może dużo prostszy), ale bardziej wydajny mechanizm komunikacji wykorzystujący sygnały i takie rozwiązania będą równiež mile widziane.
Autor : Piotr Leśniewski