Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Процесс загрузки
init — место, откуда начинается инициализация системы
Подобный материал:
1   ...   23   24   25   26   27   28   29   30   ...   101

Процесс загрузки


Все компьютеры семейства х86 загружаются одинаково. Детали этого процесса для целей данного текста значения не имеют и потому будут опущены. Процесс загрузки представляет собой последовательность событий, начинающуюся с включения питания. Обычно после этого начинает выполняться проверка оборудования, известная как POST (Power On Self Test), во время которой подсистемы компьютера проверяются на наличие проблем, мешающих его нормальному функционированию, таких как плохая память и прочее. Как правило, успешное завершение этого теста сопровождается одиночным гудком из динамика компьютера. Два гудка или более означают наличие проблемы. По количеству гудков можно определить причину проблемы.

После успешного завершения POST запускается небольшая программа-загрузчик, которая, в свою очередь, запускает загрузчик побольше. Этот второй загрузчик последовательно просматривает все места, в которых может содержаться загрузочный код операционной системы, и запускает на выполнение первый найденный. Обычно порядок просмотра следующий: загрузочный сектор гибкого диска, загрузочный сектор первого жесткого диска, загрузочный сектор компакт-диска в первом приводе CD-ROM. Изменение порядка просмотра осуществляется при помощи параметров BIOS, для доступа к которым следует нажать специальную клавишу (F2, Del или Insert) во время выполнения POST.

Обнаружив загрузочный сектор, в котором содержится загрузочный код ОС, система перемещает его в память и запускает на выполнение. В большинстве Linux систем это будет код LILO (от Linux Loader). LILO — это программа, позволяющая пользователю выбрать, какую из установленных на компьютере операционных систем (или различных ядер Linux) следует загрузить. Загрузчик LILO удобно использовать в случае, если на компьютере установлено несколько разных ОС (например, Linux и Windows), но даже если система всего одна, загрузчик LILO позволяет выбрать один из нескольких вариантов конфигурации этой системы. Будучи написан специально для Linux, загрузчик LILO позволяет передавать дополнительные аргументы ядру или программе init.


ПРИМЕЧАНИЕ

В данном тексте обсуждается архитектура Intel. В других архитектурах, таких как Spare или Alpha, используются похожие загрузчики, но с другими именами, например SILO (Spare) или MILO (Alpha) и т. д.

После того как пользователь сделает свой выбор, LILO загружает ядро ОС. Подробное обсуждение процесса загрузки ядра выходит за рамки этой книги, достаточно сказать, что это многоступенчатый процесс. Как правило, на диске образ ядра хранится в сжатом виде, а при загрузке в память он разжимается. В мире Linux принято использовать букву z как признак того, что данный образ является сжатым, например vmlinuz, zImage или bzImage. Отсюда следует, что, в отличие от DOS, образ ядра считывается с диска лишь во время загрузки. После загрузки никаких обращений к образу ядра на диске не делается, поэтому удаление или модификация соответствующего файла никак не влияет на функционирующее ядро. Для вступления в силу изменений, затронувших образ ядра на диске, система должна быть перезагружена. Кроме того, по размеру образа ядра на диске нельзя сказать, сколько места оно займет в памяти.

init — место, откуда начинается инициализация системы


После того как ядро было загружено в память, систему можно считать работающей. Однако пользы от ее работы не слишком много, поскольку взаимодействием с пользователями ядро не занимается. Получив управление, ядро запускает одну (и только одну) программу: init. Эта программа отвечает за выполнение всех остальных процедур и является родителем всех процессов. Передав управление init, ядро переходит к выполнению своей обычной функции менеджера системы, то есть к управлению пространством ядра и распределению ресурсов между процессами.


ПРИМЕЧАНИЕ

Под пространством ядра (kernel space) понимается память и функции, принадлежащие исключительно ядру. Эта память является защищенной. Дополнительным к пространству ядра является пространство пользователя (user space), в котором выполняются все программы, запущенные пользователями (включая суперпользователя).

Начав работу, программа init обращается к расположенному в каталоге /etc файлу inittab (от initialization table — таблица инициализации) для получения значений конфигурационных параметров. Для отсутствующих в нем параметров используются значения по умолчанию, но только если они не были переопределены из командной строки. Листинг 7.1 показывает содержимое файла inittab, используемого в OpenLinux 2.3.


СОВЕТ

Суффикс tab в названии таких файлов, как inittab, fstab, mtab и т. д., означает, что файл представляет собой таблицу, как правило, конфигурационную. В случае с inittab в ней содержится информация об инициализации системы, примерно как в файле config.sys в DOS.


