Модули/драйверы Linux относятся к пространству ядра или пользовательскому пространству?

Модули/драйверы Linux относятся к пространству ядра или пользовательскому пространству?

В некоторых статьях говорится, что модули/драйверы принадлежат пространству ядра, поскольку они принимают участие в формировании ядра; (ссылка:http://www.freesoftwaremagazine.com/articles/drivers_linux)

В то время как другие говорят, что только Ring0 (непосредственно взаимодействующее с оборудованием) можно назвать пространством ядра (исключая модули/драйверы, поскольку они находятся в Ring2). (ссылка:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/)

Может ли кто-нибудь сказать мне, какая точка зрения верна?

решение1

На AMD64 и клонах, а также ix86, Linux использует только кольца 0 и 3. Ни одна другая распространенная архитектура не имеет "колец" в любом случае, поэтому их полное использование было бы совершенно непереносимым. Кроме того, Linux является монолитным. Вся идея кольца заключается в том, чтобы иметь возможность запускать микроядро на кольце 0 и запускать сервисные процессы на более высоких кольцах, чтобы они не могли испортить микроядро, и, наконец, запускать пользовательское пространство на самом высоком кольце, где оно не может нанести большого вреда.

решение2

Не могли бы вы дать ссылку? Я предполагаю, что вы говорите о Linux, который (насколько мне известно) использует только кольца 0 (ядро) и 3 (пользователь).

РЕДАКТИРОВАТЬ:

Я думаю, это зависит от конструкции операционной системы. Вы можете использовать внутренние кольца, скажем, в архитектуре микроядра. Вы спрашиваете о конкретной системе (например, Linux)? Я считаю, что на этот вопрос можно ответить только для конкретной ОС. Однако в большинстве случаев ОС на базе x86 используют только «ядро» (0) и «пользователь» (3).

решение3

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

Kernel space- ОС обычно имеет два режима выполнения: пространство ядра и пространство пользователя. Пространство ядра - это место, где находится привилегированный код ОС, такой как планировщик, драйверы устройств и т. д. Его задача - управлять всей системой и обеспечивать ее стабильную работу. Пространство пользователя содержит такие процессы, как веб-браузеры и т. д., которые используют функциональность, предоставляемую пространством ядра.

Rings- Процессоры Intel поставляются с 4 уровнями привилегий работы. Они называются кольцами. Кольцо 0 является наиболее привилегированным, а кольцо 3 - наименее. Любая область памяти компьютера может быть помечена этими уровнями. Если область памяти помечена для доступа кольцом 0, то только код, находящийся в кольце 0, может получить к ней доступ, область памяти, помеченная для доступа кольцом 3, может быть доступна всем кольцам. Это обеспечивает механизм, который гарантирует, что если вы запускаете менее доверенный код на более низких уровнях привилегий (более высокое кольцо), а более доверенный код на более высоких уровнях привилегий (более низкое кольцо), первый не сможет повлиять на последний. Какой код выполняется в каком кольце (уровень привилегий) можно задать программно.

Для упрощения дизайна и переносимости кода (не-Intel CPU, такие как ARM, не имеют архитектуры 4 колец) большинство ОС используют только два из 4 колец. Обычно это ring0 и ring3. Ядро работает в ring0 и составляет пространство ядра (обратите внимание, что если завтра разработчик ОС сделает ядро ​​работающим в ring1 вместо ring0, то пространство ядра будет составлять ring1). Прикладные программы работают в ring3 и составляют пространство пользователя.

Это соглашение, которому следует большинство ОС. Однако, если я разработчик ОС, я могу использовать кольцевую архитектуру так, как захочу. Рассмотрим следующие сценарии:
(КС=Пространство ядра,НАС=Пространство пользователя,ДД=Драйверы устройств или модули ядра,рХ= кольцо X)

  1. КСв р0,НАСв r3 - наиболее часто используемый. например, Linux, Windows и т. д.
  2. КСв р1,НАСв r3 — виртуализированная установка, где гипервизор работает в кольце 0.
  3. КСв р0,ДДв р1,НАСв r3 - некоторые исследовательские проекты используют эту конфигурацию для защиты ядра от неисправных драйверов устройств.
  4. КСв р0,ДДв r3,НАСв r3 - микроядра используют эту конфигурацию.
  5. КСв р0,НАСв r0 - все в одном кольце. Некоторые исследовательские ОС, такие как Microsoft Singularity, используют эту конфигурацию. KS защищен от US с помощью других механизмов. (Старые ОС, такие как MS DOS, Windows 98 и т. д. использовали это. KS не был защищен от US, поэтому сбои ОС были частыми.)
  6. КСв r3,НАСв r0 - Абсурд. Предоставление US больших привилегий позволит US испортить KS. Никогда не видел такой конфигурации, но если я захочу написать такую ​​ОС, то ничто не помешает мне это сделать.

Примечание: Я сделал несколько упрощений при написании, например, назвал архитектуру x86 процессорами Intel. Не беспокойтесь о тонкостях прямо сейчас.

Связанный контент