» Hardware » Software » Windows » Internet » Humor » Other

Часть 4. Процесс загрузки системы

Argon On-Line » Windows » AdminCourse
 

Нормальное функционирование Windows можно разделить, как минимум, на три фазы: начальную загрузку, режим работы и завершение работы (естественно, для крупных серверов идеальным считается режим, при котором компьютер загружается всего один раз, а потом работает без выключения — но такой случай, скорее, исключение, чем правило, тем более для систем на основе Windows). По большей части, авторы популярных статей и книг ограничиваются рассказом о второй стадии, в то время как первая, на наш взгляд, оказывается неоправданно забытой и обойденной вниманием. Это является неким недоразумением, ведь знание основных этапов начальной загрузки ОС может оказаться хорошим подспорьем в процессе решения проблем и устранения неполадок, не позволяющих компьютеру нормально загрузить операционку. Поэтому в этой части статьи мы подробно остановимся на том, как протекает процесс загрузки компьютера, работающего под управлением Windows 2000, и рассмотрим его детальнее, а также немного коснемся вопроса завершения работы.

Часть четвертая. Процесс загрузки системы

«Воин живет действием, а не думаньем о действии или думаньем о том, что он будет думать, когда закончит действовать.»
Карлос Кастанеда,
«Отдельная реальность»

Попытаемся пойти путем воина, и не будем лишний раз лить воду о том, как «советские космические корабли бороздят просторы Большого театра», а сразу приступим к делу. То есть, прежде всего, приведем тот минимальный набор файлов, который необходим для успешного запуска системы, вот они:

  • Boot.ini
  • Bootsect.dos (необходим только при использовании мультизагрузки)
  • NTLDR
  • Ntdetect.com
  • Ntbootdd.sys (необходим только для загрузки с SCSI-винчестера)
  • Ntoskrnl.exe
  • Hal.dll
  • Необходимые драйверы и разделы реестра.

А теперь, зная необходимые для загрузки Windows 2000 файлы, рассмотрим весь процесс загрузки компьютера, который начинается с процедуры начального тестирования оборудования (POST — Power-On Self Test). Код, выполняющий POST, зашит в БИОСе каждого компьютера, и именно ему передается управление при включении питания. Если в процессе тестирования обнаруживаются какие-либо ошибки, то БИОСом генерируются коды ошибок (POST codes), которые отличаются для БИОСа разных производителей. Наверняка сердце почти каждого сборщика компьютеров не единожды замирало от противного писка динамика, выдающего трели из комбинации длинных и коротких гудков — это и есть звуковые коды, которые выдает POST в самых запущенных случаях, когда не может вывести текст на экран монитора. Если же процедура POST завершается успешно, то БИОС передает управление главной загрузочной записи (MBR — Master Boot Record) первичного жесткого диска системы, и можно сказать, этим завершает первую «аппаратную» стадию загрузки компьютера (весь процесс зависит только от аппаратуры компьютера, но не от установленного программного обеспечения). На второй стадии загрузочная запись, оперируя данными о разбиении жесткого диска на логические тома, передает управление исполняемому коду, расположенному в загрузочном секторе. Вот тут-то и начинается самое интересное, так как в случае Windows 2000 этим кодом является NTLDR (boot loader). Из-за сложности всех предварительных операций, когда программа, почти ничего не сделав, кроме как загрузив вторую, передает управление ей, а та, в свою очередь, поступает почти так же, как и первая, программисты-системщики шутливо сравнивают всю эту процедуру с поднимающим себя за собственные шнурки человеком. Первое, что делает загрузчик, это переходит в защищенный режим и производит необходимые для успешного функционирования в этом режиме манипуляции с памятью. Кроме функций, позволяющих работать с памятью, NTLDR имеет также несколько модулей, позволяющих работать с некоторыми другими базовыми ресурсами системы, в первую очередь с файловой системой. Все другие действия выполняются с помощью вызова прерываний БИОСа. После первичной инициализации загрузчик предоставляет пользователю возможность выбрать операционную систему, которая будет загружена, из списка систем, установленных на компьютере (то есть, NTLDR выводит на экран надпись OS Loader V5.0 и приглашение выбрать операционную систему; это сообщение выводится только в том случае, если в файле boot.ini зарегистрировано более одной ОС), после чего, если выбрана Windows 2000, начинает загрузку файлов ОС.

