Привет любителям техники. На этот раз я вернулся к одной из интересных тем Linux — как запускается операционная система. Причиной написания этого блога является любопытство внутри меня, которое тянет вниз, чтобы узнать, что происходит под капотом, когда ОС запускается. После того, как я узнал, не могу остановиться, чтобы поделиться со всеми вами. Я считаю, что человек не может научиться всему, но если делиться знаниями, то ученику становится легче понять все правильно за короткий промежуток времени. Всегда старайтесь делиться своими знаниями. Это улучшает ваши знания, а также экономит время других.
- Как загружается ядро Linux?
- Это происходит после нажатия кнопки Power ON компьютера.
- BIOS (базовая система ввода/вывода) выполняет проверку POST (самотестирование при включении питания).
- Что делает MBR?
- GRUB(Grand Unified Boot Loader)
- Для чего используется GRUB?
- GRUB должен найти ответ на два вопроса:-.
- блок-схема: —
- Ссылки
Как загружается ядро Linux?
Давайте начнем с темы «как запускается или загружается система Linux».
Это происходит после нажатия кнопки Power ON компьютера.
Когда пользователь включает компьютер, питание поступает на материнскую плату. Материнская плата пытается запустить процессор. После запуска процессора, прежде всего, он очищает старые данные из регистров. После этого процессор обращается к своей ячейке памяти (0xffff0000→ адресный сектор на жестком диске), чтобы проверить, есть ли какая-либо инструкция или нет. Кстати, этот адрес является домом или местом расположения BIOS. По сути, процессор выполняет программу BIOS. Таким образом, BIOS запускается.
Примечание: —
По сути, BIOS или UEFI представляют собой встроенное программное обеспечение. Общее различие между ними заключается в том, что BIOS является традиционной, а UEFI — современной. Ваша система может иметь любую из них.
Чтобы проверить, какая из них присутствует в вашей системе, выполните командуefibootmgr
.
BIOS (базовая система ввода/вывода) выполняет проверку POST (самотестирование при включении питания).
После запуска BIOS выполняет различные проверки или тесты многих компонентов аппаратного обеспечения, таких как тест процессора, тест оперативной памяти и т.д. Весь процесс тестирования известен как POST (Power On Self Test). В принципе, основная задача BIOS — убедиться, что аппаратное обеспечение компьютера функционирует правильно или нет. Если POST не работает, компьютер может оказаться непригодным для использования, и процесс загрузки не будет продолжен. После успешного завершения операции POST. Следующей задачей BIOS является поиск загрузочного сектора на подключенных дисках. А знаете ли вы, что содержит загрузочный сектор? Это загрузочная запись, известная как Master Boot Record (MBR). Проще говоря, BIOS загружает код инструкций MBR
в оперативную память, выполняет его и передает управление MBR.
Что делает MBR?
Первый 512-байтовый сектор на жестком диске вместе с таблицей разделов. Общий объем пространства, отведенного под собственно MBR, составляет 446 байт, остальное место отводится под таблицу разделов.
Поскольку загрузочная запись должна быть такой маленькой, она также не очень умна и не понимает структуры файловой системы. Поэтому единственная цель MBR — найти и загрузить GRUB. Для этого GRUB должен быть расположен в пространстве между MBR и первым разделом диска. После загрузки GRUB в оперативную память MBR передает управление программе GRUB.
At sector 0 ---> MBR is located of size 512 bytes
Between sector 0 and 2048 ---> GRUB is located of size which is of size 1MiB(2048*512 bytes = 1024KiB = 1MiB)
From 2049 sectors onwards ---> Partitioning of disk starts
Примечание: Жесткий диск разделен на сектора. Сектор — это наименьшая единица жесткого диска. 1 сектор = 512 байт
GRUB(Grand Unified Boot Loader)
Знаете ли вы!!!
Для чего используется GRUB?
Чтобы получить ответ на этот вопрос, необходимо знать, что такое загрузка.
В техническом смысле загрузка означает копирование образа ядра с жесткого диска в память и последующее его выполнение. Так вот, копирование образа ядра с диска в память выполняет программа GRUB. Вместе с образом ядра GRUB также помогает передать некоторые параметры. Именно в этом случае GRUB становится полезным.
Но самая большая проблема для GRUB — как найти образ ядра на диске. Слушайте внимательно, не запутайтесь. Я знаю, вы думаете, что поиск любого файла в Linux очень прост, да, вы правы на 100%, но это происходит, когда ваша ОС находится в рабочем состоянии (т.е. запущено ядро + запущены необходимые драйверы и программы).
Но в настоящее время запущен только GRUB, ваша система еще не запущена. Это означает, что ни ядро не запущено, ни необходимые драйверы и программы не запущены. Таким образом, поиск любого файла становится невыполнимой задачей. Тогда как GRUB ищет образ ядра с диска.
Давайте посмотрим, как GRUB решает эти проблемы.
GRUB должен найти ответ на два вопроса:-.
1) Что такое ядро и его параметры?
2) И как найти его на жестком диске?
Чтобы загрузить образ ядра в память, GRUB должен найти образ ядра вместе с параметрами на диске. Чтобы получить доступ к жесткому диску и файловой системе для поиска образа ядра. GRUB пользуется помощью BIOS или UEFI. Кстати, диск позволяет BIOS или UEFI получить доступ к аппаратной памяти через логическую адресацию блоков (LBA). Вы можете вспомнить, как BIOS искал MBR на диске. LBA — это универсальный, простой способ доступа к данным с любого диска. Еще один момент: большинство программ загрузки, GRUB, могут читать таблицу разделов (индексную страницу, которая сопоставляет файлы с соответствующими адресами на жестком диске), что является встроенной поддержкой доступа к файловой системе только для чтения. Таким образом, GRUB решает проблему поиска образов ядра на диске. Получив образ ядра (т.е. .iso файл) и его параметры, он загружает его в память, вместе с этим он также загружает *initramfs *.
Ниже, BOOT_IMAGE относится к образу ядра и его параметру.
BOOT_IMAGE=/boot/vmlinuz-4.15-generic root=UUID=179hfy4955 ro quiet splash vt.handoff=1
образ ядра —> /boot/vmlinuz-4.15-generic
Параметры —> root, ro(только чтение), vt.handoff,
.
initramfs — это архив, содержащий модули ядра для аппаратного обеспечения, необходимые во время загрузки, скрипты инициализации, драйверы и многое другое. Это модули, которые связываются как с аппаратным, так и с программным обеспечением. Может возникнуть вопрос, почему образ ядра не связан напрямую с его модулями? Почему эти модули хранятся отдельно в виде initramfs
. Давайте опровергнем нашу мысль, допустим, что все модули ядра присутствуют внутри образа ядра. В принципе, что произойдет, когда процессор начнет выполнять образ ядра, то вместе с ним начнут выполняться и все модули, независимо от того, нужны они ядру или нет. Это приводит к загрузке оперативной памяти или ее переполнению. В результате память может разрушиться. Поэтому модули ядра разделяются, и из initramfs
берутся только те модули, которые необходимы ядру в данный момент времени. Например, все мы знаем, что существует модуль или драйвер для принтера, который используется, когда принтер подключен. Но во время загрузки модуль драйвера принтера не требуется. Но если он выполняется слишком часто, то это приводит к растрате оперативной памяти и процессора. Подробнее о initramfs
читайте здесь.
После того, как GRUB загрузит образ ядра и выполнит/запустит его. Управление передается от GRUB к ядру, и с этого момента начинается работа ядра.
Высокоуровневое представление о работе ядра:
- Инициализация ядра
- проверка процессора
- Проверка памяти
- Обнаружение шины устройства
- Обнаружение устройств
- Настройка вспомогательной подсистемы ядра
- Монтирование корневой файловой системы
- Запуск пользовательского пространства (systemd)
В процессе инициализации ядро должно смонтировать корневую файловую систему перед запуском init или systemd. Нам нет необходимости подробно останавливаться на этом. Наконец, последняя задача ядра — запустить Systemd и передать управление Systemd. На этом процесс загрузки завершается. В этот момент ядро Linux и systemd запущены, но не могут выполнять никаких продуктивных задач для конечного пользователя, потому что больше ничего не запущено.
Systemd — это менеджер систем и сервисов в Linux. Это мать всех процессов и программ. Отсюда все ваши службы и программы пользовательского пространства управляются и контролируются им. В следующем блоге мы подробно расскажем о Systemd.
блок-схема: —
https://lucid.app/lucidchart/4345e110-7988-438b-a961-a39113f2d341/edit?invitationId=inv_d794a834-d90d-4931-a62d-94b2220a8c71
Ссылки
https://opensource.com/article/17/2/linux-boot-and-startup
https://learning.oreilly.com/library/view/hands-on-booting-learn/9781484258903/
https://learning.oreilly.com/library/view/how-linux-works/9781098128913/
Спасибо за прочтение. Надеюсь, вам понравилось и вы получили знания. Я старался сделать все возможное, чтобы вы понимали тему шаг за шагом. Спасибо вам, ребята. Увидимся в следующем блоге.