Режим пользователя против режима супервизора - PullRequest
2 голосов
/ 26 января 2009

У меня есть несколько вопросов по пользовательскому и супервизорному режимам на Unix-подобных машинах.

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

Каковы преимущества наличия разных режимов?

Какие шаги предпринимаются при переходе из режима пользователя в режим супервизора?

Когда системный вызов выполняется пользовательской программой, режим должен переключаться с режима пользователя на режим супервизора. Я читал в другом месте, что это достигается на машинах x86 с помощью int x80. Так чем же отличается переключение режимов от обработки прерываний?

Чем он отличается от переключения контекста?

Как режимы супервизора реализованы в разных архитектурах?

Любые ответы или указатели будут оценены!

Ответы [ 2 ]

4 голосов
/ 26 января 2009

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

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

Что касается переключения контекста, это по сути включает переключение в режим ядра для выполнения задачи. Когда срабатывает прерывание таймера планировщика ЦП, он переключается в режим ядра, выбирает следующую задачу для выполнения, а затем переключается обратно в режим пользователя с возобновлением следующей задачи.

2 голосов
/ 26 января 2009

Существуют две концепции:

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

Очень мало кода выполняется в режиме супервизора HW, в основном это процедуры прерывания на низком уровне и в самом начале запуска. Даже большая часть режима ядра SW выполняется в пользовательском режиме HW.

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