Перечень установленных операционок находится в файле boot.ini, который располагается в корневом каталоге системного раздела. Многие думают, что единственное, чего можно достичь путем прямого редактирования boot.ini, — это создание системы с несколькими установленными версиями Windows 2000, однако это не совсем так. Во-первых, диапазон возможных ОС для альтернативной загрузки достаточно широк — это и все Win9x, MS-DOS, OS/2, и даже UNIX. Ну а во-вторых, изменение параметров загрузки самой Windows 2000 позволяет существенно влиять на ее работу и бывает очень по-лезным при отладке. Параметры, указываемые в boot.ini, носят необязательный характер, однако с их помощью можно выбирать версии ядра и HAL, изменять некоторые параметры многопроцессорных систем, режим видеоадаптера, ограничивать объем используемой системой памяти, влиять на работу мыши и многое другое. Знать принципы работы с boot.ini полезно еще и потому, что очень часто при изменении конфигурации системы (удаление или установка логических дисков или физических носителей) или при неудачном редактировании самого файла, загрузчик оказывается не в состоянии найти путь к загрузочному разделу Windows. При этом появляется сообщение типа «NTLDR is missing или Couldn’t find NTLDR», а пользователь начинает в ужасе рвать волосы на голове — не самая приятная ситуация, знаете ли. В таких случаях иногда помогает немного храбрости и возможность вручную отредактировать файл и исправить ошибку; будьте внимательны, для описания пути (в не SCSI-системах) используется следующий формат:

multi(0)disk(0)rdisk(0)partition(3)\ WINNT, где:

  • multi() — номер адаптера IDE, с которого осуществляется загрузка,
  • disk() — параметр, аргумент которого равен нулю,
  • rdisk() — порядковый номер диска, нумерация ведется начиная с нуля,
  • partition() — порядковый номер логического диска, на котором непосредственно находятся файлы операционной системы. Нумерация начинается с единицы, а не с нуля! Вообще, с этим параметром обычно возникает много проблем, и их решение похоже на ритуальные пляски шамана с бубном.
  • \ path — каталог, в котором находятся файлы ОС.

К сожалению, в рамках журнальной статьи невозможно подробно описать все особенности использования boot.ini, поэтому наиболее любопытным читателям мы можем порекомендовать сайт http://support.microsoft.com/default/, где содержится огромное количество информации, так сказать, «из первых рук».

А сами тем временем «вернемся к нашим баранам», то есть, простите, к процессу загрузки. После выбора операционной системы загрузчик запускает Ntdetect.com. Этот компонент считывает из CMOS-памяти системную дату и время, после чего производит поиск и распознавание аппаратных средств, подключенных в данный момент к компьютеру. Завершив работу, Ntdetect возвращает управление и аккуратно собранную им информацию обратно в NTLDR.

Попутно заметим, что иногда бывает удобно создать несколько профилей оборудования, каждый из которых содержит отличный от других набор устройств (создание и управление профилями осуществляется при помощи диалогового окна Hardware Profiles с вкладки Hardware раздела System панели управления). Если такие профили существуют, загрузчик предложит выбрать один из них, после чего приступит к загрузке ядра Ntoskrnl.exe. Хочется подчеркнуть, что на этой стадии ядро только загружается в память, но ему не передается управление (то есть еще не инициализируется и не начинает исполняться системный код ядра).

В первую очередь в память загружается само ядро и уровень аппаратных абстракций. В этот момент на экране появляется подающая большие надежды надпись Starting Windows и индикатор завершенности процесса. Затем сканируется реестр (ищется куст, находящийся в \ Winnt \ System32 \ Config \ System) и составляется список драйверов устройств, необходимых для запуска. Из реестра извлекаются настройки, касающиеся организации памяти, которые могут задаваться как самим пользователем, так и специальными утилитами. Здесь же создается набор управляющих параметров (Control Set), который в дальнейшем играет очень важную роль в работе системы.

Управляющие параметры используются при начальной инициализации компьютера и потом на протяжении всего сеанса работы. При этом следует помнить, что всегда существует несколько наборов параметров: Default — используемый по умолчанию, LastKnownGood — набор, соответствующий последней успешной загрузке.

