Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К_Глава 4_Загрузка программ.doc
Скачиваний:
32
Добавлен:
19.05.2015
Размер:
131.07 Кб
Скачать

4. Загрузка самой ос

Роль ПЗУ. Начало загрузки.

При загрузке самой ОС возникает специфическая проблема: в пустой машине, скорее всего, нет программы, которая могла бы это сделать.

В системах, в которых программа находится в ПЗУ (или другой энергонезависимой памяти) этой проблемы не существует: при включении питания программа в памяти уже есть и сразу начинает исполняться. При включении питания или аппаратном сбросе процессор исполняет команду, находящуюся по определенному адресу, например, 0*FFFFFFFA. Если там находится ПЗУ, а в нем записана программа, она и начинается исполняться.

Компьютеры общего назначения также не могут обойтись без ПЗУ. Программа, записанная в нем, называется загрузочным монитором. Стартовая точка этой программы должна находиться как раз по тому адресу, по которому процессор передает управление в момент включения питания. Эта программа производит первичную инициализацию процессора, тестирование памяти и обязательно периферийного оборудования, и, наконец, начинает загрузку системы. В компьютерах, совместимых сIBMPC, загрузочный монитор известен какBIOS.

На многих системах в ПЗУ бывает прошито нечто большее, чем первичный загрузчик. Это может быть целая контрольно – диагностическая система, называемая консольным монитором. Такой монитор позволяет вам просматривать содержимое памяти по заданному адресу, записывать туда данные, запускать какую – то область памяти как программу и многое другое. Он же позволяет выбирать устройство, с которого будет производиться дальнейшая загрузка.

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

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

Кроме того, конструктивы многих систем предполагают установку ПЗУ на платах контроллеров дополнительных устройств. Это ПЗУ должно содержать программный модуль, способный проинициализировать устройство и произвести загрузку с него.

Как правило, сервисы загрузочного монитора доступны загружаемой системе. Доступ к функциям ПЗУ позволяет значительно сократить код первичного загрузчика ОС, и, нередко, сделать его независимым от устройства.

Первичный загрузчик. Загрузка ядра. Бутстрап.

Загрузка происходит с устройств с произвольным доступом, как правило – с дисков. При этом обычно в память считывается нулевой сектор нулевой дорожки диска. Содержимое этого сектора называют первичным загрузчиком. ВIBMPCэтот загрузчик называютзагрузочным сектором илиboot – сектором.

Как правило, первичный загрузчик, пользуясь сервисами загрузочного монитора, ищет на диске начало файловой системы своей родной ОС, находит в этой файловой системе файл с определенным именем, считывает его в память и передает этому файлу управление. В простейшем случае такой файл и является ядром операционной системы.

Размер первичного загрузчика ограничен чаще всего размером сектора на диске, т. е. 512 байтами. Если файловая система имеет сложную структуру, иногда первичному загрузчику приходиться считывать вторичный, размер которого может быть намного больше. Из – за большего размера этот загрузчик намного умнее и в состоянии разобраться в структурах файловой системы. В некоторых случаях используются и третичные загрузчики. Это последовательное исполнение втягивающих друг друга загрузчиков возрастающей сложности называетсябутстрапом (bootstrap), что можно перевести как "втягивание [себя] за шнурки от ботинок".

Загрузка по сети

Большую практическую роль играет еще один способ загрузки – загрузка по сети. Она происходит аналогично загрузке с диска: ПЗУ, установленное на сетевой карте, посылает в сеть пакет стандартного содержания, который содержит запрос к серверу удаленной загрузки. этот сервер передает по сети вторичный загрузчик и т. д. Такая технология незаменима при загрузке бездисковых рабочих станций. Централизованное размещение загрузочных рабочих станций на сервере упрощает управление ими, защищает настройки ОС от случайных и злонамеренных модификаций и существенно удешевляет эксплуатацию больших парков настольных компьютеров, поэтому по сети нередко загружаются и машины, имеющие жесткий диск.

ПРИМЕЧАНИЕ

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

При переконфигурации системы, добавлении или удалении драйверов и других модулей необходима пересборка ядра, которая может производиться либо стандартным системным редактором связей, либо специальными утилитами генерации системы. Для такой пересборки в поставку системы должны входить либо исходные тексты, либо объектные модули ядра. Сборка ядра из объектных модулей на современных системах занимает не более нескольких минут. Полная перекомпиляция ядра из исходных текстов, конечно, продолжается существенно дольше. На случай, если системный администратор ошибется и соберет неработоспособное ядро, вторичный загрузчик таких систем часто предоставляет возможность выбрать файл, который следует загрузить. Ядро таких систем обычно не использует никаких конфигурационных файлов – все настройки также задаются при генерации.

Сложная загрузка. Сборка в момент загрузки

Большинство современных ОС используют более сложную форму загрузки, при которой дополнительные модули подгружаются уже после старта самого ядра. В терминах предыдущих разделов это называется "сборка в момент загрузки". список модулей, которые необходимо загрузить, а также параметры настройки ядра, собраны в специальном файле или нескольких файлах. У DOSиOS/2 этот файл называетсяCONFIG.SYS, уWin32 – систем – реестром (registry).

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

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

Некоторые системы, например DOS, могут грузиться только с устройств, поддерживающихBIOS, и только из одного типа файловой системы –FAT, драйвер которой скомпонован с ядром. Любопытное развитие этой идеи представляетLinux, модули которого могут присоединяться к ядру как статически, так и динамически. Динамически могут подгружаться любые модули кроме драйверов загрузочного диска и загрузочной файловой системы.

Сложная загрузка - развитие

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

Во – первых, это допускает подгрузку модулей по запросу. Второе преимущество состоит в возможности реконфигурировать систему без перезагрузки, что особенно полезно для систем коллективного пользования.

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

Так, системы семейства UNIXимеют специальную инициализационную программу, которая называется –init. Эта программа запускает различные процессы, например, – программу, которая умеет запускать другие заданные ей программы в заданные ей моменты времени, различные сетевые сервисы, программы, которые ждут ввода с терминальных устройств, и т. д. Набор запускаемых программ задается в файле /etc/inittab(в разных версиях системы этот файл может иметь разные имена). Администратор системы может редактировать этот файл и устанавливать те сервисы, которые в данный момент нужны, избавляться от тех, которые не требуются, и т. д.

Программа initостается запущенной все время работы системы. Она, как правило, следит за дальнейшей судьбой запущенных ею процессов. В зависимости от заданных в файле /etc/inittabпараметров, она может либо перезапускать процесс после его завершения, либо не делать этого.

Аналогичный инициализационный сервис в той или иной форме предоставляют все современные операционные системы.

Загрузка с помощью другой ОС

Существуют ОС, которые не умеют самостоятельно выполнять весь цикл бутстрапа. Они используют более примитивную операционную систему, которая исполняет их вторичный загрузчик, и помогает этому загрузчику поместить память ядро ОС. На процессорах x86 в качестве стартовой системы часто используетсяMS/DRDOS, а загрузчик новой ОС оформляется в видеEXE– файла.

Таким образом устроены системы MSWindows95/98/ME,DesqViewи ряд других "многозадачников" дляMSDOS. Таким же образом загружается серверNowellNetware, системаOberonдляx86, программы, написанные для различных расширителяхDOS(DOSextenders) и т. д. Многие из перечисленных систем, напримерWindowsиспользуютDOSи во время работы в качестве дисковой подсистемы.