Ответ
Запуск пользовательского пространства (user space) — это заключительный этап загрузки ядра Linux. Процесс выглядит так:
- Инициализация ядра: Ядро монтирует корневую файловую систему (rootfs), инициализирует устройства и подсистемы.
- Запуск init-процесса (PID 1): Ядро выполняет системный вызов
execve()для запуска программы, указанной в параметре ядраinit=. По умолчанию это/sbin/init, который сегодня обычно является симлинком наsystemd. - Инициализация системы systemd:
- Монтирует файловые системы из
/etc/fstab. - Запускает системные сервисы (демоны), описанные в юнитах (
.service,.socketи т.д.). - Активирует
sysinit.targetиbasic.target.
- Монтирует файловые системы из
- Запуск входа в систему: Systemd запускает
getty@.serviceдля виртуальных консолей (tty1-tty6) илиdisplay-manager.serviceдля графического входа. - Аутентификация: Getty или дисплей-менеджер запускают
loginили графический экран входа для аутентификации пользователя. - Пользовательская сессия: После успешного входа запускается оболочка пользователя (например, bash) или сессия рабочего стола.
Минимальный пример на C: Можно написать примитивный init, который просто запускает оболочку (это демонстрирует принцип, но не используется в реальных системах).
#include <unistd.h>
int main() {
// exec заменит текущий процесс (PID 1) на /bin/sh
execl("/bin/sh", "sh", NULL);
// Если execl вернёт управление, значит произошла ошибка
return 1;
}