Основные этапы загрузки операционной системы Windows
Загрузчик операционной системы — системное программное обеспечение, обеспечивающее загрузку операционной системы непосредственно после включения компьютера.
Загрузчик операционной системы:
— обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);
— приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на x86архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);
— загружает ядро операционной системы в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);
— формирует параметры, передаваемые ядру операционной системы (ядру Windows передаются параметры, указывающие способ подключения корневой файловой системы);
— передаёт управление ядру операционной системы.
Загрузка Windows
1. После подачи питания запускается процесс самотестирования, управляет которым программа BIOS. Если на данном этапе выявляется неисправный узел, то загрузка ПК останавливается и на экран выводится соответствующее уведомление, либо раздается серия звуковых сигналов.
Компьютер тестирует себя (стадия POST, Power On Self Test), оперативную память, физические устройства. Если BIOS поддерживает спецификацию PnP, то происходит определение и настройка такого типа устройств. BIOS обнаруживает загрузочное устройство (жесткий диск, привод CD ROM), загружает и запускает на выполнение основную загрузочную запись (MBR). MBR просматривает таблицу разделов (partition table), чтобы найти активный, загружает загрузочный вектор активного раздела в память и запускает его на выполнение. Загружает и инициализирует файл NTLDR, который представляет собой загрузчик ОС.
2. После окончания теста BIOS запускает определение загрузочного сектора на носителях, которые поддерживает материнская плата (дискета, жесткий диск, оптический диск). Приоритет поиска загрузочного сектора настраивается в настройках BIOS.
При загрузке 32-разрядных версий операционной системы Windows (2000, XP или Server 2003) используются следующие файлы:
C:NTLDR — стадии подготовки к загрузке и загрузка
C:BOOT.INI — стадия загрузки ядра
C:BOOTSECT.DOS — стадия загрузки ядра (опционально)
C:NTDETECT.COM — стадия загрузки ядра
%systemroot%System32NTOSKRNL.EXE — стадия загрузки ядра (или NTKRNLPA.EXE)
%systemroot%System32HAL.DLL — стадия загрузки ядра
Здесь под %systemroot% подразумевается директория, где размещены основные файлы операционной системы, например, D:Windows — для Windows XP, установленной на логический диск D. Для системы Windows 2000, например, установленной на логическом диске С, это будет директория C:WINNT.
3 После того, как загрузочный накопитель определен, с него считывается первый сектор, в котором расположена основная загрузочная запись (MBR, Master Boot Record). MBR также содержит таблицу разделов диска с пометкой — какой из них активный.
В общем виде, структура главной загрузочной записи MBR, может быть представлена следующим образом:
— программный код и данные начального загрузчика. (446 байт.)
— таблица разделов диска (4 поля по 16 байт — 64 байта)
— сигнатура 55AA (2 байта)
Структура MBR включает в себя 2 основных элемента — программный код первичного загрузчика и таблицу разделов. Обязательным признаком наличия записи MBR является специальный код (сигнатура) в двух последних байтах — 55AA.
Наличие сигнатуры проверяется подпрограммой
4. MBR определяет активный раздел и управление передается загрузочной записи, которую хранит первый сектор активного раздела. При помощи данной загрузочной записи активируется менеджер загрузки ОС Windows (называется bootmgr – файл, расположенный в корневой директории активного раздела).
boot.ini позволяют загрузчику найти дальнейшие компоненты загружаемой системы и определяют нужные параметры начальной загрузки.
Диспетчер загрузки bootmgr представляет собой файл небольшого размера, расположенный в корневом каталоге активного раздела. Основное его предназначение — обеспечение дальнейшей процедуры загрузки в соответствии с существующей конфигурацией, хранящейся в специальном хранилище — хранилище данных конфигурации ( BCD — Boot Configuratin Data), представляющем собой файл с именем BCD, находящийся в каталоге BOOT активного раздела.
Пример содержимого boot.ini:
[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)WINNT="MS Windows 2000
Server" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)WINNT="MS Windows 2000
Professional RUS" /fastdetect
Параметр timeout задает время ожидания выбора загружаемой ОС в секундах, default — определяет, что загружать по умолчанию. В секции[operating systems] — список загружаемых ОС и параметры их загрузки. Пути задаются в ARC-виде (Advanced RISC Computer), где:
disk(0) — для IDE всегда равен 0, для SCSI — номер логического устройства (LUN)
rdisk(0) — для SCSI всегда равен 0, для IDE — номер физического диска.
partition(1) — номер раздела с установленной OC. Номера разделов начинаются с «1»
WINNT — имя каталога с установленной OC.
5. Далее менеджер загрузки проверяет информацию конфигурации системы, которая записана в файл BCD (аббревиатура от Boot Configuration Data) хранилище данных конфигураций загрузки. Если в файле содержится несколько записей, пользователь увидит меню выбора операционной системы. Расположен данный файл в каталоге с названием Boot активного раздела.
В качестве активного раздела используется, автоматически создаваемый при инсталляции в первой части диска, раздел небольшого размера ( около 100Мб). Данному разделу не присваивается буква, и в проводнике он не отображается. Это сделано с целью защиты загрузчика от небезопасных для него действий пользователя — удаления файлов конфигурации или самого диспетчера, сжатия файловой системы и т.п.
Раздел конфигурации BCD содержит подраздел Description с параметрами описания и подраздел Objects с объектами конфигурации загрузки. Данные конфигурации загрузки можно условно разделить на 3 основных составляющих:
— хранилище BCD (Store)
— записи в хранилище (Entries)
— параметры записей (Entry Options)
Иерархически, хранилище конфигурации загрузки представляет собой совокупность объектов (Objects), состоящих из отдельных элементов (Elements):
Каждый из объектов представляет собой упорядоченную структуру элементов, обрабатываемую диспетчером загрузки. Существует 3 типа объектов:
— приложения (application objects)
— наследуемые объекты
— устройства (device objects)
Если вернуться к отображаемой редактором реестра структуре хранилища конфигурации, то заметно, что каждый подраздел раздела Objects имеет имя, представляющее собой глобальный уникальный идентификатор — GUID . Идентификатор GUID формируется программным путем и однозначно является уникальным для той системы, где он создается. Алгоритм формирования GUID построен таким образом, что каждый новый генерируемый идентификатор никогда не совпадает с другим,
существующим в данной системе. Обозначается GUID в виде групп из шестнадцатеричных цифр, разделяемых дефисами, и заключенными в фигурные скобки:
{d1f837a2-7e0f-11df-bc8b-f6edb78d41b5}
6 Как только система выбрана, активируются модуль загрузки Windows Winload.exe, системные службы, компоненты ядра Hal.dll и Ntoskrnl.exe и ряд других компонентов – данный этап сопровождается анимированным логотипом.
7 Активируется процесс winlogon.exe, необходимый для управления входом пользователей в Windows. Если в системе всего один пользователь без пароля, вход будет произведен в автоматическом режиме. Если это не так – будет выведено окно выбора пользователя с формой для ввода пароля (если он установлен).
Исходя из вышеперечисленного, можно сделать вывод, что для корректного старта Windows должны выполняться следующие требования:
— текущие параметры BIOS должны обеспечить загрузку с накопителя, на котором установлена ОС. Если в настройках указано, что в первую очередь загрузка производится со сменных носителей, необходимо убедиться в их отсутствии;
— первый сектор загрузочного диска должен содержать корректную загрузочную запись и таблицу разделов, при этом один из разделов обязан быть помеченным как активный;
-активный раздел должен иметь загрузочную запись Windows , а его корневой каталог должен содержать файл bootmgr;
— в каталоге Boot активного раздела обязан присутствовать файл BCD, которых хранит записи об инсталлированных операционных системах.
Загрузка ядра
На этапе загрузки ядра NTLDR выполняет следующие действия:
Загружает код ядра из файла NTOSKRNL.EXE (NTKRNLPA.EXE при наличии опции /РАЕ в файле boot.ini), но не инициализирует его.
Загружает код слоя аппаратных абстракций из файла HAL.DLL.
Загружает раздел HKLMSYSTEM из %systemroot%System32ConfigSystem.
Выбирает набор параметров для конфигурации (список драйверов, устройств, устройств и служб, которые необходимо запустить).
Загружает драйверы (обычно это низкоуровневые драйвера, как, например, драйвера дисков) со значением параметра Start равным 0x0. Значение параметра List в
определяет порядок загрузки их загрузчиком NTLDR. Драйверы, регулирующие свою загрузку таким способом, должны иметь соответствующие значения параметра Group в своих подразделах раздела Системного Реестра
HKLMSystemCurrentControlSetServices.
Инициализация ядра
По завершении загрузки, ядро инициализируется и ему передается управление от загрузчика NTLDR. Создается раздел HKLMHardware по результатам распознавания аппаратуры, куда заносится информация о системной плате, устройствах и прерываниях. Создается набор параметров Clone путем копирования управляющих параметров; информация о которых содержится в параметре Current в разделе HKLMSystemSelect. Набор Clone никогда не модифицируется. Загружаются драйверы, указанные в разделе системного реестра
HKLMSystemCurrentControlSetServices
в параметрах которых присутствует значение Start равное 0x01 , порядок загрузки которых так же, как и было указано выше, определяется в параметре Group. Драйверы инициализируются сразу же после их загрузки. Значения параметра ErrorControl в описании драйвера (то есть в его параметре, указанном в Системном Реестре) определяет реакцию системы в том случае, если при загрузке и инициализации данного драйвера произошла ошибка. Запускаются сервисы (например, Служба Журнала Событий) и драйверы.
Вывод на экран информации о процессе загрузки
Указав параметр /sos в соответствующей строке файла boot.ini, например
multi(0)disk(0)rdisk(0)partition(2)Windows ="Комментарий для пользователя"/sos
можно обеспечить вывод на экран информацию о загружаемых программных модулях операционной системы/