Последовательность загрузки Windows
Процесс проверки аппаратного обеспечения и загрузка операционной системы называется процессом загрузки компьютера. (Файл BOOTLOG.TXT, который находится в корневом каталоге загрузочного диска, содержит записи о каждом действии, которое Windows’98 выполняет в процессе загрузки одного он не включает несколько первичных действие, таких как загрузка io.sys)
Запуск в режиме командной строки Windows’98 не начинает процесс загрузки в защищенном режиме, на самом деле сначала запускается копия MS DOS.
Единственной причиной запуска MS DOS является необходимость обеспечения совместимости. Все компьютеры укомплектованные старыми аппаратными средствами, нуждаются в запуске драйверов устройств из файлов config.sys и autoexec.bat.
Система запускается как и раньше. Сначала выполняется тест POST. POST – самотестирование после включения питания из модуля BIOS. После того как ROM BIOS определит, что компьютер работает корректно, он начинает всю требуемую инициализацию аппаратного обеспечения и строит таблицу векторов прерываний в нижней области оперативной памяти. После завершения этой фазы инициализации BIOS начинает поиск загрузочного диска. Загрузочный диск содержит загрузчик ОС. В случае MS DOS и Windows’98 этой загрузчик будет искать файл под названием IO.SYS.
До этого момента работа MS DOS и Windows’98 практически не отличается. В отличие от старых версий MS DOS все, что необходимо новой версии, находится в коде, содержащемся в файле IO.SYS. Файл MSDOS.SYS более не нужен. Microsoft соединила содержимое двух файлов, которые располагались в корневом каталоге загрузочного диска.
Файл MSDOS.SYS еще располагается в корневом каталоге. Файл msdos.sys теперь содержит важную информацию о конфигурировании системы. В этом файле можно добавить множество параметров конфигурации.
IO.SYS читает файл msdos.sys перед загрузкой системы. Файл msdos.sys можно представить себе в качестве конфигурационного файла для загрузочного процесса. После этого io.sys прочитывает содержимое файла config.sys. Так как в файле io.sys имеются процедуры, которые автоматически загружают нужные компоненты системы, то необходимость в файле config.sys отпадает.
Описание этих компонентов:
- dos=HIGH, UBM
Io.sys всегда загружает MS DOS в верхнюю область памяти, если этот параметр не переопределен в config.sys.
- HIMEM.SYS
IO.SYS всегда загружает копию менеджера памяти реального режима. Он не загружает EMM386.EXE.
- IFSHLP.SYS
При загрузке этого драйвера также загружаются еще несколько драйверов устройств. Он предоставляет доступ к файловой системе.
SEТVER.EXE Некоторые устаревшие приложения могут требовать определенной версии ОС MS DOS.
- FILES=60. Windows’98 не требует установки этого параметра. Он обеспечивается для любого приложения MS DOS. Хотя некоторые приложения требуют открытия более 60 файлов. Это значение параметра должно подходить для подавляющего большинства программ.
- LASTDRIVE=Z.
Этот параметр задает последнюю букву обозначения диска, которая может использоваться для приложений MS DOS. Win98 не требует задания значения LASTDRIVE.
- BUFFERS=30.
Этот параметр влияет на количество файловых буферов, которые предоставляет io.sys. Windows’98 использует собственную систему управления файлами, на нее не влияет значение этого параметра.
- STACK=9,256. Используя этот параметр io.sys устанавливает определенное количество кадров стека.
- SHELL=commаnd.com/P
Если не указан другой обработчик команд в файле config.sys, то io.sys по умолчанию будет использовать command.com.
- FCBS=4. Очень старые программы используют блоки управления файлам (FCB). Эти программы настолько древние, что вряд ли кто их использует сейчас.
Очевидно, что файл io.sys заменяет файл config.sys. После того как io.sys загружает обработчик команд, его работа заканчивается. Обработчик команд берет управление на себя и считывает содержимое файла autoexec.bat. С этого момента начинается выполнение MS DOS. Командная строка MS DOS не видна, т.к. она скрыта заставкой с логотипом Windows.
После того как обработчик команд заканчивает свою работу, начинается следующая фаза процесса загрузки – загрузка 16-разрядного ядра.
Первой операцией, которую выполняет Windows после запуска является проверка аппаратного обеспечения системы. Windows обращается к Plug and Play BIOS , для того, чтобы получить информацию обо всем установленном оборудовании. Она использует эту информацию для конфигурирования системы ОС также должна принять во внимание и то аппаратное обеспечение, которое не поддерживает PnP. После того, как сформирован список аппаратных средств, Windows’98 начинает загрузку всех 16-разрядных виртуальных драйверов (VxD), которые необходимы для их поддержки.
Драйвер виртуального устройства (буква х в названии обычно заменяется названием устройства) – это модификация драйвера устройства, использования в реальном режиме MS DOS, предназначенная для защищенного режима. Однако это больше, чем просто модификация, т.к. устройство в Windows’98 может означать нечто большее, чем просто физическое устройство, VxD используется для управления всеми функциями низкого уровня.
После выполнения этого шага Windows инициализирует все драйверы. Она начинает с системных драйверов, т.е. тех драйверов, которые требуются для работы низкоуровневых функций Windows (такие как драйверы файловой системы). После этого загружаются драйверы устройств.
В этот момент Windows’98 загружает три компонента 16-разрядной оболочки: User.exe, GDI.exe и KRNL386.exe. Она также загружает некоторые дополнительные драйверы и несколько других компонентов, таких как шрифты. Windows’98 теперь полностью загружена и выполняется в 16-разрядном режиме. Она еще не имеет интерфейса, однако все остальные компоненты присутствуют.
Загрузка 32-разрядного ядра. 16-разрядные операции заканчиваются довольно скоро после запуска Win98. Пользовательская оболочка (Проводник) является 32-разрадным приложением. Как только 16-разрядное ядро вызывает эту оболочку, она загружает приложение VWIN32.386. Эта программа загружает 3 32-разрядные библиотеки динамической компоновки. Которые образуют программный интерфейс WIN32: User32.DLL, GDI32.DLL, Kernel32.DLL. После выполнения этой задачи VWIN32.386 возвращает управление 16-разрядному ядру, которое вызывает 32-разрядное ядро. После этого ОС загружает и инициализирует все 32-разрядные драйверы. Этот процесс полностью аналогичен процессу загрузки драйверов в 16-разрядном режиме.
В один из моментов этого процесса WIN98 спрашивает у пользователя его имя и пароль. ОС сравнивает полученную информацию с содержимым соответствующего файла с расширением PWL.
Наконец, Windows подготавливает и запускает Проводник. На рабочем столе появляются все необходимые объекты, а также инициализируется Панель задач. Именно в этот момент ОС просматривает содержимое папки Автозапуска. После этого система полностью функциональна и готова к работе.
Следует обратить внимание на уровни защиты, которое обеспечивает процессор 80386 и выше. Существует 4 уровня защиты процессора компании Intel, но большинство ОС используют только 2 из них. Уровень защиты приложений имеет номер 3. Иногда ОС дает драйверам устройств больший доступ к средствам ОС, чем приложение, выполняя их на уровне 1 или 2. Windows не дает никаких уступок, драйверы устройств выполняются на уровне 0 или 3.
Windows использует эти уровни защиты для того, чтобы только ОС могла получить доступ к внутренним процессорам Windows. Приложение не должно иметь возможности изменить что-либо, что может привести к сбою системы.
Например, Windows оставляет за собой право распределять память из общего пула, следовательно, возможности, необходимые для выполнения этой задачи, относятся к уровню 0.
Можно представить себе уровни защиты как охраняемые “кольца”. Прежде чем войти в кольцо, необходимо указать пароль. Как только приложение пытается обойти пароль, процессор выдает исключение.
Рассмотрим различные компоненты, которые составляют Windows
- Системная виртуальная машина.
Содержит 3 основных элемента: 32-разрядные приложения Windows оболочку и 16-разрадные приложения Windows. По существу, системная виртуальная машина обеспечивает большую часть пользовательских функций Windows’98
- 32-разрядные приложения.
Новые приложения WIN32 используют подмножество программного интерфейса Windows NT. 32-разрядные приложения обеспечивает лучшую поддержку многозадачности, чем его 16-разрядный аналог. 32-разрядные приложения обеспечивают две дополнительные возможности. Более важная заключается в том, что они используют приоритетную, а не кооперативную многозадачность. Это приводит к более равномерной работе с системой, и обычно система ждет пользователя, а не наоборот. Вторая – возможность использовать плоское адресное пространство. Это средство действительно влияет на то, сколько памяти выделяется приложению и насколько хорошо оно использует её. Кроме того, приложение которое использует плоскую адресацию, должно выполняться гораздо быстрее, т.к. ему не нужно тратить время на разбор схемы сегментации памяти.
- Программа – оболочка.
С Windows поставляются три оболочки, можно выбрать любую из них. Стандартная оболочка (Проводник) обеспечивает полный набор 32-разрядных возможностей. Проводник соединяет все возможности, которые можно найти в Диспетчере программ, Диспетчере памяти и Диспетчере файлов. В Windows’98 можно использовать старый интерфейс Диспетчера программ. Третий интерфейс является интерфейсом Internet Explorer. Он позволяет обращаться как к локальным, так и удаленным ресурсам.
- 16-разрядные приложения.
Все старые приложения, т.е. те, которые использовались до установки Windows’98, являются 16-битными приложениями. Windows’98 выполняет все эти приложения в одном разделяемом адресном пространстве. Windows’98 группирует такие приложения в одну область.
- Слой Windows API
Windows’98 содержит два программных интерфейса. Первый полностью аналогичен программному интерфейсу, который был в Windows 3.х. Он имеет 16-разрядные службы, которые старая версия Windows должна была предоставлять приложениям. Этот программный интерфейс использует старые приложения Windows
Второй программный интерфейс является новым программным интерфейсом WIN32, который используется в Windows NT. Он обеспечивает подмножество средств, доступ к которым могут получить все 32-разрядные приложения, выполняющиеся под управлением Windows NT.
Обеспечение работы 16- и 32-разрядных приложений.
Windows’98 состоит из комбинации 16- и 32-разрядных приложений. 16-разрядные приложения работают в области собственной виртуальной машины.
Существуют ситуации, когда 16- и 32-разрядные приложения должны взаимодействовать друг с другом. Это относится не только к приложениям, с которыми работает пользователь, но также к драйверам устройствам. Большинство приложений Windows для передачи данных другому приложению использует структуру в памяти, называемую стек.
Стек можно представить себе как базу данных переменных. Стек 32-разрядных приложений увеличивается с шагом 4 байта. Стек же 16-разрядных приложений используют сегментированное адресное пространство. Адрес состоит из селектора и смещения. 16-разрядные приложение комбинирует эти две составляющие и получает адрес. С другой стороны, 32-разрядные приложения используют плоскую модель памяти. Таким образом, возникает проблема, как передать адрес строки от 16-разрядного приложения 32-разрядному. Для обеспечения взаимодействия 16- и 32-разрядных приложений Windows использует так называемый трансформационный слой.
16-разрядное приложение |
GDI.EXE |
USER.EXE |
KRNL386.EXE |
Трансформационный слой |
KERNEL32.DLL |
GDI32.DLL |
USER32.DLL |
32-разрядное приложение Windows |
Рисунок 1. – Схема взаимодействия 16- и 32-разрядных приложений в Windows’98.
Как видно из рисунка 1, три компонента слоя API, кроме своих основных функций, выполняют преобразование адресов и данных. Каждый из компонентов транслирует свои адреса и данные. Например, компоненты GDI преобразуют графические данные. Преобразование данных в трансформационном слое не отличается особой изощренностью. Так, Windows просто перемещает содержимое регистров одной системы в соответствующие регистры в другой. Чтобы обеспечить этот процесс, трансформационный слой создает новый стек. Преобразование адресов сложнее и требует больше времени. Каждый раз при преобразовании адреса необходимо выполнить несколько загрузок селектора.