Кольца привилегий ЦП: почему кольца 1 и 2 не используются?

102

Пара вопросов относительно колец привилегий процессора x86:

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

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

пользователь541686
источник
это может помочь compgroups.net/comp.lang.asm.x86/Privilege-levels-1-and-2
Alexius

Ответы:

112

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

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

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

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

Эван Теран
источник
28
Кто VirtualBox использует кольцо 1 ?! Это просто круто !! Большое спасибо за информацию, отличный ответ! +1
user541686
10
OS / 2 широко использовала Ring 2 для кода ввода-вывода. Вот почему так сложно виртуализировать.
kinokijuf
Из superuser.com/questions/1402537/… : «Запуск кода кольца 0 в кольце 1 вызывает множество дополнительных ошибок инструкций, поскольку кольцу 1 не разрешено выполнять какие-либо привилегированные инструкции, которых в гостевом кольце 0 содержится много. из этих ошибок VMM должен вмешаться и эмулировать код для достижения желаемого поведения. Хотя это работает, эмуляция тысяч таких ошибок очень дорога и серьезно снижает производительность виртуализированного гостя ».
Дастин Опреа,
24

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

сумрак-неактивный-
источник
7

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

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

Некролис
источник
1
Я думаю, ты -где-то пропустил . Вы уверены, что гипервизоры используют кольцо 1?
user541686
Хех, не думал, должны быть гипервизоры в -1 и гостевые ОС в 1,
обновятся так
4
Windows использует только два кольца, потому что он был разработан для работы на других процессорах (ныне несуществующих), у которых было только два.
Дэвид
На мой взгляд, переключение режимов требует небольших затрат. Насколько я понимаю, только оборудование может назначать более привилегированные привилегии процессору (например, если произошло прерывание с завершением ввода-вывода). Если это переключение привилегий происходит аппаратно, я сомневаюсь, что переключать кольца нетривиально. Я думаю, что Windows, Linux или MacOS используют только два самых крайних кольца, потому что архитекторы резервируют средние кольца для таких вещей, как виртуализация на базе ОС.
Нейт Саймер,