Определившись с используемым набором, загрузчик делает его активным, присваивая разделу HKEY_LOCAL_MACHINE \ SYSTEM \ Select значение Current, и переходит к разделу HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services, где ищет драйверы устройств, у которых переменная Start имеет значение 0х0, что означает, что они должны загружаться без инициализации. В свою очередь, параметр Group определяет, какие устройства в каком порядке будут загружаться. Здесь стоит отметить, что наличие «лишних» устройств (дублирующих друг друга, а иногда и вообще не установленных) в системе сильно замедляет ее работу, ведь им требуются дополнительные ресурсы. Как вы уже, наверное, неоднократно замечали, загрузка ядра состоит из двух фаз: начальной, проходящей в текстовом режиме на печально черном фоне, и графической (видны радостные эмблемки «Майкрософта»), когда происходит непосредственно инициализация. В течение всего времени выполнения каждой фазы отображается текущее состояние процесса (индикаторная полоска, заполняющаяся прямоугольниками). В самом начале текстовой фазы загрузки ядра в нижней части экрана появляется надпись, в которой сообщается, что если вы успеете нажать F8, то будут доступны дополнительные варианты загрузки, используемые обычно при отладке или неполадках в работе системы. Никогда не пренебрегайте ими, ведь они могут очень здорово выручить вас в критической ситуации. После окончания загрузки ядра операционная система практически готова к работе, осталось только проинициализировать драйверы и подготовить службы — индикатор полностью заполняется, и происходит переключение из текстового режима в графический. На этом шаге управление передается ядру Ntoskrnl, которое получает ссылки на объекты, созданные при помощи NTLDR, таким образом, ядру передается вся информация, собранная другими модулями, а в конце передается и управление. При своей инициализации ядро производит ряд действий в следующей последовательности:

  1. окончательная подготовка к работе памяти и менеджера памяти;
  2. инициализация диспетчера объектов;
  3. установка системы безопасности;
  4. инициализация менеджера Plug and Play;
  5. установка базовых объектов и сервисов системы;
  6. настройка драйвера файловой системы и сохранение начальных параметров в реестре (создается копия набора управляющих параметров Clone, в которой содержатся данные, идентичные Current ControlSet, инициализируются устройства согласно порядку инициализации, затем создается ключ HKEY_LOCAL_MACHINE \ HARDWARE);
  7. загрузка и инициализация диспетчера ввода-вывода (обычно — самая длительная фаза);
  8. ядро «убирает за собой мусор», который остался после загрузки;
  9. последняя стадия — загрузка системных сервисов, которые, собственно, и реализуют взаимодействие с пользователем. Список основных системных сервисов приведен ниже.
    • Smss.exe — диспетчер сеансов. Он управляет другими сервисами и службами Windows, в том числе запускает Win32 (Csrss) и некоторые системные утилиты, выполняемые на этапе загрузки (указываются в разделе реестра HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager\ BootExecute). Еще две важные функции — реализация графического пользовательского интерфейса и запуск процессов csrss.exe и WinLogon.exe. Этот диспетчер запускается, тем не менее, в самом конце загрузки.
    • Csrss.exe — данный модуль предназначен, главным образом, для организации взаимодействия между компьютером и пользователем.
    • Lsass.exe — служба, запускаемая WinLogon.exe и отвечающая за безопасность системы. Она предоставляет возможность пользователю зарегистрироваться в системе, и только после того, как в системе зарегистрировался хотя бы один пользователь, загрузка считается успешной, и текущий набор управляющих параметров Clone переименовывается в LastKnownGood.

Уже после загрузки операционной системы пользователь, чтобы доказать, что он тот, за кого себя выдает, должен пройти процедуру аутентификации, то есть ввести соб-ственное регистрационное имя (или на жаргоне — логин) и пароль. Процедура подключения к системе позволяет определить, кем является пользователь и обладает ли он правом входа и работы с системой. Эту процедуру выполняет служба WinLogon. При этом в системе происходят следующие события:

  • Процесс WinLogon отображает на экране фон рабочего стола (к этому моменту объект рабочего стола уже создан, но еще не отображается), а также приглашение к вводу пользователем логина и пароля. Введенные данные передаются подсистеме безо-пасности.
  • Подсистема безопасности обращается к базе данных SAM (Security Accounts Manager, подробнее про SAM смотри в части статьи, посвященной организации безопасности в Windows 2000) и проверяет, обладает ли пользователь полномочиями работы с системой.
  • Если пользователь является авторизированным пользователем системы, то подсистема безопасности формирует для него токен доступа, который вместе с управлением передает обратно процессу WinLogon.

