Драйвера различаются по возможностям, которые они предоставляют, а также по тому, каким образом обеспечивается к ним доступ и управление. Можно рассматривать три основные типы драйверов:
· Символьные драйвера. Этот тип обеспечивает работу с устройствами с побайтовым доступом и обменом данными. К таким устройствам можно отнести модемы, терминалы, принтеры, мышь и т.д. Доступ к таким драйверам не включает использование буферного кэша, таким образом ввод и вывод как правило не буферизуется.
· Блочные драйвера. Этот тип драйверов позволяет производить обмен данными с устройством фиксированными порциями (блоками). Например, для жесткого диска данные модно адресовать и, соответственно, читать только секторами, размер которых составляет несколько сотен байтов. Для блочных драйверов обычно используется буферный кэш, который и является интерфейсом между файловой системой и устройством.
Хотя операции чтения и записи для процесса допускают обмен данными, размер которых меньше размера блока, на системном уровне это всё равно приводит к считыванию всего блока, изменению части его данных и записи измененного блока обратно на диск.
· Драйвера низкого уровня. Этот тип интерфейса блочных драйверов позволяет производить обмен данными с блочными устройствами, минуя буферный кэш. Это, в частности, означает, что устройство может быть адресовано элементами, размер которых не совпадает с размером блока.
Обмен данными происходит независимо от файловой подсистемы и буферного кэша, что позволяет ядру производить передачу непосредственно между пользовательским процессом и устройством, без дополнительного копирования.
ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS 2000.
Королев Е.Н.
12.1 Загрузка ядра
Получив информацию об аппаратных средствах компьютера и выбранном аппаратном профиле, загрузчик запускает ядро операционной системы Ntoskrnl.exe и передает ему информацию, собранную программой Ntdetect.com.
Информация о выбранном аппаратном профиле передается загрузчику, когда пользователь нажимает клавишу <Enter> в меню выбора конфигурации оборудования (Hardware Profile/Configuration Recovery). Помимо этого загрузчик может сделать выбор автоматически по истечении указанного интервала времени (или в случае, если в системе существует только один аппаратный профиль).
О начале фазы загрузки ядра Windows 2000 сигнализируют появляющиеся на экране точки, которые служат индикатором степени завершенности загрузки в память ядра Windows 2000 (Ntoskrnl.exe) и слоя (уровня) аппаратных абстракций (hal.dll). На данном этапе эти модули еще не инициализированы. Далее загрузчик просматривает реестр, извлекает информацию о заданных по умолчанию или определенных пользователем размерах невыгружаемого (резидентного) пула памяти (nonpaged pool) и реестра (registry quota) и загружает раздел HKEY_LOCAL_MACHINE\SYSTEM из файла %SystemKoof% \System32\Config\System.
На данном этапе загрузчик активизирует API для работы с реестром и создает набор управляющих параметров (control set), который будет использоваться для инициализации компьютера. Эти задачи являются подготовительными для загрузки драйверов. Значение, заданное в разделе HKEY_ LOCAL_MACHINE\SYSTEM\Select (рис. 2.1), определяет, какой набор управляющих параметров из перечисленных в разделе HKEY_LOCAL_ MACHINE\SYSTEM должен использоваться при загрузке.
По умолчанию загрузчик использует набор управляющих параметров, определяемый значением "Default". Если пользователь выбрал последнюю удачную конфигурацию, то загрузчик использует набор управляющих параметров, определяемых значением LastKnownGood. На основании сделанного пользователем выбора и значения раздела Select загрузчик определяет, какой из наборов управляющих параметров (ControlSetOOx) будет использоваться. После этого загрузчик устанавливает значение Current раздела Select на номер набора управляющих параметров, который он будет использовать.
Далее загрузчик сканирует все сервисы (службы), определенные разделом реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services и ищет драйверы устройств, для которых параметр Start равен 0x0 (такое значение указывает на то, что драйверы должны быть загружены, но не инициализированы). Как правило, драйверы с такими значениями представляют собой низкоуровневые драйверы устройств, например, драйверы дисков. Значение Group для каждого драйвера устройства определяет порядок, в котором загрузчик должен его загружать. Раздел HKEY_LOCAL_MACHINE \SYSTEM\CurrentControlSet\Control\ServiceGroupOrder реестра определяет порядок загрузки.
К моменту завершения этой фазы все базовые драйверы загружены и активны, за исключением случаев, когда один из критически важных драйверов не инициализировался, вследствие чего началась перезагрузка системы.
12.2 Инициализация ядра
В системах Windows 2000 об инициализации ядра сигнализирует появление графической заставки. Это — чисто "косметическое" отличие от Windows NT 4.0, которое не меняет принципов загрузки Windows 2000 по сравнению с предыдущей версией системы.
Хотите убедиться в справедливости сказанного? Нет ничего проще. Добавив параметр /sos в строку файла Boot.ini, управляющую содержимым меню загрузчика и режимом загрузки операционной системы, перезагрузите компьютер. Использование этой опции позволяет пользователю видеть всю последовательность загрузки драйверов. На фоне красивой графической заставки, сигнализирующей о начале инициализации ядра, вы увидите нечто похожее на приведенное ниже сообщение:
Microsoft ® Windows 2000 Server (TM) (Build 2195)
1 System Processor (64 MB Memory)
Ядро создает раздел HKEY_LOCAL_MACHINE\HARDWARE, используя информацию, полученную от загрузчика. Раздел HKEY_LOCAL_MACHINE \HARDWARE содержит данные об аппаратных средствах, распознавание которых осуществляется каждый раз при запуске системы. В состав этих данных входит информация об аппаратных компонентах на системной плате и о прерываниях, используемых конкретными аппаратными устройствами.
На стадии инициализации ядро выполняет следующие операции:
Инициализирует низкоуровневые драйверы устройств, загруженные на предыдущей стадии
Загружает и инициализирует остальные драйверы устройств
Запускает программы, например Chkdsk, которые должны отработать прежде, чем будут загружены какие-либо сервисы
Загружает и инициализирует сервисы
Создает файл подкачки pagefile.sys
Запускает подсистемы, необходимые для работы Windows 2000