poll_schedule_timeout
poll()
to wywołanie systemowe 1 używane do obsługi we / wy. Jest podobny do select()
. 2)
Aplikacje korzystające z nieblokujących wejść / wyjść używają tych wywołań, aby sprawdzić, czy potrafią czytać lub zapisywać pliki, bez konieczności ich blokowania. Są często używane do strumieni wejściowych / wyjściowych, które mogą nie zostać zablokowane (w przeciwnym razie być może mysz przestałaby się poruszać).
Kanał oczekiwania poll_schedule_timeout
wskazuje, że zadanie oczekuje na operacje we / wy, albo sprzęt, jak klawiatury i myszy, urządzenia dźwiękowe, a nawet gniazda sieciowe.
- Funkcja w jądrze
- Są zdefiniowane w
<linux/poll.h>
. poll
była implementacją po raz pierwszy widzianą w Systemie V, select
jest odpowiednikiem UND BSD.
futex_wait_queue_me
:
Aby to wyjaśnić, musimy spojrzeć na Locks. Blokada to stan zapisany w systemie, który wskazuje, że zadanie działa z zasobem. Może być na przykład tylko jedno zadanie, które odczytuje plik. To zadanie zablokuje plik, każde inne zadanie 1, które spróbuje odczytać plik, będzie wiedziało, że jest zablokowane, i zaczeka, aż zamek zniknie, zanim będzie mógł uzyskać do niego dostęp. To samo dzieje się z czasem procesora.
Nowoczesna wersja Linuksa (w większości architektur) używa blokady jądra Futex (szybki muteks przestrzeni użytkownika). Mutex, wzajemne wykluczenie, odnosi się do idei, że do wspólnego zasobu można uzyskać dostęp tylko przez jedno zadanie w dowolnym momencie. W tym celu ustawiane są flagi w systemie.
Jeśli proces czeka na zablokowany zasób, nazywa się to Zajęty Oczekiwaniem
lub „Wiruje”, co oznacza fakt, że próbuje uzyskać do niego dostęp w kółko, dopóki nie będzie w stanie. Zadanie jest blokowane, gdy się obraca.
Blokady Futex można traktować jako liczbę w przestrzeni użytkownika, która może być zwiększana lub zmniejszana przez zadanie (w przypadkach, gdy do zasobu można uzyskać dostęp za pomocą wielu zadań, liczba ta może być większa niż jeden). Jest to liczba pokazana na schemacie 4 .
Zadania te umieszczają się w kolejce oczekiwania , prostej kolejce zadań, które wymagają pewnej pracy. Gdy czas przetwarzania będzie dostępny, zadania wykonają swoją pracę i zostaną usunięte z kolejki.
futex_wait_queue_me
kolejkuje zadania. Następnie czeka na sygnał, przerwę lub budzenie. Zadania, które znajdują się w tym kanale oczekiwania, czekają nie w kolejce oczekiwania, czekają na kolejkowanie.
- Zadanie może być procesem 3 lub wątkiem 2
- Wątek jest podsekcją procesu. Wiele wątków może działać równolegle
- Proces jest w pełni rozwiniętym programem, składa się z jednego lub więcej wątków, chociaż program może również składać się z wielu procesów.
- Pamiętaj, że wciąż jest to bardzo wysoki widok rzeczy, nie uwzględnia szczegółów implementacji
signal
? Wpadłem na to. Czy proces jest martwy? zambi? albo co? co stanie się z procesem?Wartość kanału oczekującego to nazwa funkcji jądra, w której proces jest obecnie zablokowany.
Nazwa jest zwykle związana z wywołaniem systemowym, które będzie miało stronę podręcznika.
Jeśli naprawdę potrzebujesz bardziej szczegółowych informacji, możesz sprawdzić źródło jądra .
Jeśli wpiszesz
cat /proc/some_pid/stack
terminal, otrzymasz takie dane wyjściowe:A w pierwszym wierszu wyświetla się to, co jest wyświetlane na monitorze systemu. O ile mi wiadomo, poll_schedule_timeout wskazuje, że twój proces na coś czeka.
Dotyczy asynchronicznych operacji we / wy i odpytywania .
Źródło (źródła): 1. przetwarzać kanał oczekiwania (WCHAN) i alarm? - 2. Odpowiedź AskUbuntu
źródło