Статьи :Операционные системы :Железо :
OS FAQ :
Кодинг :
Сейчас на сайте :0 пользователей, 15 гостей : |
Системная BIOS считывает главную загрузочную запись (Master Boot Record), которая располагается в первом секторе жесткого диска. После загрузки MBR в память, управление передается коду, содержащемуся в MBR, который в свою очередь сканирует таблицу раздело
Автор: Разместил: Amro Дата: 2006-05-29 14:21 Комментарии: ![]() ![]()
Пока комментариев нет
Загрузка Windows 2000Начнем рассмотрение загрузки Windows 2000 с того этапа, как BIOS считывает в память MBR жесткого диска. Системная BIOS считывает главную загрузочную запись (Master Boot Record), которая располагается в первом секторе жесткого диска. После загрузки MBR в память, управление передается коду, содержащемуся в MBR, который в свою очередь сканирует таблицу разделов в поисках системного раздела. Таблица разделов (partition table) – таблица, хранящаяся в первом секторе жесткого диска, в которой указано, какой из разделов является системным. Системный раздел – раздел, который содержит файлы, необходимые для загрузки Windows 2000. К ним относятся: ntldr – загрузчик ОС, ntdetect.com – программа, предназначенная для сбора информации об аппаратных средствах, bootsect.dos – файл, необходимый для систем с двойной загрузкой, где в качестве альтернативаной ОС используется Windows 9x, boot.ini – файл, который считывает загрузчик и отображает на экране. Когда системный раздел найден, MBR загружает в память его нулевой сектор, который является загрузочным. Загрузочный сектор – сектор, в котором располагается код, предназначенный для нахождения и загрузки в память загрузчика Windows 2000 (NTLDR). После этого, загрузочный сектор должен распознать файловую систему для поиска загрузчика. На томах FAT структура данных, называемая загрузочным сектором, действительно занимает один физический сектор. На томах FAT32 – 2 сектора. На томе NTFS – до 16 секторов. Затем загрузочный сектор загружает в память NTLDR и передает ему управление. После того, как управление получает NTLDR, он выполняет следующие функции:
Рассмотрим подробнее эти этапы. После того, как управление передается NTLDR, он начинает свою работу, когда система работает в реальном режиме процессора x86. Первое что он делает, переключает процессор в режим использования 32-х разрядной модели памяти с прямой адресацией. С этого момента NTLDR может работать в полнофункциональном режиме. Если загрузочные диски являются SCSI-устройствами, NTLDR загружает в память Ntbootdd.sys и использует его функции обращения к диску вместо аналогичных функций загрузочного кода. После этого NTLDR с помощью встроенного кода файловой системы считывает из корневого каталога boot.ini. Далее NTLDR очищает экран и, если в файле boot.ini имеется более одной записи о доступных для загрузки операционных системах, выводит загрузочное меню. Если запись boot.ini ссылается на MS-DOS, NTLDR считывает в память содержимое файла bootsect.dos, переключается обратно в 16-разрядный реальный режим и вызывает из bootsect.dos код MBR. В результате код из bootsect.dos инициирует процесс загрузки, специфичный для MS-DOS. Также происходит загрузка Windows 98 или Windows 95, если они установлены вместе с Windows 2000. Если до истечения периода ожидания, указанного в boot.ini, пользователь не выбрал ни одной команды загрузочного меню, NTLDR выбирает вариант по умолчанию. После выбора одного из вариантов NTLDR загружает и запускает ntdetect.com, 16-разрядную программу реального режима, которая получает от BIOS сведения о базовых устройствах и конфигурации компьютера:
Эти сведения, записываемые во внутренние структуры данных, на более поздних этапах загрузки будут сохранены в разделе реестра HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION. Затем NTLDR очищает экран и выводит индикатор процесса загрузки с надписью «Starting Windows» («Запуск Windows»). Индикатор остается на нулевой отметке до начала загрузки драйверов устройств. Под индикатором появляется сообщение «For troubleshooting and advanced startup options for Windows 2000, pree F8» («Для выбора особых вариантов загрузки Windows 2000 нажмите F8»). При нажатии F8 выводится дополнительное загрузочное меню, предлагающее выбрать особые варианты загрузки – последнюю удачную конфигурацию, безопасный или отладочный режим и т. д. Далее NTLDR начинает загружать необходимые для инициализации ядра файлы.
На этом участие Ntldr в процессе загрузки заканчивается. Для инициализации системы Ntldr вызывает главную функцию из Ntoskrnl.exe. Вызывая Ntoskrnl.exe, Ntldr передает структуру данных с копией строки из Boot.ini (предствляющий выбранный вариант загрузки), с указателем на таблицы памяти (сгенерированные Ntldr для описания физической памяти в системе), с указателем на загруженные в память копии кустов реестра HARDWARE и SYSTEM и суказателем на список загруженных драйверов. Ntoskrnl начинает первую из двух фаз процесса инициализаци. Большинство компонентов исполнительной системы имеют инициализирующую функцию, которая принимает параметр, определяющий текущую фазу. В фазе 0 прервывания отключены. Предназначение этой фазы в том, чтобы сформировать необходимые структуры, необходимые для вызова сервисов в фазе 1. Главная функция Ntoskrnl вызывает KiSystemStartup, которая в свою очередь вызывает HalInitializeProcessor и KiInitializeKernel для каждого процессора. Работая на стартовом процессоре, KiInitializeKernel выполняет общесистемную инициализацию ядра, в том числе всех внутренних структур данных, разделяемых всеми процессорами. Затем каждый экземпляр KiInitializeKernel вызывает функцию ExpInitializeExecutive, отвечающую за управление фазой 0. ExpInitializeExecutive начинает с вызова HAL-функции HalInitSystem, позволяющей HAL взять управление инициализацией системы на себя. Одной из задач HalInitSystem является подготовка системного контролера прерываний каждого процессора к обработке прерываний и конфигурирование таймера, используемого для учета распределяемого процессорного времени. На стартовом процессоре ExpInitializeExecutive не просто вызвывает HalInitSystem, но и выполняет другие операции по инициализации. Когда HalInitSystem возвращает управление, функция ExpInitializeExecutive, выполняемая на стартовом процессоре, обрабатывает параметр /BURNMEMORY файла Boot.ini (если таковой указан). В соответствии с этим параметром ExpInitializeExecutive исключает указанный объем памяти. Далее ExpInitializeExecutive вызывает процедуры инициализации для диспетчера памяти, диспетчера объектов, справочного монитора безопасности, диспетчера процессов и диспетчера Plug and Play. Эти компоненты выполняют следующие инициализирующие операции.
Когда на каждом процессоре управление возвращается к функции KiInitializeKernel, она передает его циклу Idle. В результате системный поток, созданный, как было описано в п.4, начинает фазу 1. Для подготовки статьи использовались материалы книги «Внутреннее устройство Microsoft Windows 2000». |