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