- Kiedy jeden proces wysyła sygnał do innego procesu, w jakich okolicznościach proces odbierający oczekuje na zaplanowane uruchomienie?
- W jakich okolicznościach zainstalowana obsługa sygnału zostanie natychmiast wywołana?
- 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
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".
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ąć.
- 1. Ile czasu zajmuje klasyfikator SVM pociągu?
- 2. Ile czasu zajmuje wprowadzenie zmian .htaccess?
- 3. Ile czasu zajmuje Glibc na kompilację?
- 4. Ile czasu zajmuje aplikacja iAd, aby zacząć generować wyświetlenia?
- 5. Ile czasu zajmuje wprowadzanie zdecydowanie wpisanych zmian w npm @types?
- 6. Ile czasu zajmuje utworzenie miliona nici w Haskell?
- 7. Ile czasu zajmuje początkowe wyświetlanie celów Google Analytics?
- 8. Python: Ile miejsca zajmuje każdy element listy?
- 9. Dlaczego IIS7 zajmuje dużo czasu?
- 10. Regex zajmuje zaskakująco dużo czasu
- 11. Czy istnieje łatwy sposób na określenie, ile czasu zajmuje oczekiwanie na GIL Pythona?
- 12. Ile czasu zajmuje przesłanie wiadomości z Google Cloud Messaging na urządzenie?
- 13. Jaki jest najlepszy sposób na sprawdzenie, ile czasu zajmuje funkcja C++?
- 14. Co decyduje o tym, ile czasu zajmuje serwer COM poza procesem, aby zauważyć, że klient zginął?
- 15. Dodaj do hashmap zajmuje dużo czasu
- 16. Eclipse zajmuje dużo czasu, aby zapisać web.xml
- 17. XSSFWorkbook zajmuje dużo czasu, aby załadować
- 18. AWS Klej zajmuje dużo czasu, aby zakończyć
- 19. UITextView dostarczenie nieprawdziwych daszka rect
- 20. Jak mogę określić, ile pamięci zajmuje aplikacja .Net?
- 21. Uzyskaj ile czasu subprocess python spędza
- 22. Ile% czasu programowania spędzasz na debugowaniu?
- 23. Ile czasu należy poświęcić na zbieranie śmieci?
- 24. Używanie web.py jako niezablokowanego serwera http
- 25. du -h --max-depth = 1 zajmuje dużo czasu
- 26. IntelliJ IDEA zajmuje dużo czasu podczas odświeżania projektu Gradle
- 27. Dlaczego "/^(.+)+Q$/.test("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") zajmuje tak dużo czasu?
- 28. Android: tworzenie przestrzeni roboczej eclipse zajmuje dużo czasu?
- 29. Dodawanie wielu nakładek w widoku mapy zajmuje więcej czasu.
- 30. SDK 2.0 - Schemat zajmuje wyjątkowo dużo czasu, aby załadować