Переключение между режимами ядра и пользователя выполняется аппаратным или программным обеспечением? - PullRequest
2 голосов
/ 29 февраля 2012

Мне было просто интересно, выполняется ли переключение между режимом ядра и режимом пользователя в операционной системе аппаратным обеспечением или самой ОС.Я понимаю, что когда пользовательский процесс хочет войти в режим ядра, он может сделать системный вызов и выполнить некоторый код ядра.Когда выполняется системный вызов, процесс переходит в режим ядра, и теперь вся память становится доступной и т. Д. Чтобы это произошло, я бы предположил, что обработчик прерываний должен переключать или изменять таблицу страниц.Это правда?Если нет, то как процессор узнает, что он работает в режиме ядра и не нуждается в сбое страницы при доступе к ограниченной (недоступной для пользовательского процесса) памяти?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 27 мая 2013

Последний ответ на самом деле не соответствует действительности ... Переход в режим ядра не проходит через «Реальный режим».Фактически после завершения процесса загрузки компьютер никогда не возвращается в реальный режим.

В обычных системах x86 переход в режим ядра включает вызов «sysenter» (после установки параметров в некоторых регистрах), что вызывает переход на предопределенныйадрес (сохраненный в регистре MISR ЦП), который был установлен при загрузке компьютера, потому что это может быть сделано только из режима ядра (это «привилегированная» команда).

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

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

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

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

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

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

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

...