2012-07-30 21 views
9
  1. Kiedy jeden proces wysyła sygnał do innego procesu, w jakich okolicznościach proces odbierający oczekuje na zaplanowane uruchomienie?
  2. W jakich okolicznościach zainstalowana obsługa sygnału zostanie natychmiast wywołana?
  3. Ile kosztu ma proces podczas podnoszenia sygnału w porównaniu do zwykłego wywołania odpowiedniej procedury obsługi sygnału bezpośrednio?

Odpowiedz

5

O dostarczania sygnałów TLPI stwierdza, że ​​sygnały są „normalnie” wydana, gdy zadanie jest obok rozkładowe, po przełączeniu z trybu jądra do trybu użytkownika lub „natychmiast”, gdy zadanie jest już uruchomiony (przypuszczalnie „natychmiast "musiałoby się zdarzyć, najpierw wystrzeliwując przerwanie, inaczej jak to możliwe). Cokolwiek to oznacza, nie jest ściśle wiążące, ale jest bardzo zbliżone do tego, co się dzieje.

Należy odróżnić sygnały czasu rzeczywistego od sygnałów "normalnych", a także "normalne", generowane synchronicznie, przez większość czasu ze względu na zdarzenie sprzętowe (np. Błąd segmentacji) i te, które nie są ("genereated asydronicznie").

Sygnały w czasie rzeczywistym to w kolejce, normalne sygnały nie są. Oznacza to, że implementacja normalnych sygnałów jest najprawdopodobniej po prostu czymś w rodzaju jednego zadania na zadanie, które służy jako maska ​​bitowa.
Generowanie "normalnego" sygnału oznacza ustawienie bitu, a gdy system operacyjny następnie decyduje, czy sygnał ma zostać dostarczony, testuje słowo na zero, aw razie potrzeby określa, który bit (y) zostały ustawione i wywołuje obsługa sygnału, jeśli istnieje, odpowiednio.
Jedynym praktycznym powodem, dla którego trzeba to wiedzieć, jest możliwość "utraty" sygnałów. Jeżeli dwa lub więcej sygnałów zostanie wygenerowanych przed dostarczeniem pierwszego, to wciąż jest tylko jeden sygnał.

Wdrożenie sygnałów w czasie rzeczywistym (które są wymagane do kolejkowania do długości zależnej od implementacji) jest oczywiście znacznie bardziej skomplikowane.

Sygnały, które występują z powodu zdarzenia sprzętowego (np. Segfault), są generowane synchronicznie, w taki sam sposób, jak w przypadku procesu o nazwie kill samego w sobie (rozdział 22.4 TLPI), tj. Są dostarczane "natychmiast" z dwóch powodów. Po pierwsze, nie ma sensu robić czegoś innego, a po drugie następuje przełączenie jądra/użytkownika, gdy program obsługi pułapek powraca. Tak więc dostawa jest zawsze "natychmiastowa".

0

Zasadniczo sygnały są asynchroniczne. Opierają się na modułach obsługi sygnałów, aby wykonać kod po odebraniu sygnału, ponieważ nigdy nie wiadomo, kiedy będzie to spowodowane czynnikami, takimi jak harmonogram procesu. Opóźnienie wysłania sygnału zależy od przerwania sprzętowego/programowego, które jest oparte na częstotliwości zegara.

Jeśli chcesz dowiedzieć się, jak coś jest zaimplementowane w systemie Linux, sprawdź standardy POSIX.

Wielki informacje o sygnałach:

http://www.gnu.org/software/libc/manual/html_node/index.html#toc_Signal-Handling

Gdy sygnał jest generowany, staje oczekiwaniu. Zwykle pozostaje on w stanie oczekiwania przez krótki okres czasu, a następnie dostarczono do procesu, który został zgłoszony jako . Jednakże, jeżeli ten rodzaj sygnału jest obecnie zablokowany, może on pozostawać w oczekiwaniu na czas nieokreślony - aż sygnały tego rodzaju są odblokowane odblokowane. Po odblokowaniu zostanie natychmiast dostarczony .

Kolejny fragment:

Gdy sygnał jest dostarczany, czy od razu lub po długim zwłoki określone działanie dla tego sygnału jest podjąć.

Powiązane problemy