Режим работы процессора

Режим работы процессора (также известный как режим процессора, состояние процессора, уровень привилегий процессора) — это режим функционирования центрального процессора (англ. central processing unit, CPU), характерный для большинства архитектур компьютеров, который накладывает ограничения на тип и объем операций, разрешённых для инструкций, выполняемых процессором. Такая схема позволяет, например, операционной системе работать с бо́льшими привилегиями, чем прикладное программное обеспечение, выполняя компоненты ОС и приложения в разных режимах[1].

В идеале только полностью доверенный код ядра имеет право выполняться в неограниченном режиме, тогда как все остальное (включая «некорневые» компоненты операционной системы) работает в ограниченном режиме и должно использовать системный вызов (через прерывание) для запроса к ядру выполнения операций, способных нанести вред системе или повлиять на её безопасность. Это делает невозможным для недоверенных программ изменение или повреждение других программ (или самой вычислительной системы). Драйверы устройств проектируются как часть ядра ввиду необходимости частого обращения к операциям ввода-вывода.

Типы режимов

Неограниченный режим часто называют режимом ядра, однако в литературе встречаются и другие обозначения: главный режим, режим супервизора, привилегированный режим и др. Ограниченные режимы обычно называются пользовательскими режимами, но также известны как подчинённый режим, проблемное состояние и др[2].

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

Некоторые архитектуры процессоров поддерживают большее число режимов, выстраивая иерархию привилегий. Такие архитектуры иногда говорят, что реализуют кольцевую модель безопасности, где степень привилегий соответствует вложенным кольцам — с режимом ядра в центре. Multics стала первым значимым примером аппаратной реализации кольцевой изоляции, но аналогичный подход применялся в режиме защищённой памяти 80286, IA-64, хотя в последних этот принцип назывался по-другому.

Ограничения по режимам могут распространяться и на ресурсы помимо самого процессора. Аппаратные регистры отслеживают текущий режим процессора, однако дополнительные регистры виртуальной памяти, таблицы страниц и прочие структуры также могут хранить информацию о разрешённых режимах для других ресурсов. Например, CPU может работать в нулевом кольце (Ring 0), что отражается в статусном слове, но при каждом обращении к памяти дополнительно проводится проверка соответствия кольца для сегмента виртуальной памяти и/или кольца для конкретной физической страницы. Такой подход реализован, например, в PSP.

Аппаратура, удовлетворяющая условиям виртуализации Попека — Голдберга, существенно облегчает написание эффективного программного обеспечения для виртуальных машин. В такой системе возможно выполнение ПО, считающего себя исполняемым в режиме супервизора, хотя реально оно работает в пользовательском режиме.

Архитектуры

Ряд вычислительных систем, появившихся в 1960-х годах, таких как IBM System/360, DEC PDP-6/PDP-10, серия GE-600/Honeywell 6000 и системы Burroughs B5000 и B6500, поддерживали два режима работы процессора: режим с полными привилегиями для исполняемого кода и режим, при котором прямой доступ к устройствам ввода-вывода и к некоторым другим аппаратным функциям был запрещён. Эти режимы назывались различными именами: состояние супервизора (System/360), режим исполнения (PDP-6/PDP-10), главный режим (GE-600 series), режим управления (B5000), состояние управления (B6500). Ограниченный режим назывался проблемным состоянием (System/360), пользовательским режимом (PDP-6/PDP-10), подчинённым режимом (GE-600 series), нормальным состоянием (B6500), а в B5000 существовало несколько «неконтрольных» режимов.

RISC-V

В архитектуре RISC-V определены три основных режима работы процессора: пользовательский режим (U, от англ. User Mode), режим супервизора (S, от англ. Supervisor Mode) и машинный режим (M, от англ. Machine Mode)[3]. Виртуализация поддерживается за счёт специальных регистров управления CSR, а не отдельного режима.

Примечания