Переход в режим ядра - PullRequest
       3

Переход в режим ядра

2 голосов
/ 11 ноября 2009

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

Например: менеджер виртуальной памяти является часто используемым компонентом и отображается в системном пространстве. Всякий раз, когда VMM работает в контексте пользовательского процесса (скажем, он перевел адрес), должен ли процессор быть переведен в режим ядра?

Спасибо, Суреш.

Ответы [ 2 ]

1 голос
/ 11 ноября 2009

Как правило, задействованы 2 части. MMU (блок управления памятью), который является аппаратным компонентом, который выполняет преобразование виртуальных адресов в физические. И операционная система VM подсистема.

Часть операционной системы должна работать в привилегированном режиме (например, в режиме ядра) и настраивать / изменять отображение в MMU в зависимости от потребностей пространства пользователя.

например. чтобы запросить дополнительную (виртуальную) память или отобразить файл в память, необходим переход в режим ядра, и подсистема виртуальной машины может изменить отображение процесса.

Вокруг этого часто приходится делать кучу трюков - например, электронная почта. отобразить все адресное пространство ядра в виртуальное пространство пользовательского процесса, но изменить его доступ, чтобы процесс не мог использовать эту память - это означает, что при переходе в режим ядра вам не нужно перезагружать отображение для ядра

1 голос
/ 11 ноября 2009

Если взять ваш пример менеджера виртуальной памяти, он фактически никогда не работает в пространстве пользователя. Чтобы выделить память, приложения пользовательского режима делают вызовы Win32 API (NTDLL.DLL в качестве одного примера) для таких подпрограмм, как VirtualAlloc.

Что касается перевода адресов, вот краткое описание того, как он работает (на основе содержимого Windows Internals 5th Edition ).

VMM использует таблицы страниц , которые ЦП использует для преобразования виртуальных адресов в физические адреса. Таблицы страниц живут в системном пространстве. Каждая таблица содержит много PTE ( записей таблицы страниц ), в которых хранится физический адрес, на который отображается виртуальный адрес. Я не буду вдаваться в подробности, но дело в том, что вся работа VMM выполняется в системном пространстве, а не в пользовательском.

Что касается переключения контекста - когда поток, выполняющийся в пространстве пользователя, должен выполняться в системном пространстве, произойдет переключение контекста. Поскольку диспетчер памяти находится в системном пространстве, его потокам никогда не требуется переключать контекст, поскольку он уже находится в системном пространстве.

Извиняюсь за упрощенное объяснение, это довольно сложная тема для глубокого обсуждения. Я настоятельно рекомендую вам взять копию Windows Internals , так как это может показаться вам полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...