Довольно познавательно про загрузку написано в википедии
Процесс загрузки Linux
Ниже выдержка определения Процесса загрузки и Основные этапы загрузки. Для общего представления начинающим линуксоидом, этого достаточно. Для более подробного ознакомления с вопросом (фазы загрузки, этапы, реализации конкретных действий в определенных загрузчиках), лучше пройти по вышеозначеной ссылке.
При загрузке компьютера происходит последовательная передача управления от системной прошивки компьютера (BIOS или UEFI) к загрузчику (на самом деле цепочки загрузчиков), а от него — к ядру. Затем ядро запускает планировщик (для реализации многозадачности) и выполняет программу init (которая настраивает пользовательское окружение и позволяет осуществлять взаимодействие с пользователем и вход в систему), после чего ядро переходит в состояние бездействия до тех пор, пока не получит внешний вызов.
Основные этапы загрузки, работы и завершения:
1. Системная прошивка компьютера выполняет первичную проверку и инициализацию аппаратного обеспечения.
2. В случае BIOS прошивка загружает в оперативную память и выполняет загрузочный код с одного из разделов заданного загрузочного устройства, который содержит фазу 1 загрузчика Linux. Фаза 1 загружает фазу 2 (значительный по размеру код загрузчика). Некоторые загрузчики могут использовать для этого промежуточный этап (под названием фаза 1,5), поскольку современные диски большого объёма могут некорректно считываться без дальнейшего кода. Для загрузки ОС с некоторых файловых систем в ядре Linux может не быть драйвера, в этом случае есть возможность разместить такой драйвер в первых секторах диска (начиная со второго и по 63-й) (?).
В случае UEFI запускается загрузчик загруженный со служебного раздела (EFS или FAT??), который выбирается согласно настройкам приоритета загрузки определенного в энергонезависимой памяти компьютера. При этом возможна загрузка не только специализированного загрузчика, но можно загрузить и непосредственно ядро Linux (для этого ядро должно быть собрано с опцией EFI_STUB).
3. Загрузчик зачастую предлагает пользователю меню с доступными вариантами загрузки. После выбора или после заданного тайм-аута загрузчик загружает ядро.
4. Загруженное ядро распаковывается в памяти, настраивает системные функции, такие как работа необходимого оборудования и управление страницами памяти, после чего делает вызов start_kernel().
5. После этого start_kernel() выполняет основную настройку системы (прерывания, остальные функции управления памятью, инициализацию устройств, драйверов и т. д.), а потом порождает процесс бездействия, диспетчер и отдельно от них — процесс init (выполняющийся в пользовательском пространстве).
6. Планировщик начинает более эффективно управлять системой, в то время как ядро переходит к бездействию.
7. Процесс init выполняет необходимые сценарии, которые настраивают все службы и структуры, не относящиеся к уровню ядра, в результате чего будет создано пользовательское окружение, и пользователю будет предоставлен экран входа в систему.
8. После старта системы пользователь запускает необходимые для него программы (консоль, браузер, офисные пакеты, медиа и видеоплееры, специализированое ПО и т.д.)
9. В запущенных программах открывает соответствующие пользовательские данные, файлы.
10. При окончании работы с файлами, пользователь (если нужно) сохраняет свои данные и закрывает программы.
11. В процессе работы пользователь может открывать, редактировать, сохранять и закрывать программы и документы. В процессе работы он может выполнять действия по обслуживанию компьютера вообще (например, проверка HDD на бэд-блоки и исправление сбойных секторов) и ОС в частности (например, тюнинг/кастомизация, бекапирование). Также он может устанавливать, настраивать необходимое для работы ПО. Не нужное ПО может удалять.
12. По окончании работы пользователь сохранив все нужные ему данные, закрывает все программы и выходит из сеанса и/или выключает/перезагружает компьютер.
13. В случае проблем в работе компьютера (лагов, фризов, артефактов, неправильного отображения, не работы отдельных подсистем, зависаний), пользователь может попробовать вычислить проблемный процесс и остановить его, настроить необходимые конфигурационные файлы, перезагрузить одну из основных подсистем (например X), настроить необходимую для работы систему (например, видео, аудио, локальную сеть), перезагрузить или выключить компьютер, с тем что бы провести диагностические и/или ремонтные действия.
Когда происходит завершение работы, init вызывается для управляемого закрытия программ пользовательского уровня, тоже согласно сценариям. После этого init закрывается, а ядро производит своё собственное завершение работы.
Есть еще такая ссылка
https://habr.com/post/113350/
изложение материала довольно популярное, но (на мой взгляд) не полное. Например, такой шаг, как запуск планировщика, даже не упоминается.