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

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

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

  • Есть ли операционные системы, которые на самом деле используют эти кольца? Или они совершенно не используются?

3 ответа

Решение

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

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

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

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

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

Согласно Википедии ( http://en.m.wikipedia.org/wiki/Ring_%28computer_security%29), кольца 1 и 2 используются для драйверов (кольцо 1), гостевых операционных систем (кольцо 1) и для ввода-вывода с привилегированным доступом. код (кольцо 2), гипер-визоры сидят в -1/0 (в зависимости от гипер-визора), а не 1, как я уже говорил ранее.

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

Другие вопросы по тегам