Do strony głównej

 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 oczywi˜cie 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 pozostaˆych procesów w systemie nie będzie się jednocze˜nie 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 obsˆużyli˜śmy poprzedni). Oczywi˜ście można zaimplementować† bardziej skomplikowany (lub by†c 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