системный вызов и переключение контекста - PullRequest
36 голосов
/ 11 февраля 2012

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

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

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

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

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

Ответы [ 2 ]

65 голосов
/ 11 февраля 2012

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

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

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

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

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

Вот как системные вызовы связаны с переключением контекста.

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

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

Это полезно?

0 голосов
/ 01 сентября 2017
Переключение режима

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

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