Как пользовательский процесс выполняет системный вызов без переключения контекста? - PullRequest
1 голос
/ 02 февраля 2012

Когда пользовательский процесс выполняет системный вызов, запускается процесс ядра.Теперь, как это НЕ приводит к переключению контекста?Поскольку процесс ядра отличается от процесса пользователя.Или я ошибаюсь, говоря, что подпрограмма ядра (вызываемая системным вызовом) и пользовательские процессы принадлежат одному и тому же процессу?

1 Ответ

2 голосов
/ 02 февраля 2012

«Когда пользовательский процесс выполняет системный вызов, запускается процесс ядра» - не совсем, код ядра вызывается.Любой системный вызов неизбежно приведет к изменению контекста защиты - циклу звонка.Насколько глубоко это становится, зависит от вызова.Если вызов достигает кольца 0, код ядра имеет доступ ко всем потокам пользователя и ядра, поэтому код ядра в общем случае не может быть описан как «процесс» - то, что имеет контекст управления памятью / безопасности для обеспечениязащита.Как правило, цикл цикла в / из кольца 0 занимает более 2000 циклов процессора (кроме немецких опер, где он занимает три дня).Эти издержки абсолютно необходимы независимо от того, приводит ли системный вызов к переключению контекста потока и / или переключению контекста процесса.

В тех случаях, когда системный вызов приводит к изменению набора работающих потоков, произойдетбыть дополнительными затратами на переключение контекста потока, особенно если изменение требует вытеснения потока, работающего на другом процессоре.

Если какой-либо вновь запущенный поток принадлежит процессу, отличному от потока, которому предшествуетэто еще большая нагрузка на переключение контекста процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...