Поддержи Openmeetings

среда, 8 июля 2015 г.

Уровни привилегий связанных с аппаратными средствами Linux

Понятие привилегии на примере процессоров на базе Intel или AMD реализуется таким образом: ключевым объектам, распознанным процессором, присваиваются значения от 0 до 3. Это значение называют уровнем привилегий. Следующие объекты, распознанные процессором, содержат уровни привилегий:
  • Дескрипторы содержат поле, названное уровнем привилегий дескриптора (Descriptor Privilege Level, DPL).
  • Селекторы содержат поле, названное уровнем привилегий инициатора запросов (Requestor Privilege Level, RPL). RPL предназначен для того, чтобы представлять уровень полномочий процедуры, которая порождает селектор.
  • Внутренний регистр процессора записывает текущий уровень полномочий (CPL). Обычно CPL равен DPL сегмента, который в настоящее время выполняется процессором. CPL изменяется, когда управление передается сегментам с другими значениями DPL. Рисунок ниже показывает, каким образом данные уровни привилегий могут быть интерпретированы как уровни защиты. В центре расположены сегменты, содержащие наиболее критичное программное обеспечение, обычно это ядро операционной системы. Внешние уровни предназначены для сегментов менее критичного программного обеспечения.

Ядро Linux, как и большинство других ядер операционных систем, подобных UNIX, использует только два из этих режимов выполнения. Режим с самым высоким уровнем привилегий, с уровнем привилегий процессора 0, соответствует привилегированному режиму; режим с самым низким уровнем привилегий, с уровнем привилегий процессора 3, соответствует непривилегированному режиму. Непривилегированный и привилегированный режимы, которые поддерживаются всеми процессорами, реализуют привилегии, связанные с аппаратными средствами, следующим образом:
  • Когда процессор находится в привилегированном режиме, у программы есть привилегии, связанные с аппаратными средствами, потому что она может получить доступ и изменить любые адресуемые ресурсы, такие как память, таблицы состояний страниц, адресное пространство ввода-вывода и регистры управления памятью. Это не возможно в непривилегированном режиме.
  • Когда процессор находится в привилегированном режиме, у программы есть привилегии, связанные с аппаратными средствами, потому что она может выполнить определенные привилегированные инструкции, которые не доступны в непривилегированном режиме. Таким образом любой код, который работает в привилегированном режиме, выполняется с привилегиями, связанными с аппаратными средствами. Программное обеспечение, которое работает с привилегиями, связанными с аппаратными средствами, включает:
    1. Часть ядра Linux, загружаемая в память целиком. Оно составляет значительную часть программного обеспечения, которое осуществляет управление памятью, файловый ввод-вывод и управление процессами.
    2. Отдельно загружаемые модули ядра, такие как различные модули драйверов устройства. Модуль ядра  — объектный файл, код которого может быть соединен (прилинкован) и отсоединен (отлинкован) от ядра на этапе исполнения. Код модуля ядра выполняется в ядре, как любая другая статически скомпонованная функция ядра.
Остальное программное обеспечение в системе включая пользовательские процессы, такие как оболочки, клиентское сетевое ПО и редакторы, обычно работает в непривилегированном режиме, без привилегий, связанных с аппаратным обеспечением. Процессы непривилегированного режима работают с привилегиями, связанными с аппаратным обеспечением, когда они используют системные вызовы. Выполнение системного вызова или прерываний процессора (таких как ошибки страниц), вызванное приложениями, выполняемыми в пространстве пользователя, переключает режим из пользовательского в привилегированный, и исполнение продолжается с определенного адреса в ядре, где размещен код обработчика системного вызова или обработчика прерывания.
Привилегии, связанные с аппаратным обеспечением, для архитектур процессоров, отличных от архитектуры x86:
  1. PowerPC. Эта архитектура процессора поддерживает три режима исполнения, идентифицированные битом PR (бит 49) и битом HV (бит 3) регистра состояния машины (Machine State Register, MSR) процессора. Значения 0 и для битов PR и HV указывают режим выполнения гипервизора. Битовое значение HV, равное 1 и битовое значение PR, равное 0, задают режим исполнения супервизора, или ядра. Битовое значение HV, равное 1, и битовое значение PR, равное 1, задают пользовательский режим исполнения.
  2. SystemZ Системы System Z также поддерживают два режима исполнения, идентифицированные битом задачного режима (бит 15) регистра состояния программы (Program Status Word, PSW) процессора. Значение 0 указывает режим выполнения супервизора, или ядра, значение 1 указывает задачный режим, или пользовательский режим исполнения.
  3. Процессоры ARM работают в различных режимах: пользовательском, режиме быстрого прерывания, режиме прерывания, режиме супервизора, режиме аварийного прерывания и системном режиме. У каждого режима есть свой собственный стек и среда, в которой он существует. В руководствах ARM эти режимы указаны как различные, однако эти различия касаются не области, связанной с их уровнями привилегий, а их целей. В ARM есть по существу два уровня полномочий: в руководствах они называются привилегированные режимы и непривилегированные режимы. Из упомянутых выше режимов, пользовательский режим - единственный непривилегированный режим, в то время как все остальные - привилегированные режимы для данной архитектуры. Эти режимы  — просто состояния, в котором находится процессор, в случае определенного типа исключения, или определенного типа прерывания (IRQ).
  • Режим супервизора  — стандартный режим работы ядра, в котором, как ожидается, он будет работать.
  • Системный режим не переключается на ни на какой общедоступный вектор. Он похож (на основании описания, приведенного в руководстве, и факта, что ни одно из определенных прерываний фактически не переключается в системный режим) на прерывание системного управления #SMI (System Management Interrupt), которое переключается в режим системного управления на персональном компьютере. После переключения в системный режим ядро будет обрабатывать программное прерывание (SWI), затем переключится в пользовательский режим.
  • В режим аварийного прерывания процессор переключается в случае, аналогичном случаю ошибки страницы в архитектуре x86. Процессор переключается в привилегированный режим, а именно в режим аварийного прерывания, упомянутый выше. Большинство ядер ARM просто принимает во внимание факт, что процессор находился в режиме аварийного прерывания при входе в ядро, затем переключаются на режим супервизора и обрабатывают исключение.
  • Режимы прерывания и быстрого прерывания  — почти одно и то же, за исключением того, что режиму быстрого прерывания FIQ назначается его собственный набор регистров (регистры фактически переключаются с вызывающей стороны, однако, их имена все еще сохраняются (r8, например, все еще будет называться r8 в вашей сборке; однако вы должны принимать во внимание, что если в регистре r8 в непривилегированном режиме содержалась информация, вы не сможете считать те же самые данные из регистра r8 в режиме FIQ); таким образом, обеспечивается возможность выполнения обработчиков IRQ, без необходимости полного сохранения контекста. По существу, как и в x86, в рассматриваемой архитектуре есть часть аппаратных средств, которые могут быть сконфигурированы ядром. Ядро, у которого есть только 7 векторов и два из них выделены только для прерываний IRQ, выдаст номер IRQ одного из двух векторов IRQ (векторов прерываний IRQ или быстрых прерываний FIQ). Для устройства, сконфигурированного таким образом, что оно отправляет сигналы IRQ на вектор IRQ, процессор, получив сигнал прерывания на векторе IRQ, переключится в привилегированный режим в состоянии режима IRQ. Для прерывания, полученного на векторе быстрых прерываний (FIQ), процессор переключится в привилегированный режим, но в состоянии режима FIQ.
  • В неопределенный режим процессор переключается при возникновении на ЦПУ неопределенного исключения.


Комментариев нет :

Отправить комментарий