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