Подтвердить что ты не робот

Системный вызов и контекстный переключатель

Я сожалею, что задал этот вопрос, когда его уже спросили, но я не мог получить от них ясности. Поэтому я задаю следующие связанные вопросы, чтобы получить разницу между системным вызовом (переключатель режима) и контекстным переключателем

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

  • Что означает, что при выполнении системного вызова ядро ​​выполняется в "контексте пользователя".

  • Согласно статье wikipedia: http://en.wikipedia.org/wiki/Context_switch

контекстный переключатель не нужен для системного вызова, но он зависит от операционной системы и может возникнуть контекстный переключатель во время системного вызова. Мне интересно, что произойдет в случае переключения контекста во время системного вызова. Любые примеры?

4b9b3361

Ответ 1

Вам нужно понять, что контекст потока/процесса имеет несколько частей, один из которых напрямую связан с выполнением и хранится в ЦП и некоторые системные таблицы в памяти, которые использует процессор (например, таблицы страниц), а другой, который необходим для ОС, для ведения бухгалтерского учета (подумайте о различных идентификаторах, ручках, специальных разрешениях для ОС, сетевых подключениях и т.д.).

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

Теперь системные вызовы очень разные w.r.t. друг друга.

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

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

То, как системные вызовы связаны с коммутаторами контекста.

Ядро, выполняемое в контексте пользователя или процесса, означает, что всякий раз, когда ядро ​​работает от имени определенного процесса или пользователя, он должен учитывать этот контекст пользователя/процесса, например. текущий идентификатор процесса/потока/пользователя, текущий каталог, локаль, права доступа для различных ресурсов (например, файлы), все это, что может быть различным между разными процессами/потоками/пользователями.

Если процессы имеют отдельные адресные пространства, адресные пространства также являются частью контекста процесса. Таким образом, когда ядру необходимо получить доступ к памяти процесса (для чтения/записи данных файла или сетевых пакетов), он должен иметь доступ к адресному пространству процесса, IOW, он должен быть в его контексте (он не что ядро ​​должно загружать полный контекст только для доступа к памяти в определенном адресном пространстве).

Это полезно?

Ответ 2

Переключатель режима

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