Аппаратная инициализация компьютера
Загрузка операционных систем
Рекомендуемая литература:
1. В.Г.Олифер, Н.А.Олифер. Сетевые операционные системы. Учебное пособие.-СПб.:БХВ-Петербург, 2006.-536с.
2. В.А.Шеховцов. Операційні системи.Підручник .-К.:Виканавча група ВНV. 2005. 576с.
3. Столлингс В. Операционные системы. М.: Вильямс, 2001. -672с.
Раздел 10
Загрузка операционных систем
· Общие принципы организации процесса загрузки
· Процесс загрузки Linux и Windows ХР
Загрузка операционной системы — сложный процесс, который касается большинства подсистем ОС. Его полное понимание невозможно без наличия базовых знаний о структуре разных компонентов системы.
Общие принципы загрузки ОС
Здесь сделаем короткий обзор общих принципов организации загрузки операционных систем. Основное внимание будет уделено аппаратной инициализации компьютера и принципам реализации загрузчика ОС. Последующие этапы загрузки опишем коротко, подробнее они будут рассмотрены на примерах в разделах, посвященных загрузке Linux и Windows ХР.
Аппаратная инициализация компьютера
Когда компьютер включен в электросеть, он в сущности пустой — все его микросхемы памяти содержат случайные значения, процессор не выполняет код. Для начала процедуры загрузки на процессор подают команду RESET (сброс). После ее принятия, некоторые регистры процессора (в частности регистр счетчика команды) приобретают фиксированные значения, и начинается выполнение кода по физическому адресу 0хfffffff0. Аппаратное обеспечение отображает этот адрес на специальный участок энергонезависимой памяти (RОМ). Набор программ, который сохраняется в RОМ, по традиции называют BIOS (Ваsic Input/output). Зузиет, базовая система введения/выведения), он включает набор управляемых прерываниями низкоуровневых процедур, которые можно использовать для управления устройствами, подключенными к компьютеру.
Большинство современных ОС используют BIOS только на этапе начальной загрузки (какой называют bootstrapping). После этого они никогда не обращаются к процедурам BIOS и все функции управления устройствами у ОС берут на себя драйверы этих устройств. Дело в том, что процедуры Вios могут выполняться только в реальном режиме процессора, а ядро — в защищенном режиме; кроме того, обычно код BIOS не имеет высокого качества. Реальную адресацию используют в коде ВIOS потому, что только такие адреса оказываются доступными, когда компьютер едва лишь включено.
Процедура начальной загрузки ВIOS (bootstrap procedure) сводится к четырем операциям.
1. Выполнение набора тестов аппаратного обеспечения для выяснения, какие устройства в системе присутствуют но работают ли все они корректно. Этот этап называют самотестированием после того, что включило питания (Power-on Self-test, Post).
2. Инициализация аппаратных устройств. Этот этап очень важен в современных архитектурах, основанных на шине РСI, поскольку он гарантирует, что все устройства будут работать без конфликтов в случае использования линий прерываний или портов введения-выведения. В конце этого этапа будет отображен список установленных РСІ-устройств.
3. Поиск и выполнение начального кода загрузки. В зависимости от установок Вios осуществляют попытку доступа (в предварительно определенном порядке, который можно изменить) к первому сектору гибкого диска, заданного жесткого диска или компакт-диска. В жестком диске, как уже известно из раздела 12, первый сектор называют главной загрузочной записью (МВR).
4. Когда устройство найдено, Вios копирует содержание его первого сектора в оперативную память (начиная из фиксированного физического адреса 0х00007с00), выполняет команду перехода по этому адресу и начинает выполнять только что загружен код. За все другое отвечает операционная система.
Загрузчик ОС
Загрузчиком ОС (boot loader) называют программу, вызванную кодом ВIOS во время выполнения процедуры начальной загрузки для создания образа ядра операционной системы в оперативной памяти. Рассмотрим основные принципы работы самого простого загрузчика в архитектуре РС.
Как отмечалось, ВIOS начинает выполнять код, который сохраняется в МВR. Обычно МВR содержит таблицу разделов и небольшую программу, которая загружает первый (загрузочный) сектор одного из разделов в память и начинает выполнять код, который находится в нем, — обычно этот код называют кодом загрузчика ОС. Выбор раздела, из которого нужно загрузить сектор, преимущественно осуществляют с помощью флажка активного раздела, заданного для ячейки таблицы разделов. Таким способом можно загрузить только ту ОС, ядро которой находится на активном разделе, другие подходы рассмотрим позже.
Загрузчика ОС обычно записывают в загрузочный сектор во время инсталляции системы, тогда же задается и код для МВR. Код самого простого загрузчика сводится к поиску на диске ядра ОС (обычно это файл, который находится в фиксированном месте корневого каталога) и загрузки его в память.
Двоетапне загрузки
Использование загрузочного сектора для непосредственной загрузки ядра ОС имеет свои особенности:
· код загрузчика вынужденно является очень простым, потому в нем не возможно выполнять более сложные действия (например, руководить загрузкой нескольких ОС), большинство других недостатков являются последствиями этого;
· не возможно передавать параметры в загрузчика;
· процесс ограничен описанной схемой переключения из МВR на загрузочный сектор, нет возможности руководить этим процессом;
· нет возможности загружать ядро из другого раздела диска или из подкаталога;
· ОС всегда будет запущена в реальном режиме процессора.
Для того, чтобы решить эти проблемы, код загрузчика ОС должен быть усложнен. Естественно, что усложненный код не поместится в один сектор, потому предложен подход, который получил название схемы двухэтапной загрузки.
В этом случае загрузчика разбивают на две части: загрузчик первого и второго этапов. Первый, как и раньше, хранят в загрузочном секторе диска (отметим, что во время использования этой технологии он может также сохраняться и в МВR.), но теперь основным его заданием является поиск на диске и загрузка в память не ядра, а загрузчика второго этапа.
Загрузчик второго этапа — это полномасштабное применение, которое получает контроль над компьютером после выполнения начальной загрузки (оно может быть выполнено в реальном режиме процессора, а может переключаться в привилегированный режим). В сущности, такой загрузчик является мини-ОС специализированного назначения.
Рассмотрим некоторые возможности двухэтапного загрузчика.
· В нем можно руководить загрузкам нескольких операционных систем. Особенно удобно это делать в загрузчиках, которые принимают управление от МВR: при этом загрузчик берет на себя поиск активного раздела и загрузку системы из него. Конфигурацию такого загрузчика можно динамически изменять во время изменения разделов диска. Загрузчик может содержать код доступа к разным файловым системам, код загрузки разных ядер и тому подобное.
· Может предоставлять интерфейс пользователя, который обычно сводится к отображению меню выбора загружаемой операционной системы. Возможна также передача введенных пользователем параметров в ядро перед его загрузкой.
· Его конфигурация может быть задана пользователем из загруженной ОС. Для этого, например, можно задать текстовый конфигурационный файл, сохранить его на диске и запустить специальную утилиту, которая сделает синтаксический разбор файла, превратит его во внутреннее отображение и сохранит на диске в фиксированном месте, известному загрузчику.
· Не ограничен одним разделом и одним диском загрузчик может работать со всеми дисками компьютера, загружать ядра, которые находятся в разных местах на диске (в частности внутри иерархии каталогов). Двоетапни загрузчики чрезвычайно распространены, их могут поставлять вместе с ОС (например, liloили GRUB для Linux, загрузчик Windows ХР), а также они могут быть реализованы как отдельные продукты — менеджеры загрузки (boot managers).