12 zadanie z Systemów Operacyjnych
 

 
Spis treści

1.  Wprowadzenie
2.  Treśc zadania



Wprowadzenie

  Tematem tego zadania są sygnały. Jak wiadomo odebranie przez proces sygnału daje mu tylko informację jakosciową: został zgłoszony sygnał, nie dając informacji ilościowej, tzn. czy sygnał był zgłoszony raz, czy może więcej razy. Celem tego zadania jest taka zmiana jądra systemu by procedura obsługi sygnału była wywoływana tyle razy ile razy sygnał był wysłany, dzięki czemu informacja ilościowa nie będzie gubiona. Poszerzy to trochę pole zastosowania sygnałow.


Treść zadania
 
   Zmodyfikuj jądro systemu tak, aby "nie gubiono" wysyłanych sygnałow. Należy zapewnić możliwośc właczenia/wyłączenia tego rozszerzenia przez proces. Domyślnie wszystkie sygnały powinny zachowywać się w sposób tradycyjny.
   Należy: w strukturze task_struct dodać tablicę liczników sygnałów (dla każdego sygnału osobny licznik). W tej samej strukturze pamiętana powinna być też tablica znaczników mówiących dla których sygnałów należy stosować kolejkowanie sygnałów a dla których nie. Mozna to zrobic w osobnym polu task_struct albo wykorzystujac liczniki sygnalow rezerwujac wartosc -1 dla nieuzywanych licznikow.
   Trzeba oczywiście zmodyfikować odpowiednie funkcje jądra: fork (inicjalizacja dodanych pól), procedury wysyłające sygnały (z plików kernel/signal.c, kernel/exit.c), procedury odbierające sygnały (z pliku arch/i386/kernel/signal.c), definicje task_struct (plik include/linux/sched.h).
   Oprócz tego trzeba zapewnić procesom możliwość włączania i wyłączania liczników dla poszczególnych sygnałów. Można to zrobić albo definiujac własną procedurę systemową lub modyfikując istniejącą procedurę sigprocmask (dając dodatkowe znaczenie zmiennej how).
    Na koniec trzeba też napisać przykładowe procesy które wykorzystają nowe możliwości jądra, np. jeden proces - licznik, zmniejszany sygnałem SIGUSR1 a zwiększany sygnałem SIGUSR2 (powinien on po odebraniu sygnału blokować następne przez np. sekundę) oraz drugi proces na przemian zwiększający i zmniejszający licznik.     


Autor: Andrzej Nagórko