Очень коротко, подробнее можно прочесть в вышеназванных источниках: ядро монтирует корневую файловую систему, и запускает первый процесс init, разыскав его исполняемый файл в нескольких стандартных местах. Этот процесс читает свой конфигурационный файл /etc/inittab (man inittab) и запускает все остальные процессы согласно инструкциям из этого файла. Обычно в inittab прописывается запуск процессов *getty, управляющих терминалами, виртуальными консолями и последовательными линиями (то есть именно *getty ответственны за запуск login (сравнивающий имя и пароль, указанные пользователем, с тем, что прописано в /etc/passwd и в случае успеха запускающий соотв. shell), pppd, ifcico и т.д., что именно запускается и в каком случае - зависит от конкретного getty). Для виртуальных консолей обычно используется mingetty, для модемов - mgetty. Кроме того, здесь же прописываются скрипты, запускающиеся на различных т.н. "уровнях выполнения", из которых в свою очередь запускаются все остальные системные сервисы, осуществляется настройка сети, проверка файловой системы и т.д. Существует два подхода к организации этих уровней и скриптов: BSD и SysV. Оба они описаны в книжке Э. Немет (см. выше), а про SysV можно еще прочесть на sensi.org/~alec/unix/redhat/sysv-init.html.
Как загружается система?
Также по теме: