ЦП Privilege Rings: Почему кольца 1 и 2 не используются?

Несколько вопросов о привилегиях CPU x86:

  • Почему не кольца 1 и 2, используемые большинством операционных систем? Это просто поддерживать совместимость кода с другими архитектурами, или есть ли лучшая причина?

  • Существуют ли операционные системы, которые фактически используют эти кольца? Или они полностью не используются?

Ответ 1

Как писатель с операционной системой для любителей, я обнаружил, что из-за того, что пейджинг (основная часть современной модели защиты) имеет только концепцию привилегированного (кольцо 0,1,2) и непривилегированный, преимущество для колец 1 и 2 было значительно уменьшилось.

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

Кольца 1 и 2 в некотором роде, "в основном" привилегированные. Они могут получить доступ к страницам супервизора, но если они попытаются использовать привилегированную инструкцию, они все равно GPF, как кольцо 3. Таким образом, это не плохое место для драйверов, как планировала Intel...

Тем не менее, они определенно имеют применение в некоторых проектах. Фактически, не всегда напрямую ОС. Например, VirtualBox, виртуальная машина, помещает гостевой код ядра в кольце 1. Я также уверен, что некоторые операционные системы действительно используют их, я просто не думаю, что это популярный дизайн на данный момент.

Ответ 2

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

Ответ 3

Согласно странице Википедии Ring Security, кольца 1 и 2 используются для драйверов (кольцо 1), гостевых операционных систем (кольцо 1) и привилегированного кода ввода/вывода (кольцо 2), гипервизоры находятся в -1/0 (в зависимости от гипер-визора), а не 1, как я уже говорил ранее.

Тем не менее, лишние два кольца никогда не помогали и, таким образом, стали использоваться редко. TBH, большинство кодов с использованием колец 1 и 2, они полу-переназначают их от их первоначального использования (таких как гипервизоры). В настоящее время большая часть кода Windows рассматривает систему как имеющую только два уровня (ядро и пользователь), вероятно, из-за накладных расходов, связанных с входом и выходом из ядра ядра.