Взаимосвязь между режимом ядра и пространством ядра, режимом пользователя и пространством пользователя? - PullRequest
0 голосов
/ 23 мая 2019

Виртуальная память в Linux может быть разделена на две части: адресное пространство пользователя и адресное пространство ядра.

Задача работает в режиме ядра или в режиме пользователя в соответствии с уровнем привилегий.

Но учитывая i386 arch, какова связь между режимом ядра и адресным пространством ядра, режимом пользователя и адресным пространством пользователя?

1 Ответ

1 голос
/ 25 мая 2019

Согласно комментариям и личным исследованиям, как правило, нет принудительной связи между режимом ядра и адресным пространством ядра, режимом пользователя и адресным пространством пользователя.В современной ОС (Linux) эта связь на 100% контролируется программным обеспечением ОС, которое может отображать адресное пространство пользователя для режима ядра, к которому может получить доступ, как правило, с помощью highmem.
По сути, разделение пространства виртуальной памяти является соглашением, которое уменьшает фрагментацию иоблегчить распознавание при программировании.Для арки 86x86 существует «отношение», основанное на следующих фактах:

  1. Когда задача переходит в режим ядра, регистр CPL в cs устанавливается на 0 что означает высшую привилегию.Технически, он может получить доступ ко всему пространству виртуальной памяти.Тип карты, обычно highmen, используется для безопасного доступа ядра к адресному пространству пользователя.
  2. Когда задача находится в режиме пользователя, регистр CPL в cs устанавливается на 3, чтоозначает низкую привилегию.Он может получить доступ только к сегменту, у которого DPL поле 3Однако все сегменты в адресном пространстве ядра заполнены 0 DPL, что означает, что задача режима пользователя не имеет права доступа.Эти две точки не учитывают RPL, должно быть только условие, что DPL >= max(RPL,CPL) сегмент может быть доступен.
...