Согласно комментариям и личным исследованиям, как правило, нет принудительной связи между режимом ядра и адресным пространством ядра, режимом пользователя и адресным пространством пользователя.В современной ОС (Linux) эта связь на 100% контролируется программным обеспечением ОС, которое может отображать адресное пространство пользователя для режима ядра, к которому может получить доступ, как правило, с помощью highmem.
По сути, разделение пространства виртуальной памяти является соглашением, которое уменьшает фрагментацию иоблегчить распознавание при программировании.Для арки 86x86 существует «отношение», основанное на следующих фактах:
- Когда задача переходит в режим ядра, регистр
CPL
в cs
устанавливается на 0
что означает высшую привилегию.Технически, он может получить доступ ко всему пространству виртуальной памяти.Тип карты, обычно highmen, используется для безопасного доступа ядра к адресному пространству пользователя. - Когда задача находится в режиме пользователя, регистр
CPL
в cs
устанавливается на 3
, чтоозначает низкую привилегию.Он может получить доступ только к сегменту, у которого DPL
поле 3
Однако все сегменты в адресном пространстве ядра заполнены 0
DPL, что означает, что задача режима пользователя не имеет права доступа.Эти две точки не учитывают RPL
, должно быть только условие, что DPL >= max(RPL,CPL)
сегмент может быть доступен.