Заочная Школа Программистов
Студия "Unix изнутри"
http://iunix.narod.ru

Предыдущий выпуск рассылки здесь:
http://iunix.narod.ru/material/_N2_bootstrap.html

3. Настройка программного окружения для работы ядра - завершение.

Итак, ядро распаковано. Теперь можно спокойно завершить инициализацию системных регистров процессора и настройку служебных таблиц.
Эту часть инициализации выполняет функция startup_32() из файла /usr/src/linux-2.4.2/arch/i386/kernel/head.S. Она завершает настройку программного окружения для ядра и осуществляет настройку процессора для работы в многопользовательском режиме.

В ней выполняются следующие операции:

Дальше управление передается функции start_kernel(). Начало выполнения этой функции будет ознаменовано появлением сообщения "Linux version 2.x.x ... " в консоли.

4. Инициализация ядра. Приготовление к запуску первого процесса.

Функция start_kernel() ("/usr/src/linux-2.4.2/linux/init/main.c") осуществляет инициализацию всех основных частей ядра - обработчики прерываний, менеджера вируальной памяти, планировщика процессов и т.д.

Теперь ядро готово для перемещения в пользовательский режим. Нулевой процесс, так называемая идеальная задача, продолжает функционировать в бесконечном цикле. Эта задача запускается всегда, когда в системе нет активных процессов.
После возникновения очередного прерывания таймера (не позднее, чем через 0,01 сек) управление будет передано процессу процессу номер 1. Он загрузит с диска и запустит процесс init. Операционная система начинает жизнь. Еще многое необходимо сделать, но вся остальная инициализация производится уже пользовательскими процессами.
Об этом - в следующем выпуске.

Литература

1. http://www.linuxgazette.com/issue70/ghosh.html Hyouck "Hawk" Kim "Как запускается функция main() в Linux", Перевод Андрея Киселева.
2. http://www.linuxgazette.com/issue70/ghosh.html "Bootstrapping a Linux system - an Analysis"
3. http://gazette.linux.ru.net/lg70/articles/rus-ghosh2.html "Bootstrapping, или как Linux сам себя ставит на ноги. Анализ процесса начальной самозагрузки"
4. Ядро ОС Linux. Руководство системного программиста.
5. http://www.moses.uklinux.net/patches/lki.sgml Tigran Aivazian "Linux Kernel 2.4 Internals"
Hosted by uCoz