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

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

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

Ответы [ 3 ]

83 голосов
/ 15 июля 2011

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

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

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

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

18 голосов
/ 15 июля 2011

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

5 голосов
/ 15 июля 2011

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

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

...