Czytałem artykuł opisujący przełączanie między przestrzenią użytkownika a przestrzenią jądra, która ma miejsce po wywołaniu systemowym. Artykuł mówi
Aplikacja oczekuje na zakończenie wywołania systemowego przed wznowieniem wykonywania w trybie użytkownika.
Do tej pory zakładałem, że niektóre wywołania systemowe są blocking
, podczas gdy inne są non-blocking
. Z powyższym komentarzem jestem teraz zmieszany. Czy to oznacza, że wszystkie wywołania systemowe są blokowane, czy też źle zrozumiałem koncepcję?
operating-systems
os-kernel
Ankit
źródło
źródło
Odpowiedzi:
Wydaje się, że przeciążasz termin „blokowanie”.
Po każdym przełączeniu kontekstu na jądro musisz poczekać, aż przełączy się z powrotem na tryb użytkownika, zanim aplikacja będzie mogła kontynuować. To nie jest zwykle tak zwane „blokowanie”.
W obecnym projekcie jądra wywołania blokujące to wywołania, w których jądro zwraca tylko wtedy, gdy żądanie jest kompletne (lub wystąpi błąd). Połączenia te zwykle zajmują więcej czasu i zwykle prowadzą do zaplanowania procesu. Na przykład wiele połączeń We / Wy jest blokowanych.
Istnieje wywołanie systemowe, które zapewnia asynchroniczne operacje we / wy i nie blokuje. Zauważ, że nadal występuje tutaj zmiana kontekstu, tylko aplikacja musi zadbać o asynchroniczny charakter połączenia.
Artykuł wydaje się mieć na celu wyeliminowanie tego przełączania kontekstu tam iz powrotem (bez wyjątków wywołania systemowe) i próbę uczynienia wszystkich wywołań asynchronicznymi.
źródło