wywołanie systemowe i przełącznik kontekstowy

Przepraszam, że zadaję to pytanie, gdy już zostało zadane, ale nie mogłem uzyskać od nich jasności. Dlatego zadaję następujące powiązane pytania, aby uzyskać różnicę między wywołaniem systemowym (mode-switch) a przełącznikiem kontekstowym

  • Dlaczego mówi się, że wywołanie systemowe nie wymaga przełączania kontekstu, gdy kontekst proces wywołania musi zostać zapisany, a następnie przeładowany. Czy tylko dlatego, że zgodnie z definicją przełącznika kontekstowego należy dokonać przełącznika do innego procesu.

  • Co to znaczy, że po wywołaniu systemowym jądro jest wykonywane w "kontekście użytkownika".

  • Zgodnie z artykułem Wikipedii: http://en.wikipedia.org/wiki/Context_switch

Przełącznik kontekstowy nie jest konieczny do wywołania systemowego, ale zależy od systemu operacyjnego i przełącznik kontekstowy może wystąpić podczas wywołania systemowego. Zastanawiam się, co by się stało, gdyby zmiana kontekstu miała miejsce na czas połączenia systemowego. Jakieś przykłady ?

Author: vjain27, 2012-02-11

2 answers

Musisz zrozumieć, że kontekst wątku/procesu zawiera wiele części, jedną bezpośrednio związaną z wykonaniem i przechowywaną w pamięci procesora i niektórych tabel systemowych (np. tabel stron), a drugą, która jest potrzebna dla systemu operacyjnego, do księgowania (pomyśl o różnych identyfikatorach, uchwytach, specjalnych uprawnieniach specyficznych dla systemu operacyjnego, połączeniach sieciowych itp.).

Pełny przełącznik kontekstowy wymagałby zamiany obu z nich, stary bieżący wątek / proces odejdzie na rzecz while I nowy bieżący wątek/proces pojawia się na chwilę. To jest istota harmonogramu wątków/procesów.

Teraz, wywołania systemowe są bardzo różne w. r. T. siebie.

Rozważ coś prostego, na przykład wywołanie systemowe do żądania bieżącej daty i godziny. Procesor przełącza się z trybu użytkownika do trybu jądra, zachowując wartości rejestru trybu użytkownika, wykonuje kod jądra, aby uzyskać niezbędne dane, przechowuje go w pamięci lub rejestrach, które może wywołać wywołujący access, przywraca wartości rejestru trybu użytkownika i zwraca. Nie ma tu zbyt wiele przełącznika kontekstowego, tylko to, co jest potrzebne do przejścia między trybami, użytkownikiem i jądrem.

Rozważmy teraz wywołanie systemowe, które polega na blokowaniu wywołującego do czasu jakiegoś zdarzenia lub dostępności danych. Manipulowanie muteksami i odczytywanie plików byłoby przykładami takich wywołań systemowych. W tym przypadku jądro jest zmuszone zapisać pełny kontekst wywołującego, oznaczyć go jako zablokowany, aby scheduler nie mógł go uruchomić dopóki to zdarzenie lub dane nie nadejdą, i załaduj kontekst innego gotowego wątku / procesu, aby mógł działać.

W ten sposób wywołania systemowe są powiązane z przełącznikami kontekstowymi.

Kernel wykonujący w kontekście użytkownika lub procesu oznacza, że gdy jądro działa w imieniu określonego procesu lub użytkownika, musi brać pod uwagę kontekst tego użytkownika/procesu, np. bieżący identyfikator procesu / wątku/użytkownika, bieżący katalog, ustawienia regionalne, uprawnienia dostępu do różnych zasobów (np. pliki), wszystkie te rzeczy, które mogą być różne między różnymi procesami / wątkami/użytkownikami.

Jeśli procesy mają indywidualne przestrzenie adresowe, przestrzenie adresowe są również częścią kontekstu procesu. Tak więc, gdy jądro potrzebuje dostępu do pamięci procesu (do odczytu/zapisu danych plików lub pakietów sieciowych), musi mieć dostęp do przestrzeni adresowej procesu, IOW, musi być w jego kontekście (nie oznacza to jednak, że jądro musi załadować pełny kontekst tylko po to, aby uzyskać dostęp do pamięci w konkretnej przestrzeni adresowej).

Czy to pomocne?

 54
Author: Alexey Frunze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-11 08:37:25

Przełącznik Trybu występuje, gdy użytkownik chce uzyskać dostęp tylko do rzeczy, które są odpowiednie tylko dla trybu jądra

 -2
Author: dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 07:33:03