Различение привилегированного и Непривилегированного режима

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

6
задан 26.07.2010, 12:56

2 ответа

Гм, довольно интересный вопрос. Я попытаюсь помочь...

Кто ответственен за определение, что процесс находится в Привилегированном режиме или Непривилегированном режиме?

Разработчики ОС решают это :-). Вся современная ОС работает, все процессы в Непривилегированном режиме ("звонят 3" в "Защищенном режиме" в x86 архитектуре), потому что это необходимо для использования функций как защита памяти и виртуальная память. Более старая и/или более простая ОС может выполнить все процессы в Привилегированном режиме (например, "Реальный режим" в x86); это зависит от дизайна ОС. MS-DOS, например, работал как это.

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

Я знаю, что ядро знает, который процесс, принадлежат тому, какое пространство, но как ЦП определяет это?

ЦП не "знает" это, потому что ЦП не знает ничего из процессов; это абстракции, обеспеченные ОС. ЦП просто выполняет код, который питается к нему. ЦП имеет инструкции переключиться между различными режимами, и ОС использует эти инструкции поместить ЦП в правильный режим как требуется.

На x86, например, компьютер запустится в "Реальном режиме" (по причинам совместимости). Когда ОС, такая как Linux или Windows (NT и) начальные загрузки, одна из первых вещей, которые это делает, должна переключиться на "Защищенный режим". Это затем использует "кольцевую" функцию для управления доступом каждой программы к аппаратным средствам. Ядро ОС работает в кольце 0 (полные полномочия); пользовательское программное обеспечение работает в кольце 3 (ограниченный). Каждый раз, когда ОС передает управление к пользовательскому программному обеспечению (т.е. когда это запустит или возобновляет пользовательский процесс), это сначала переключится для вызова 3. Затем управление пасует назад к ядру, переключатели ЦП назад для вызова 0.

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

Для получения дополнительной информации о том, как это работает над x86 архитектурой, см. эту статью: http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection

Как в стороне: защиты/ограничения в ограниченных режимах CPU главным образом реализованы Блоком управления памятью ЦП. Более старые и/или более простые процессоры (такие как Motorola 68000, используемая Amiga и Atari ST или 6510 от C64), не имеют MMU; поэтому они не могут выполнить ОС, которая отличает привилегированный и непривилегированный режим. Именно поэтому, например, порт Linux m68k требует, чтобы, по крайней мере, процессор Motorola 68020 работал; более ранние 68000 и 68010 не имеют MMU.

Я подразумеваю, что ЦП должен знать о режиме процесса или выполнять операторы? Если да, как?

Да, ЦП знает о нем в том смысле, что это знает, который режим, в настоящее время работает в (хотя это не знает почему).

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

Очень хороший вопрос. Сам ЦП останавливает приложение.

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

Это эффективно пасует назад управление к ОС, которая может затем сделать, поскольку это считает целесообразным: память выборки от диска, если исключение происходило из-за доступа к памяти, которая была выгружена к диску (это - то, как "подкачка страниц" работает), завершите процесс она, она получила доступ к памяти незаконно (страшный "отказ резервирования" или "отказ сегментации") и т.д.

5
ответ дан 07.12.2019, 16:05

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

Для получения дальнейшей информации посмотрите

Режимы ЦП

и

Взаимодействие между ЦП и уровнями ОС абстракции

1
ответ дан 07.12.2019, 16:05

Теги

Похожие вопросы