Процесс WinLogon посредством обращения к подсистеме Win32 создает новый процесс для пользователя и прикрепляет ему только что созданный токен доступа. Каждый процесс, в дальнейшем создаваемый пользователем, отмечается принадлежащим этому пользователю токеном доступа. Таким образом, любые попытки доступа пользователя к ресурсам системы контролируются и отслеживаются. Более того, с философской точки зрения можно сказать, что всегда точно известно, кто инициировал то или иное действие в системе. Благодаря обязательной процедуре подключения к системе упрощается реализация таких механизмов, как аудит системы и квоты на использование ресурсов.

  • Помимо прочих данных, пользовательский токен доступа содержит идентификатор пользователя, а также идентификаторы всех групп, к которым принадлежит данный пользователь.

Итак, процесс загрузки удачно завершен — УРА! Казалось бы, это происходит так быстро, но при этом, как вы успели увидеть, система совершает ошеломительное количество операций и действий как с аппаратной платформой вашего «железного коня», так и с собственными программными модулями.

Вас, конечно же, интересует, что делать дальше, после того как компьютер загружен. Что же, придется вкратце рассказать об этом. Если вы опытный пользователь или, не дай Бог, администратор, на ваш стол наверняка уже наклеен ярлык типа Quake III или Counter Strike, так что можете смело давить на него мышью. В противном случае стоит воспользоваться рекомендацией самой «Майкрософт», вдавить кнопку «Пуск» и начинать свой трудный рабочий день. Так или иначе, мы пропускаем интимные подробности вашей работы с компьютером и, предпо-ложив, что у вас все получилось великолепно, переходим к той, немного печальной и грустной поре, когда компьютер приходится выключать. Хотя эта часть работы системы довольно неприметна, она тоже может принести пару сюрпризов.

Стадия завершения работы начинается с того, что процесс csrss получает соответствующее сообщение, передаваемое Win32 функцией ExitWindowEx, которое сигнализирует о том, что некоторая программа желает завершить работу системы. После этого csrss посылает всем оконным функциям главных окон процессов, запущенных в данный момент в системе, сообщение WM_QUERYENDSESSION, которое, по сути, оповещает программы о скором завершении работы, а затем проверяются ответы каждой программы. Программа может быть «согласна» и «не согласна» с предложением Windows. Если она не согласна, csrss пре-доставляет ей возможность завершиться в течение некоторого небольшого времени, после чего, в зависимости от настроек системы, выводит (или не выводит) окно, в котором сообщается имя мятежной программы, не желающей завершать свою работу, и предлагается ее закрыть принудительно. Так или иначе, но через некоторое время после начала стадии выключения, операционной системой прерывается работа всех пользовательских приложений, и плавно начинают завершаться системные потоки. В первую очередь, это потоки, реализующие графический режим, а затем и все остальные. В отличие от пользовательских процессов, системные не прерываются принудительно, поэтому если один из них чем-то занят, завершение работы может быть отложено на неопределенное время. В это время сохраняются настройки системы в реестре, и из системного кэша измененные данные файлов записываются на жесткий диск. Непосредственно перед выключением ряду устройств передается предупреждение об этом, после чего в свою работу включается драйвер электропитания. Проходит еще пара секунд, и ваш монитор, подмаргивая огоньком светодиода, тихо, словно выдохнув, щелкает, и экран приобретает темный цвет безжизненного полотна остывающего люминофора.

http://www.comprice.ru/

<< Назад | <Оглавление> | Далее >>

 
Еще
Оглавление раздела
Содержание / Новости

Карта сайта
О сайте
Ссылки

Форум
Обратная связь
Если ты нашел ошибку, хочешь что-то посоветовать либо поругать меня, не посчитай за труд написать об этом в следующем поле...







К началу страницы© 2002—2008 Argon