Загружено ли все ядро ​​в память при загрузке?

Я прочитал этот популярный документ IBM (я вижу, что он довольно часто упоминается в Интернете), объясняя функцию исходного RAM-диска.

Я ударил стену в концептуализации того, как это работает.

В документе говорится:

Загрузочный загрузчик, такой как GRUB, идентифицирует ядро, которое должно быть загружено, и копирует этот образ ядра и любой связанный initrd в память

Я уже смущен: копирует ли это все ядро ​​в память или только часть его? Если все ядро ​​находится в памяти, то зачем нам даже нужен начальный RAM-диск?

Я думал, что цель initrd – иметь небольшой обобщенный образ ядра, а initrd будет устанавливать в нем правильные модули до загрузки образа ядра. Но если все ядро ​​уже в памяти, зачем нам нужно initrd?

Это также вызывает другое, что меня смущает – где модули, которые загружаются в ядро? Все модули ядра хранятся внутри initrd?

  • Миграция с tp_smapi на «нормальную» поддержку ACPI в 2.6.36
  • Как запросить подпись EFI
  • почему мы не можем установить приложение, скомпилированное для Ubuntu, на Linux mint или некоторые другие дистрибутивы с одним ядром?
  • Какие последствия могут возникнуть в результате использования альтернативной версии GCC для компиляции ядра?
  • Что такое UUID ядра? Почему они были сумасшедшими?
  • Безопасно ли отключать убийцу OOM в веб-сервере / обратном прокси?
  • Ядро Backport для Debian Jessie?
  • Основной вопрос: Почему linux-образ не соответствует установленной версии?
  • 3 Solutions collect form web for “Загружено ли все ядро ​​в память при загрузке?”

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

    initramfs заключается в предоставлении функциональности, необходимой для монтирования «реальных» файловых систем и продолжения загрузки системы. Это включает в себя модули ядра, а также различные двоичные файлы: вам нужно как минимум udev , возможно, некоторые сети и kmod которые загружают модули.

    Модули могут быть загружены в ядро ​​позже, чем просто загрузка, поэтому нет никакой специальной подготовки ядра initramfs . Они могут храниться где угодно: initramfs , /lib/modules в реальной файловой системе, в дереве разработки, если вы разрабатываете модуль … В initramfs должны быть только модули, необходимые для монтирования корневой файловой системы (которая содержит остальные).

    Все ядро ​​(но не его модули) будет загружено в память. Если есть модули, которые нужны ядру до того, как будут доступны какие-либо файловые системы (это обычно означает драйверы для файловых систем и их устройств), тогда эти модули будут в initramfs (в памяти), и ядро ​​загрузит их оттуда. Другие модули могут быть загружены позже из файловой системы.

    Ядро в современных установках Linux в значительной степени основано на модуле, т. Е. Собственно ядро ​​(загруженное при загрузке в ОЗУ) включает в себя только минимальную функциональность, все остальное скомпилировано как модули (загружаемые во время выполнения). Чтобы сделать эту работу, даже если, например, устройства или файловые системы, необходимые для загрузки, являются модулями, initramfs загружается с ядром (как следует из названия, это область RAM с простой файловой системой, установленной при загрузке). Эта временная файловая система монтируется в / , и содержит программы запуска и необходимые модули. Как только initramfs , Linux выполняет pivot_root(8) , создавая реальное / и бросая содержимое initramfs .

    Дело в том, что, например, дистрибутив может скомпилировать одно ядро (минимальное ядро ​​и полный набор модулей), а при установке ядра создать initramfs учетом аппаратного обеспечения и настройки целевой машины. Все это требуется из-за дикого разнообразия устройств и конфигураций «Персональных компьютеров».

    Linux и Unix - лучшая ОС в мире.