3. Что происходит когда вы включаете компьютер?

Компьютер без работающих на нем программ просто инеретный кусок элкетроники. Первое что компьютер делает когда его включают это запускает специальную программу называемую операционная система. Назначение операционной системы заключается в том чтобы помочь другим компьютерным программам работать, выполняя грязную часть работы по управлению компьютерным железом.

Процеесс приведения операционной системы в готовность называется загрузка (booting) (первоначально это было bootstrapping и намекало на процесс поднимания самого себя за шнурки "by your bootstraps"). Ваш компьютер знает как загрузиться потому что инструкции для загрузки встроены один из его чипов, в чип BIOS (Basic Input/Output System) (основная система ввода/вывода).

BIOS указывает ему где искать специальную программу загрузчик (в Linux это Grub или LILO) в закрепленном за ней месте, обычно на жестком диске имеющем наименьший порядковый номер (загрузочный диск). Загрузчик извлекается, помещается в память и начинает выполняться. Работа загрузчика в том чтобы запусть реальную опреационную систему.

Чтобы сделать это загрузчику надо найти ядро (kernel), загрузить его в память, и дать ему старт. Когда вы загружаете Linux и видите на экране монитора надпись "LILO" с бегущей вереницей точек после нее, это загружается ядро. (Каждая точка означает что с диска загружен очередной блок данных (disk block) кода ядра.

(Вы можете удивиться почему BIOS не загружает ядро напрямую — зачем нужен двухшаговый процесс с использованием загрузчика? Что ж, BIOS не очень умна. На поверку, она очень бестолкова, и Linux после загрузки не использует ее вовсе. Первоначально, BIOS была написана для примитивных 8-битовых PC с крошечными дисками, и буквально не может получить достаточный доступ к диску для прямой загрузки ядра. Используя загрузчик вы также имеете возможность выбрать одну из нескольких операционных систем размещенных на разных частях вашего диска, в случае если Unix недостаточно хороша для вас.)

Стартовав, ядро осматривается, обнаруживает все аппаратное обеспечение, и делает все необходимые приготовления для запуска программ. Оно делает это опрашивая не обычные адреса памяти, а правильные порты ввода/ввывода (I/O ports) — специальные адреса шин, которые прослушивают для получения команд вероятные контроллеры. Ядро не опрашивает случайные адреса; оно имеет встроенные знания о том что и где искать и как карты контроллеров отвечают, если они присутствуют. Этот процесс называется автопробы (autoprobing).

Большинство сообщений которые вы видите во время загрузки это вывод ответов портов ввода/ввыдвода на запросы ядра в результате автопроб вашего аппаратного обеспечения, оно вычисляет что имеется в наличии и адапртирует само себя к вашей машине. Ядро Linux чрезвычайно хорошо с этим справляется, лучше чем большинство других Unix и значительно лучше чем DOS или Windows. Много ветеранов Linux полагали, что искусность проб (probe) Linux при загрузке (что сделало ее сответственно простой в установке), стало важной причиной и по сути привело к тому что она перестала быть набором для экспериментов со свободной Unix и привлекла критическую массу пользователей.

Но полная загрузка ядра и его запуск это не конец процесса загрузки; это только первая ступень (иногда называемая уровень выполнения 1 (run level 1). После этой первой фазы ядро передает контроль специальному процессу называемому ‘init’, который порождает несколько процессов занимающихся домашним хозяйством.

Обычно, первая работа процесса init это проверка что ваши диски в порядке. Дисковые файловые системы хрупкие вещи; если они были повреждены вследствии аппаратного сбоя или внезапного перебоя в сети электропитания, то это хороший повод сделать несколько шагов в направлении их восстановления прежде чем загрузить вашу Unix полностью. Мы обратимся к этой теме позже, когда будем говорить о О неисправностях файловых систем.

Следующий шаг init это запуск нескольких демонов (daemons). Демоны (сервисы, службы) это такие программы как диспетчер печати, почтовый агент или сервер WWW, которые выполняются в фоновом режиме, ожидая наступления определенных событий для того чтобы приступить к работе. Часто это специальные программы координирующие обработку несколько отдельных запросов которые могут конфликтовать с друг другом. Они демоны (работают как черти), потому что проще написать одну программу, которая выполняется в постоянном режиме и знает все о запросах, чем пытаться убедиться, что табун копий программы (каждая из которых обрабатывает отдельный запрос и все они выполняются одновременно) не мешают друг другу. Набор демонов которые стартуют при загрузке вашей системы может может варьироваться, но диспетчер печати (привратник вашего принтера) почти всегда там будет.

Следующий шаг это приготовиться к работе с пользователем. Init запускает копию программы называемой getty, которая ожидает ввода с вашей консоли (и возможно еще копии, которые ожидают подключения удаленных пользователей через последовательные порты). Результат работы этой программы это приглашение login на вашей консоле. После запуска всех демонов и процессов getty для каждого терминала, мы переходим на 2-ой уровень выполнения (run level 2). На этом уровне вы можете войти в систему и запускать программы.

Но мы еще не закончили. Следующий шаг это запуск различных демонов, поддерживающих работу с сетью и другие устройства. После того как это будет сделано, мы переходим на уровень выполнения 3 (run level 3) и теперь система полностью готова к использованию.