NTLDR
Материал из Википедии — свободной энциклопедии
NTLDR (аббревиатура от NT Loader) является загрузчиком для операционных систем Windows NT и более поздних (2000/XP/Server 2003, за исключением Vista). NTLDR может быть запущен как с переносного устройства (такого как, например, CD-ROM или флэш-накопителя USB), так и с жесткого диска. NTLDR также способен загружать операционные системы, не основанные на технологии NT, путём задания соответствующего загрузочного сектора в отдельном файле. Для запуска NTLDR требуется, как минимум, наличие следующих двух файлов на активном разделе: NTLDR, который собственно и содержит код загрузчика, и boot.ini, в котором записаны команды для формирования меню выбора системы и параметры для её запуска. Чтобы загружать операционные системы на базе Windows NT, необходимо также наличие файла ntdetect.com.
Содержание |
[править] Процесс запуска
При загрузке NTLDR выполняет следующие шаги:
- Переводит процессор в "плоский" 32-битный режим работы (32-bit flat memory mode);
- Организует доступ к текущей файловой системе (FAT или NTFS);
- Читает файл boot.ini и выводит пользователю соответствующее меню для выбора запускаемой ОС:
- если была выбрана не-NT система (например Windows 98), тогда загружается файл bootsect.dos, являющийся полноценной загрузочной записью, и управление передаётся ему.
- если же была выбрана система на базе Windows NT, то запускается программа ntdetect.com, которая собирает информацию о составе оборудования. Эта информация затем передаётся в ядро операционной системы, ntoskrnl.exe, и происходит запуск операционной системы.
[править] Boot.ini
Как уже было cказано, NTLDR позволяет пользователю выбрать желаемую операционную систему для запуска из обычного меню; также, для операционных систем Windows NT и более поздних, могут быть указаны дополнительные опции загрузки ядра. Все эти настройки хранятся в файле boot.ini, который должен находится в корне того же логического диска, что и NTLDR.
[править] Пример загрузочного меню
Данная иллюстрация показывает возможный вариант отображения меню выбора. Обратите внимание на третий пункт — он предлагает на загрузку операционную систему не из семейства Windows NT. В данном случае это Windows 98.
[править] Пример файла boot.ini
Для формирования меню, показанного выше, был использован файл boot.ini следующего содержания:
[boot loader] timeout=1 default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Windows Server 2003, Enterprise RU" /noexecute=optout /fastdetect multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional RU" /noexecute=optin /fastdetect C:\="Microsoft Windows"
Если указать в секции [boot loader] параметр timeout равным 0, то загрузочное меню отображаться не будет, а сразу запустится операционная система, заданная в параметре default.
[править] Разрешённые опции загрузки ядра NT
[править] Для Windows NT
- /3GB
- /BASEVIDEO
- /BAUDRATE=nnnn
- /CRASHDEBUG
- /DEBUG
- /DEBUGPORT=COMn
- /HAL=имя_файла
- /KERNEL=имя_файла
- /MAXMEM=nn
- /NODEBUG
- /NOSERIALMICE:COMn
- /NUMPROC=число
- /ONECPU
- /PCILOCK
- /SOS
- /WIN95
- /WIN95DO
[править] Для Windows 2000:
- /3GB
- /BASEVIDEO
- /BAUDRATE=nnnn
- /BOOTLOG
- /CRASHDEBUG
- /DEBUG
- /DEBUGPORT=COMn
- /FASTDETECT:COMn
- /HAL=имя_файла
- /KERNEL=имя_файла
- /MAXMEM=nn
- /NODEBUG
- /NUMPROC=число
- /PAE
- /SAFEBOOT:параметр
- /SOS
[править] Для Windows XP и 2003
- /3GB
- /BASEVIDEO
- /BAUDRATE=nnnn
- /BOOTLOG
- /BURNMEMORY=число
- /CHANNEL
- /CRASHDEBUG
- /DEBUG
- /DEBUGPORT=COMn
- /FASTDETECT:COMn
- /HAL=имя_файла
- /KERNEL=имя_файла
- /MAXMEM=nn
- /NODEBUG
- /NUMPROC=число
- /PAE
- /PCILOCK
- /REDIRECT
- /SOS
- /USERVA
- /REDIRECT
[править] Описания параметров
- /3GB - Этот параметр появился в третьем сервис паке для NT 4.0 и существует на всех более поздних версиях. Этот ключ поменяет стандартное распределение между пользователем и системой карты виртуальной адресации NT, то есть пользователь получит в свое распоряжениек 3GB, а система 1GB. Предоставление большей виртуальной памяти прикладным программам, интенсивно использующим память подобно серверам баз данных может улучшать их производительность. Однако,чтобы приложение смогло использовать это преимущество оно должно быть помечено как приложение 3GB-aware (обычно такие приложения, например MS SQL 2000 имеют соответствующую настройку в параметрах).
- /BASEVIDEO - Заставляет NT использовать стандартный драйвер VGA в режиме GUI.
- /BOOTLOG - Определение этого ключа позволяет NT записать последовательность загруки в лог файл в %SystemRoot%\NTBTLOG.TXT. В лог файле описывается детально какой драйвер загружен или не загружен при загрузке ОС. Например, что-то вроде этого:
Microsoft (R) Windows NT (R) Version 5.0 Loaded driver WINNTSystem32 toskrnl.exe Loaded driver WINNTSystem32hal.dll Loaded driver WINNTSystem32BOOTVID.dll Loaded driver pci.sys Loaded driver isapnp.sys Loaded driver intelide.sys
- /BURNMEMORY - Эта опция заставит NT "забыть" все ограничения относительно указанного объема памяти, типа /MAXMEM. Значение в МБАЙТ. Пример: /BURNMEMORY=128 указал бы системе - отбрось 128МБ физической памяти на машине как непригодные.
- /CRASHDEBUG - Загружает отладчик в память, где он остается до тех пор, пока не возникнет ошибка ядра.
- /DEBUGPORT=COMx - Задает COM порт для отладки.
- /INTAFFINITY - Ключ определяет использование многопроцессорного HAL (HALMPS.DLL) для распределения прерываний, например назначение прерывания в многопроцессорной системе только процессору, имеющиму высший приоритет. Без этого ключа HAL обычным образом разрешает всем процессорам получать IRQ.
- /FASTDETECT - Если у вас стоит две или более операционных систем от Microsoft, то при процессе загрузки используется NTDETECT.COM от самой старшей версии. В Win2K инициализация параллельных и serial устройств осуществляется с помощью plug-and-play драйверов устройств, но NT 4.0 в этом смысле полностью полагается на NTDETECT.COM. Таким образом, определяя параметр FASTDETECT, как раз в том месте, где NTDETECT производит инициализацию оборудования при загрузке NT 4.0, ключ заставляет NTDETECT пропустить эти вещи при загрузке Win2K. Установщик Win2K автоматически распознает наличие второй установленной системы и прописывает этот параметр в BOOT.INI автоматически.
- /MAXMEM - Эта опция ограничивает для NT использование памяти. Число в МБайт. Пример: /MAXMEM:32 ограничил бы NT 32МБ системной памяти.
- /MAXPROCSPERCLUSTER - Многопроцессорный HAL в Win2K (HALMPS.DLL) имеет способность к работе с многопроцессорными системами, которые составлены из кластеров в свою очередь состоящих из малых мультипроцессорных систем. Например, если имеется 8-процессорная система, которая составлена из двух 4-процессорных кластеров, то ID каждого процессора должен быть определен ориентируемым кластером через HAL. Размер максимального кластера - 4, и значение по умолчанию - 0 (система не основана на кластерах). Пример: /MAXPROCSPERCLUSTER=3.
- /NODEBUG - Запрещает использование любой отладочной информации.
- /NOGUIBOOT - Когда эта опция описана, VGA video драйвер, ответственный за представление графики в течении процесса загрузки Win2K's не инициализируется. Вообще этот драйвер используется для отображения на экране монитора процесса загрузки, и как правило для отображения Blue Screen, таким образом включение этой опции в BOOT.INI сделает все это невозможным.
- /NOSERIALMICE - [COMx | COMx, y, z …] - Отключает обнаружение мыши, подключенной к последовательному COM порту (портам).
- /NUMPROC - Допускается только число указанных центральных процессоров. Пример: /NUMPROC=2 на системе с 4 процессорами заставит 2 из этих 4 процессоров простаивать под NT.
- /ONECPU - эта опция указывает NT, использовать только один процессор мультипроцессорной системы.
- /PCILOCK - Запрещает Windows NT динамически назначать IO/IRQ ресурсы на PCI устройства и оставляет конфигурацию BIOS-а.
- /PERFMEM -
- /PERFPAGES - Эти ключи не поддерживаются в final release операционных систем, так как они используются NT для резервирования физической памяти для Basic Block Testing (BBT). Существует только одно известное упоминание о BBT на сайте Microsoft: судебное дело США против Microsoft от 2-ого февраля 1999 года. В нем рассказывается о том как Jim Allchin отвечал под присягой на вопросы по поводу BBT. Он сказал, что BBT - вещь оптимизирующая производительность системы. Microsoft использует ее в пререлизах, для того чтобы минимизировать количество страниц памяти. PERFMEM определяет резервирование физической памяти в MB, а PERFPAGES - количество страниц памяти. Эти параметры не должны присутствовать совместно. Место для BBT резервируется в Thread Environment Block (TEB) каждого потока. На самом деле точно не известно как конкретно влияет каждый из параметров на работу системы.
- /SAFEBOOT - Используется крайне редко, так как выполняет те же действия, что и при нажатии F8 для загрузки в защищенном режиме NTLDR. Но Вы можете определить один из трех дополнительных ключей: MINIMAL, NETWORK, или DSREPAIR. MINIMAL и NETWORK отвечают за загрузку ОС в защищенном режиме без и с поддержкой сети соответственно. При защищенном режиме NT загружает только драйвера и сервисы, описанные по имени или группе в Minimal или Network ключах реестра: HKLMSystemCurrentControlSetControlSafeBoot. Ключ DSREPAIR (Directory Services Repair) указывает NT, что необходимо грузиться в режиме, который восстанавливает Active Directory из backup'а. Дополнительная опция, которую можно определить - "(ALTERNATESHELL)". Она укказывает ядру NT, какую программу, описанную в реестре HKLMSystemCurrentControlSetSafeBootAlternateShell использовать в качестве графической оболочки, взамен используемого по умолчанию Explorer'а.
- /SOS - Заставляет NT выдавать во время загрузки всю информацию относительно того, какие драйверы загружены, и насколько успешно.
- /TIMERES - На многопроцессорном HAL (HALMPS.DLL) эта опция установит разрешающую способность системного таймера. Параметр -число, в сотнях наносекунд, его значение будет установлено ближайшим меньшим, который поддерживает HAL. Заданная по умолчанию разрешающая способность - 7.8ms. Пример: /TIMERES=9000 установил бы таймер на разрешение в 98ms.
- /USE8254 - Этот параметр предназначен для систем со старым BIOSом. Он говорит NT HAL, что необходимо использовать 8254 чип таймера в качестве основного.
- /YEAR - опция очевидно предназначена для проверки на соответствие Y2K. Определение этого параметра говорит ядру NT ,что необходимо игнорировать год , сообщаемый системным таймером компьютера, и вместо этого использовать,определенный в BOOT.INI. Таким образом, год, используемый в BOOT.INI воздействует на все программное обеспечения в системе, включая ядро NT. Пример: /YEAR=2001. Примечание: эта опция доступна только на NT 4.0 с 4 Сервис паком и Windows 2000.