Листинг 7.1. Файл /etc/inittab с добавленными номерами строк4
  1. #
  2. # inittab This file describes how the INIT process should set up
  3. # the system in a certain run-level.
  4. #
  5. # Author: Miquel van Smoorenburg,
  6. # Modified for RHS Linux by Marc Ewing and Donnie Barnes
  7. # Modified for COL by Raymund Will
  8. #
    9
  1. # The runlevels used by COL are:
  2. # 0 - halt (Do NOT set initdefault to this)
  3. # 1 - Single user mode (including initialisation of network interfaces,
  4. # if you do have networking)
  5. # 2 - Multiuser, (without NFS-Server und some such)
  6. # (basically the same as 3, if you do not have networking)
  7. # 3 - Full multiuser mode
  8. # 4 - unused
  9. # (should be equal to 3, for now)
  10. # 5 - X11
  11. # 6 - reboot (Do NOT set initdefault to this)
    21
  1. #
  2. # Default runlevel.

24 id:5:initdefault:
25
  1. # System initialization.
  2. sO::sysinit:/bin/bash -c 'C=/sbin/booterd; [ -x $C ] && $C'
  3. si::sysinit:/bin/bash -c 'C=/etc/rc.d/rc.modules: [ -x $C ] && $C default'
  4. s2::sysinit:/bin/bash -c 'C=/etc/rc.d/rc.serial; [ -x $C ] && $C'

30 bw::bootwait:/etc/rc.d/rc.boot
31
  1. # What to do in single-user mode.
  2. ~1:S:wait:/etc/rc.d/rc 1

34 ~~:S:wait:/sbin/sulogin
35
  1. 10:0:wait:/etc/rc.d/rc 0
  2. 11:l:wrtt:/etc/rc.d/rc 1
  3. 12:2:wait:/etc/rc.d/rc 2
  4. 13:3:wait:/etc/rc.d/rc 3
  5. 14:4:wait:/etc/rc.d/rc 4
  6. 15:5:wait:/etc/rc.d/rc 5
  7. 16:6:wait:/etc/rc.d/rc 6
  8. # Normally not reached, but fallthrough in case of emergency.

44 z6:6:respawn:/sbin/sulogin
45
  1. # Trap CTRL-ALT-DELETE
  2. ca:12345:Ctrlaltdel:/sbin/shutdown -t3 -r now
    48
  1. # Action on special keypress (ALT-UpArrow).
  2. kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
    51
  1. # When our UPS tells us power has failed, assume we have a few minutes
  2. # of power left. Schedule a shutdown for 2 minutes from now.
  3. # This does, of course, assume you have powerd installed and your
  4. # UPS connected and working correctly.

56 pf::powerfail:/sbin/shutdown -h +5 "Power Failure: System Shutting Down"

57
  1. # If battery is fading fast -- we hurry...
  2. pi::powerfailnow:/sbin/shutdown -c 2> /dev/null
  3. p2::powerfailnow:/sbin/shutdown -h now "Battery Low..."
    61
  1. # If power was restored before the shutdown kicked in, cancel it.
  2. po:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
    64

65
  1. # Run gettys in standard runlevels
  2. 1:12345:respawn:/sbin/getty ttyl VC linux
  3. 2:2345:respawn:/sbin/getty tty2 VC linux
  4. 3:2345:respawn:/sbin/getty tty3 VC linux
  5. 4:2345:respawn:/sbin/getty tty4 VC linux
  6. 5:2345:respawn:/sbin/getty tty5 VC linux
  7. 6:2345:respawn:/sbin/getty tty6 VC linux
    73
  1. # Run kdm in runlevel 5
  2. kdm:5:respawn:/opt/kde/bin/kdm -nodaemon > /var/log/kdm 2>&1

Файл /etc/inittab, содержимое которого приведено в листинге 7.1., позаимствован из комплекта OpenLinux 2.3 компании Caldera. В другом комплекте Linux содержимое этого файла почти наверняка будет иным. Однако если сравнить между собой комплекты Caldera и Red Hat (равно как и SuSE, Mandrake или Debian), то различий наберется куда меньше, чем при сравнении любого из этих комплектов и комплекта Slackware. В каждом из комплектов Linux используется одна и та же программа инициализации init (в любом из них эта программа получается в результате компиляции одного и того же исходного кода), то вся разница в процессах инициализации задается исключительно файлом inittab, подробным рассмотрением которого мы и займемся.