2014-08-20 2 views
6

Драйверы для монолитных ядер могут быть в кольцах 0, 1 или 2 (с микроядрами они будут в кольце 3 - пользовательское кольцо).Есть ли преимущество для размещения кода драйвера x86 в кольцах 1 и 2 вместо 0?

Есть ли какие-либо преимущества/недостатки ввода кода драйвера в кольцо 0 с ядром или в «слегка меньших» привилегированных кольцах 1 и 2?

Кольца 1 и 2 могут получить доступ супервизора страницы, но они не могут выполнить некоторые специальные привилегированные инструкции (если они делают, они поднимут General Protection Fault - как с кольцом 3)

ответ

5

Наиболее очевидное преимущество использования кольца 1 и 2 были бы архитектурным разделом, который мог бы защитить ядро ​​от неисправного драйвера устройства. Теоретически правильно написанное ядро ​​позволило бы изящный сбой, когда драйвер во внешнем кольце имел катастрофический сбой. Запуск драйвера в кольце 0 может потенциально позволить ему удалить все ядро, если оно не работает.

Недостатком перемещения драйверов в кольца 1 и 2 было бы накладные расходы на производительность, связанные с постоянной необходимостью кольцевых переходов между ядром и драйверами. Конечно, в микроядерной системе, this is necessary and could be sufficiently fast depending on your needs. При правильной оптимизации отключение ядра от его сервисов может иметь очень малую производительность. С учетом сказанного, Intel /SYSEXIT (и эквивалентные AMD SYSCALL/SYSRET) инструкции, используемые для быстрого переключения контекста только позволяют переходы между кольцами 0 и 3; для выполнения контекстного переключения в или из колец 1 или 2 требуется полное прерывание.

Еще один недостаток необходимо учитывать, что, поскольку многие другие архитектуры имеют только супервизор и пользовательские режимы (или эквивалент) любую архитектуру платформы вы пишете, что управляет каким уровень элементов вашего кода запуска на придется как:

  • записываются по-разному в зависимости от того, имеет ли платформа кольца 1 и/или 2 и
  • принять другое решение о том, какой уровень привилегий имеет код в зависимости от платформы.

Если вы планируете создать систему, которая будет построена для разных архитектур, это может привести к некоторым трудностям.

+1

Также обратите внимание, что поисковая система имеет только «пользователь» и «супервизор». Любое кольцо 1 или код кольца 2 может обращаться к страницам «супервизора» (например, к мусорному кольцу 0 страниц ядра); и поэтому есть либо небольшая точка, использующая кольцо 1 или кольцо 2, либо вы должны использовать сегментацию для обеспечения защиты, а не пейджинга (что является очень плохой идеей для производительности) – Brendan