Какой каталог страниц используется во время обработчика прерываний x86? - PullRequest
0 голосов
/ 29 ноября 2018

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

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

Как процессорзнаете где переключиться?

1 Ответ

0 голосов
/ 29 ноября 2018

Прерывание не меняет таблицы страниц.Формат таблицы страниц x86 имеет бит U / S (пользователь / супервизор) в каждой записи каталога страниц (https://wiki.osdev.org/Paging#Page_Directory).) Отображение только для супервизора работает только в кольце 0, а не в кольце 3., т.е. это только ядроотображение, экономя накладные расходы на изменение таблиц страниц при каждом прерывании или системном вызове.

(Meltdown - это аппаратный эксплойт, который побеждает его на самых последних процессорах Intel, поэтому в настоящее время ОС должны избегать отображения памяти ядра, пока пользователь-space работает, если они загружаются на уязвимом процессоре. http://blog.stuffedcow.net/2018/05/meltdown-microarchitecture/)

Таким образом, ядро ​​может зарезервировать часть виртуального адресного пространства каждого процесса для своего собственного использования. Например, Linux резервирует большую половину виртуального адресного пространствадля использования в ядре. См. https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt для текущей структуры x86-64.

Этот дизайн по понятным причинам называется ядром "high half".

Для 32-битныхx86, Linux может использовать разделение 3: 1 с 3 ГБ виртуального адресного пространства в пространстве пользователя и только для ядра 1. Это означает, что ядро ​​обычно не может отобразить всю физическую память дажена 2GiB машине, которая отстой.(64-битное ядро, безусловно, хорошая идея, даже если вы по какой-то причине хотите запустить 32-битное пользовательское пространство.)

...