6

По словам моего профессора,

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

Он прав? Разве процессу ядра нечего сохранить?

4 ответа4

5

Это лучше понять, если мы рассмотрим вашу историю и попытаемся использовать лучшую терминологию:

  • при переключении из режима пользователя в режим ядра

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

    Когда это происходит? Это происходит, когда вызывается подпрограмма ядра; что может произойти, например, когда он вызывается из пользовательского режима через повышение прав или через аппаратное прерывание.

    Что такое рутина? Это кусок кода, который обрабатывает вызов / прерывание.

  • статус пользовательского процесса должен быть полностью сохранен.

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

  • Но при переключении из режима ядра в режим пользователя ничего не нужно сохранять

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

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

Итак, у нас есть две разные вещи:

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

  • подпрограмма ядра, которая выполняется при переключении режима, поэтому его статус удаляется.

Как ответить на ваш вопрос " Разве процесс ядра не имеет ничего для сохранения?msgstr "на самом деле не запущен процесс ядра, это просто оболочка, в которой хранится память ядра, подпрограммы и некоторые другие магические действия.

1

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

Это похоже на то, что происходит в обычной программе: если у вас есть функция hypot и она вызывает sqrt , система должна сохранить локальные переменные hypot и точку возврата (программный счетчик / указатель инструкции, из которого был вызван sqrt ).  Но когда sqrt возвращает и hypot возобновляется, кадр стека sqrt может быть отброшен.

1

Это звучит так, как будто это в контексте упреждающей многозадачности.

ОС / ядро всегда запущено, поэтому сохранять нечего. Другие программы тоже запущены (поверх ОС), но каждая из них получает по очереди доли секунды. Когда каждая программа получает свою очередь, необходимо загрузить стек для этой программы, чтобы можно было выполнить обработку, а затем состояние всех регистров необходимо сохранить обратно в ОЗУ из процессора, чтобы можно было загрузить следующую программу.

1

Профессор частично прав.

Данные, которые сохраняются при переключении из пользовательского режима в режим ядра, представляют собой состояние процессора, а не процесса. Пользовательский режим и режим ядра связаны с процессором, а не с процессом. Когда ядро выполняет какую-либо функцию от имени пользователя, состояние ЦП сохраняется заранее. То есть состояние процессора, когда он выполнял код режима пользователя. Затем ядро выполняет свое действие на основе запроса кода режима пользователя. Наконец, ядро восстанавливает состояние ЦП обратно в ранее сохраненное состояние. Ядро может вернуть процессор обратно в пользовательский режим, в зависимости от рассматриваемого ядра.

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

Компоненты операционной системы обычно работают в режиме ядра, также называемом Ring 0 на процессорах x86. Пользовательский режим содержит приложения и иногда называется Ring 3.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .