Почему ядро ​​сопоставлено с тем же адресным пространством, что и процессы

Это вопрос, который следует уточнить по этому вопросу: Почему ядро ​​говорит, что находится в адресном пространстве процесса?

Это может быть глупый вопрос, но он просто появился у меня в голове. Все текст об адресном пространстве процесса и макете виртуальной памяти что пространство адресов процесса имеет пространство, зарезервированное для ядра. Напр. на 32-битных системах адресное пространство процесса составляет 4 ГБ, из которых 1 GB зарезервирован для ядра в Linux (может отличаться от других ОС).

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

Могу ли я получить объяснение относительно конкретной операционной системы Linux (debian или ubuntu).

Ответ 1

Процесс "владеет" всем виртуальным адресным пространством здесь, ядром и его частями пользователя.

Невозможность заглянуть и вытолкнуть код ядра и данные не из-за разных адресных пространств, из-за разных прав доступа/разрешений, установленных в таблицах страниц. Страницы ядра настроены таким образом, что обычные приложения не могут получить к ним доступ.

Тем не менее, обычно принято ссылаться на две части одной цельной вещи как пространство ядра и пространство пользователя, и это может сбить с толку.

Ответ 2

Чтобы ответить на другую часть вопроса - ядро ​​отображается в каждом адресном пространстве процессов частично по причинам эффективности/производительности (есть и другие, я уверен). На большинстве современных аппаратных средств более быстрое изменение уровня безопасности (таким образом, обеспечивается доступ к защищенным страницам, как это было сказано в ответе Алексея) для выполнения системных вызовов и других функций, предоставляемых ядром, чем для изменения уровня безопасности и всю карту виртуальной памяти, а также все связанные с ней потоки кэша TLB и все остальное, включенное в полный контекстный переключатель. Поскольку системные вызовы могут быть довольно частыми событиями, дизайн, который развился в Linux и во многих других местах, заключается в попытке минимизировать накладные расходы на использование сервисов ядра, а отображение кода ядра и (по крайней мере некоторых) данных в каждый процесс часть этого.

Ответ 3

Еще одна важная причина, по которой мы говорим, что ядро ​​находится в адресном пространстве процесса, является то, что ядро ​​может получить доступ к пользовательскому коду/данным процесса CURRENT, то есть к виртуальному адресному пространству 0 ~ 3G.

Извини за мой плохой английский. Я не являюсь носителем английского языка.

Ответ 4

Представьте, что произойдет, если ядро ​​не будет отображаться в каждом адресном пространстве процесса. тройная ошибка, потому что говорят о прерывании таймера, тогда процессор вызывает процедуру ISR используя IDT (таблица дескрипторов прерываний). Если ядро ​​не отображается, то IDT-адрес становится недействительным и, следовательно, приведет к тройной ошибке.