Почему ядро сопоставлено с тем же адресным пространством, что и процессы
Это вопрос, который следует уточнить по этому вопросу: Почему ядро говорит, что находится в адресном пространстве процесса?
Это может быть глупый вопрос, но он просто появился у меня в голове. Все текст об адресном пространстве процесса и макете виртуальной памяти что пространство адресов процесса имеет пространство, зарезервированное для ядра. Напр. на 32-битных системах адресное пространство процесса составляет 4 ГБ, из которых 1 GB зарезервирован для ядра в Linux (может отличаться от других ОС).
Мне просто интересно, почему ядро, как говорят, находится в адресе процесса когда процесс не может напрямую обращаться к ядру. Почему бы нам скажем, что ядро имеет отдельное адресное пространство, чем процесс и почему у нас нет другой таблицы страниц для самого ядра, которая отдельно от таблиц страниц процессов?
Могу ли я получить объяснение относительно конкретной операционной системы Linux (debian или ubuntu).
Ответы
Ответ 1
Процесс "владеет" всем виртуальным адресным пространством здесь, ядром и его частями пользователя.
Невозможность заглянуть и вытолкнуть код ядра и данные не из-за разных адресных пространств, из-за разных прав доступа/разрешений, установленных в таблицах страниц. Страницы ядра настроены таким образом, что обычные приложения не могут получить к ним доступ.
Тем не менее, обычно принято ссылаться на две части одной цельной вещи как пространство ядра и пространство пользователя, и это может сбить с толку.
Ответ 2
Чтобы ответить на другую часть вопроса - ядро отображается в каждом адресном пространстве процессов частично по причинам эффективности/производительности (есть и другие, я уверен). На большинстве современных аппаратных средств более быстрое изменение уровня безопасности (таким образом, обеспечивается доступ к защищенным страницам, как это было сказано в ответе Алексея) для выполнения системных вызовов и других функций, предоставляемых ядром, чем для изменения уровня безопасности и всю карту виртуальной памяти, а также все связанные с ней потоки кэша TLB и все остальное, включенное в полный контекстный переключатель. Поскольку системные вызовы могут быть довольно частыми событиями, дизайн, который развился в Linux и во многих других местах, заключается в попытке минимизировать накладные расходы на использование сервисов ядра, а отображение кода ядра и (по крайней мере некоторых) данных в каждый процесс часть этого.
Ответ 3
Еще одна важная причина, по которой мы говорим, что ядро находится в адресном пространстве процесса, является то, что ядро может получить доступ к пользовательскому коду/данным процесса CURRENT, то есть к виртуальному адресному пространству 0 ~ 3G.
Извини за мой плохой английский. Я не являюсь носителем английского языка.
Ответ 4
Представьте, что произойдет, если ядро не будет отображаться в каждом адресном пространстве процесса.
тройная ошибка, потому что говорят о прерывании таймера, тогда процессор вызывает процедуру ISR
используя IDT (таблица дескрипторов прерываний). Если ядро не отображается, то IDT-адрес становится
недействительным и, следовательно, приведет к тройной ошибке.