Операционная система виндоус загружается. Устройства, инициализируемые BIOS. Загрузка операционной системы

После включения вашего компьютерапроисходит тестирование апgаратного обеспечение. Рассмотрим порядок загрузки Windows. Операционная система проверяет какие именно компоненты подключены к компьютеру, и их испраdность. Если же система обнаруживает какую либо неполадку с одной из важных составляющих, тогда процесc загрузки будет остановлен и вы будите уведомлены о причине в сообщении выведенном на экране.Кроме этого имеется еще и специальная «азбука» звуковых сигналов. По количеству писков BIOS можно определить работоспособность вашего компьютера. К примеру, один короткий сигнал, значит, что тестирование уcпешно завершено. А допустим один длинный и два коротких, о том что BIOS не обнаружил видеокарту.

После этой процедуры происходит поиски загрузочного сектора, который заранее выбран в BIOS. Как правило это жесткий диск. Но и этот этап не относится к загрузке операционной системы.

Когда загрузочный сектор найден, то BIOS производит считывание содержимого с 1-го сектора диска. В нем и находится MBR (Master Boot Records), это основная загрузочная запись и конечно же таблица разделов диска.Именно с ее помощью BIOS может определить, какой раздел является активным. И с него начинается загрузка операционной системы.

В дальнейшеv по порядку загрузки Windows управление передается загрузочной записи,она находится в 1-ом секторе активного раздела. При ее помощи запускается менеджер загрузки Windows.

После этого из файла Boot Configuration Data который находится в папке (Boot) активного раздела, менеджер загрузки производит считывание конфигурации системы. Если Этот файл содержит несколько записей, то вы увидите меню в котором сможете выбрать операционную систему.

Далее происходит запуск Winload.exe, это модуль загрузки системы, компонентов ядра (Ntoskml.exe и Hal.dll), а так же системных служб и других составляющих компонентов. Ну а в это время вы увидите логотип Windows.

После происходит автоматический вход в систему. Если же у вас установлен вход в систему при помощи логина и пароля, тогда происходит загрузка процесса winlogon.exe, который выведет вам окно для ввода вашего логина и пароля.

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

1. В параметрах BIOS обязательно должен быть прописан диск, на котором хранится операционная система;

2. В первом секторе жесткого диска должны быть корректные MBR и таблица разделов, и один из разделов помечен как активный;

3. На активном разделе должна быть загрузочная запись а в его корневой папке должен содержаться файл bootmgr;

4. В папке Boot должен содержаться файл BCD с правильными записями о операционных системах которые установленны на жестком диске.

После включения вашего компьютера происходит тестирование апgаратного обеспечение. Рассмотрим порядок загрузки Windows .

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

Кроме этого имеется еще и специальная «азбука» звуковых сигналов. По количеству писков BIOS можно определить работоспособность вашего компьютера или ноутбука. К примеру, один короткий сигнал, значит, что тестирование уcпешно завершено. А допустим один длинный и два коротких, о том что BIOS не обнаружил видеокарту. Мы в сервис-центре можем подсказать и расшифровать сигналы даже удаленно, обращайтесь и ремонт ноутбуков на дому покажеться проще простого.

Поиски загрузочного сектора

После этой процедуры происходит поиски загрузочного сектора, который заранее выбран в BIOS. Как правило это жесткий диск. Но и этот этап не относится к загрузке операционной системы.Когда загрузочный сектор найден, то BIOS производит считывание содержимого с 1-го сектора диска. В нем и находится MBR (Master Boot Records), это основная загрузочная запись и конечно же таблица разделов диска. Именно с ее помощью BIOS может определить, какой раздел является активным. И с него начинается загрузка операционной системы. В дальнейшем по порядку загрузки Windows управление передается загрузочной записи, она находится в 1-ом секторе активного раздела. При ее помощи запускается менеджер загрузки Windows. После этого из файла Boot Configuration Data который находится в папке (Boot) активного раздела, менеджер загрузки производит считывание конфигурации системы. Если Этот файл содержит несколько записей, то вы увидите меню в котором сможете выбрать операционную систему. Далее происходит запуск Winload.exe, это модуль загрузки системы, компонентов ядра (Ntoskml.exe и Hal.dll), а так же системных служб и других составляющих компонентов. Ну а в это время вы увидите логотип Windows. После происходит автоматический вход в систему. Если же у вас установлен вход в систему при помощи логина и пароля, тогда происходит загрузка процесса winlogon.exe, который выведет вам окно для ввода вашего логина и пароля. Если произошел сбой, то компьютерная помощь на дому оперативно поможет. Итак. При соблюдении ряда условий, не будет нарушен порядок загрузки Windows, а следовательно вы сможете спокойно работать за своим компьютером. Таких условий четыре, а именно:

1. В параметрах BIOS обязательно должен быть прописан диск, на котором хранится операционная система;

2. В первом секторе жесткого диска должны быть корректные MBR и таблица разделов, и один из разделов помечен как активный;

3. На активном разделе должна быть загрузочная запись а в его корневой папке должен содержаться файл bootmgr;

4. В папке Boot должен содержаться файл BCD с правильными записями о операционных системах которые установленны на жестком диске.

В данной статье я поэтапно опишу процесс загрузки операционных систем Windows XP, Vista и Seven. Хотя этот вопрос рассматривается в сети достаточно часто, не затронуть его я не могу. Подобная информация бывает очень полезна при диагностировании неисправности и восстановления работоспособности “умершей” ОСи.

Сегодня мы рассмотрим:

  • Старт BIOS;
  • Загрузку Windows XP;
  • Загрузку Windows Vista/7.

Загрузка BIOS

BIOS - это набор микропрограмм, записанных в ПЗУ компьютера и служащих для инициализации устройств на материнской плате, их проверки и настройки, загрузки операционной системы.

При включении компьютера BIOS проверяет “железо” и если есть проблемы, то информирует нас звуковыми сигналами (набор длинных и коротких гудков). Вот таблица звуковых сигналов BIOS:

Сигналы AMI

Сигнал Возможная неисправность
Отсутствует Неисправен блок питания
Ошибка четности ОЗУ
Ошибка в первых 64 кБ ОЗУ
Неисправность системного таймера
Неисправен CPU
Неисправен контроллер клавиатуры
Неисправна системная плата
Неисправна память видеокарты
Ошибка контрольной суммы BIOS
10к Невозможна запись в CMOS
11к Неисправен кэш на системной плате
1д+2к Неисправна видеокарта
1д+3к Неисправна видеокарта
1д+8к Не подключен монитор

Сигналы AWARD

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

После проверки BIOS считывает настройки из CMOS и в соответствии с мини стартует загрузчик с указанного носителя (CD, HDD, Flash карта). Если загрузка производится с жёсткого диска, то система считывает первые 512 байт Master Boot Record (MBR) и передаёт ему управление.

Если MBR не найден, то загрузка останавливается. Восстановить MBR можно с помощью консоли восстановления Windows (Recovery Console) командой fixmbr.

Процесс загрузки Windows XP

Загрузкой Windows управляет NTLDR, который состоит из двух частей - первый StartUp переводит процессор в защищённый режим и стартует загрузчик ОС. Загрузчик содержит в себе основные функции для работы с дисками отформатированными в FAT*, NTFS и CDFS системы. Загрузчик считывает содержимое boot.ini и, в соответствии с его содержимым (количество ОС, диски на котором установленны и т.п.), продолжает загрузку. Если Windows была переведена в состояние гибернации, то NTLDR загружает в память компьютера файл hiberfil.sys и передаёт управление в ядро Windows. Если вы завершили работу компьютера простым выключением/перезагрузкой, то NTLDR загружает DOS’овский файл NTDETECT.COM, который строит список аппаратного обеспечения и загружает саму операционную систему Windows.

Если файл NTLDR удалён/перемещён/повреждён, то система не загрузится и выведет сообщение “NTLDR is missing. Press CTRL+ALT+DEL to restart“. Решить эту проблему можно в консоли восстановления Windows (Recovery Console) командой fixboot или скопировав NTLDR с рабочей системы в корень диска.

Перед загрузкой ядра, NTLDR выводит на экран опции запуска (Если была нажата клавиша F8, или работа системы была завершена аварийно). После выбора параметров запуска, стартует ядро системы - ntoskrnl.exe (мы видим анимацию из белых прямоугольников на чёрном экране). Далее загружается тип абстрактного уровня аппаратного обеспечения - HALL.DLL. Это нужно, чтобы ядро могло абстрагироваться от железа, оба файла находятся в директории System32. Далее загружается библиотека расширения ядра отладчика аппаратного обеспечения kdcom.dll и bootvid.dll, который загружает логотип Windows и индикатор статуса загрузки).

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

Процесс загрузки Windows Vista/7

Процесс загрузки Windows Vista и Windows 7 (Seven) начинает отличатся от процесса загрузки предыдущих версий ОС уже после чтения MBR. Установщик Windows создаёт небольшой загрузочный раздел, в котором и находяться всё, что нужно для запуска ОС. MBR передаёт загрузку PBR (Partition Boot Record), а затем стартует BOOTMGR (Windows Boot Manager). BOOTMGR пришёл на смену NTLDR и руководит загрузкой операционной системы. BOOTMGR читает параметры загрузки из Boot Configuration Database (BCD, Базы данных загрузочной конфигурации, пришла на смену boot.ini) и загружает Winload.exe (OS loader boot application, загрузчик ОС). Winload.exe загружает ядро операционной системы, далее процесс загрузки похож на старт Windows XP.

Для редактирования Boot Configuration Database (BCD) можно использовать утилиту Bcdedit.exe запустив её из Windows Recovery Environment (WinRE). Там же можно задействовать утилиту Bootrec.exe для исправления ошибок.

Надоело, что Windows 7,8,10 медленно загружается? ДА, чем больше времени установлена операционная система, тем больше начинает мучить эта тема. Компьютеры становятся всё мощнее и производительнее, но вместе с этим растут и запросы программ, которые разрабатываются под новое оборудование. Так, например, Windows XP загружается на порядок быстрее, чем Windows 7/10 на одинаковом оборудовании.

Так что теперь, отказаться от новых возможностей ради быстрой загрузки операционной системы? Нет, к счастью есть хитрые и не очень приёмы, которые помогут нам в решении данной проблемы. В этой статье вы узнаете как программно сократить время загрузки Windows до 20 секунд и менее.

Шаг первый, службы и процессы

В ОС Windows частенько запускаются лишние службы, которые тормозят загрузку и работу системы. Также предусмотрена поддержка разнообразного оборудования, поэтому службы, обеспечивающие его правильную работу, запускаются вместе с системой. Конечно, если система посчитала, что в службе нет необходимости (поскольку, соответствующего устройства в компьютере попросту нет), то она отключается. Но на запуск, проверку и остановку службы всё равно тратится время.

Запускаем программу «Конфигурация системы», для этого жмём «Win+ R», пишем в окошке: msconfig и жмём Enter. Чтобы отключить временно ненужные службы, переходим в одноимённую вкладку:

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

Пользуясь той же логикой, отключаем программы, загружаемые при старте системы, на следующей вкладке «Автозагрузка». Более подробно рассказано в отдельной статье. Для применения новых параметров запуска необходимо будет перезагрузить компьютер.

Шаг второй, реестр

Существует в Windows слабое место – реестр. Так уж издревле повелось, что большинство жизненно важных параметров Windows хранятся в иерархической базе данных. От того, с какой скоростью ОС находит нужные записи в реестре, напрямую зависит как скорость загрузки, так и работа ОС Windows в целом.

Не редко деинсталляторы программ работают неэффективно, оставляя в реестре записи о своём присутствии и работе (параметры, регистрируемые библиотеки, привязка к определённым расширениям файлов и т.д.). Такие записи можно считать мусором, захламляющим БД. И от этого мусора необходимо избавляться, для чего стоит использовать такие утилиты как, например, Reg Organizer, CCleaner, Ashampoo WinOptimizer и другие.

Запускаем CCleaner, переходим в раздел «Реестр», нажимаем «Поиск проблем», и по окончанию — «Исправить выбранное»:

Во время такой очистки, да и просто во время работы Windows, реестр постоянно подвергается фрагментации. Значит необходимо будет выполнить ДЕфрагментацию реестра. Это можно сделать с помощью программы Defraggler , того же разработчика. Однако, сделаю важное замечание, что в некоторых случаях «чистка» реестра может затронуть и важные параметры. Поэтому обязательно предварительно , и в случае проблем в работе Windows вы сразу сможете восстановиться до предыдущего состояния.

Шаг третий, главный

Теперь можно приниматься за глубокую оптимизацию процесса загрузки системы и программ. Во время выполнения приложений может происходить множество побочных действий, таких как долгая загрузка дополнительных библиотек и подпрограмм, предсказание условных переходов, кеш промахи и всё в таком роде. Анализ таких данных называется профилированием.

Поскольку рассматриваемая ОС создана компанией Microsoft, то воспользуемся профилировщиком, созданным в той же компании – Windows Performance Toolkit. С недавних пор этот инструмент стал входить в состав Windows SDK . На сайте компании Microsoft можно скачать web-установщик.

Все входящие компоненты ставить необязательно, можно обойтись лишь Windows Performance Toolkit

Данный инструмент позволяет провести трассировку загрузки операционной системы с самого начала. Нам нужен исполняемый файл «xbootmgr.exe», который находится в той папке, куда вы соизволили установить Windows Perfomance Toolkit, по умолчанию он располагается в директории «C:\Program Files\Microsoft Windows Performance Toolkit\».

Посмотрите видео или продолжите чтение статьи:

Для вызова утилиты следует запустить xbootmgr.exe с параметром, например параметр «-help» отобразит список всех возможных функций. Для этого нажимаем кнопки «Win + R» или идём в меню «Пуск -> Выполнить», и в окно вводим команду:

xbootmgr –help

Путь к файлу добавлять не обязательно, если и так запускается:

Ради интереса, если хотите посмотреть, как ваша система ведёт себя при запуске в данный момент, то выполните команду:

xbootmgr -trace boot

Она перезагрузит компьютер и соберёт данные во время запуска. Результат её работы можно посмотреть в файле boot_BASE+CSWITCH_1.etl , который xbootmgr сохранит в своей папке или в папке «C:\Users\ваше_имя». В этом файле содержится вся информация о поведении программ при запуске системы, можно увидеть много интересного. Для этого нужно кликнуть по файлу два раза, чтобы открылся Анализатор:

Если интересно, изучите информацию, здесь есть всё в мельчайших подробностях о процессе загрузки: сколько секунд ушло на запуск каждого процесса, как использовались ресурсы компьютера и др.

Теперь перейдём к делу — запустим процесс автоматического анализа и ускорения загрузки Windows. Выполните команду:

xbootmgr -trace boot –prepsystem

В ходе оптимизации, по умолчанию, будет выполнено 6 перезагрузок и в той же директории будет сохранено 6 файлов с информацией о поведении программ при каждой перезагрузке. Весь этот процесс довольно длительный, но участия пользователя не требует. С успехом можно пообедать пока программа работает. И не забудьте сначала проверить, что есть пару Гигабайт свободного места на диске «C:»!

После перезагрузок будут появляться сообщения в белом окошке, например «Delaying for boot trace 1 of 6» с отсчётом времени:

При этом не нужно пытаться работать за ноутбуком, просто ждите. Будут появляться и другие сообщения. На втором этапе окошко «Preparing system» у меня провисело минут 30, при этом процессор ничем загружен не был, но потом всё-таки перезагрузка произошла и остальные этапы прошли быстро. Реально на весь процесс может уйти час.

Что же делает Xbootmgr? Он не отключает не нужные службы и процессы, как могло показаться. Xbootmgr оптимизирует загрузку таким образом, чтобы в каждый момент времени ресурсы компьютера использовались максимально. Т.е., чтобы не было такого, когда процессор загружен на 100%, а жёсткий диск отдыхает, или наоборот. Также происходит . После последней перезагрузки ничего делать не надо, Windows будет загружаться, и даже работать, быстрее.

Шаг четвёртый, опасный

В семёрке, как впрочем и в XP (хотя об этом догадываются не все), есть поддержка многоядерных процессоров. Непонятно только почему система не всегда сама в состоянии задействовать все имеющиеся ресурсы при своём запуске, а начинает их использовать только, когда уже полностью загрузилась и пользователь приступил к работе.

Значит надо помочь ей задействовать имеющиеся ресурсы в параметрах запуска системы. Для этого нужно покопаться в конфигурации. Сочетанием клавиш «Win + «R» открываем окно «Выполнить» и пишем команду msconfig , жмём «Ок». В появившемся окне конфигурирования системы выбираем вкладку «Загрузка»

Выбираем «Дополнительные параметры»

В появившемся окне выставляем на максимум параметры «Число процессоров» и «Максимум памяти». Теперь внимание! Закрываем и снова открываем программу, смотрим что значение «Максимум памяти» не сбросилось в «0». Если так, то снимаем отсюда галочку, иначе система может не запуститься вообще . Перезагружаемся, готово.

Замечание: Если вы решите добавить оперативной памяти или заменить процессор на другой (с большим количеством ядер), то вышеуказанные параметры необходимо будет изменить. В противном случае, система просто не будет использовать дополнительную память и/или дополнительные ядра процессора.

  • Основные понятия загрузочного процесса операционных систем Windows XP и 7
  • Метод двойной и многовариантной загрузки Windows.
  • Ограничения загрузки операционной системы Windows и другие возможные варианты.
  • Как работают загрузчики (менеджеры загрузки) сторонних производителей.

Я знаю из личного опыта, что большинство людей рассматривает процесс загрузки компьютера как что-то недоступное их пониманию. Во многих руководствах и инструкциях содержится слишком много технических подробностей и деталей запутывающих пользователей и вообще отбивающие желание изучать его.

В этом руководстве будет содержаться только самая необходимая информация. Я думаю, что нет необходимости глубоко вникать в процесс загрузки. Достаточно знать основные технические моменты, для того чтобы сделать правильный выбор при установке или изменении конфигурации, загрузки операционной системы Windows.

Данный ниже материал, может кому-то показаться слишком упрощенным, но это лишь, то, что действительно необходимо для понимания процесса. Процесс загрузки операционной системы — это последовательный запуск и выполнения работы одной “программки”, которая потом запускает вторую, третью и так далее. Как правило, для загрузки необходим запуск 4 или 5 “программок”, последняя из которых фактически запускает операционную систему Windows.

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

В понимании процесса загрузки нет ничего особо трудного или мистического. Ведь речь идёт всего лишь о пяти небольших программках, которые просто должны запускаться (стартовать) в правильном порядке. Любой начинающий пользователь, через пять минут работы за компьютером может узнать, что это за программки и как ими удобно пользоваться.

В последовательном запуске программ нет ничего секретного или магического, эти программы как и любые другие всего лишь закодированные единицы и нули, которые указывают компьютеру, что необходимо делать. Некоторые из программ имеют странные имена, которые стали уже почти легендами, их названия произносятся часто с чувством почтения и удивления. Они вызывают уважение, даже среди некоторых закалённых компьютерных специалистов. Я не хочу подвергать сомнению, чьи либо убеждения, но это правда.

Последовательность загрузки операционной системы

Первая программа уже встроена в материнскую плату вашего персонального компьютера, точнее, в маленькую микросхему (чип) которая находится всегда в одном и том же месте. При включении компьютера она запускается и выполняет заложенную в неё программу. Эта первая программа называется БИОС (BIOS). Выполнив свою работу, она запускает следующую программу. БИОС весьма “умна” и всегда старается найти следующую для запуска программку, для этого проверяются места её возможного нахождения.

Как правило, всё находится автоматически, так что делать ничего не нужно. Иногда возникает необходимость указать программе нужный параметр для поиска необходимого устройства – флоппи дисковода, жёсткого диска и т. д. Все это можно сделать в настройках программы BIOS.

Для продолжения загрузки операционной системы с жесткого диска необходима вторая программа, которая находится на жёстком диске. Для простоты поиска второй программы её всегда размещают в одном и том же месте, и БИОС всегда начинает просмотр именно с него.

Запуск второй программы всегда начинается с первых байтов первого сектора. Называется эта программа MBR (Главная загрузочная запись). Она содержит в себе программу начальной загрузки и таблицу разделов (Partition Table ) жесткого диска – вот это двойное предназначение многих вводит в заблуждение. Самое распространённое название загрузочной части MBR это – Программа начальной загрузки (IPL ). Так же как и БИОС, программа IPL универсальна для всех операционных систем, так что не надо беспокоиться, поддерживает она, Windows или Linux. Находясь на жестком диске, её задача лишь запустить следующую программку. Программка IPL от компании Майкрософт имеет маленький размер и ограниченные возможности, её цель и главная задача найти и запустить следующую программку в цепи.

Просматривая таблицу разделов, и заметив “развивающийся” флаг активности, программка понимает, что нашла свою цель. Если раздел отмечен флагом активности, то программа начальной загрузки (IPL) идет к первым байтам первого сектора и запускает следующую программку в цепи загрузки. При изменении (перемещении) флага активности с одного раздела на другой, программа начальной загрузки начнет просмотр и загрузку с другого раздела.

При изменении флага активности никаких физических действий с разделом не происходит, вносится лишь небольшая поправка в таблицу разделов. Раздел с установленным флагом называют Активным разделом, для изменения активности разделов жесткого диска, надо просто переместить указатель (флаг на техническом языке) на нужный раздел.

Третья программа в цепочке последовательно запускающих программ находится в самом начале раздела. Она называется PBR (Запись Загрузки Раздела) или иногда её называют VBR (Том Записи Загрузок). Когда PBR сделает свою работу, то она запускает следующую за ней программу. PBR весьма специфична, и в отличие от BIOS и IPL, ей требуется знать, точное название и местонахождение файла. Название файла в зависимости от операционной системы будет разным, поэтому в процессе установки операционной системы PBR запишет необходимые данные, для того что бы легко можно было найти нужный файл. Для операционных систем от Windows NT до Vista это будет файл под названием ntldr , который всегда находится в корневом каталоге раздела. Месторасположение файла ntldr всегда в корневом каталоге рядом с папками Windows и Program Files, а не внутри папки или директории.

Для операционных систем, от Windows NT до Vista запуск файла ntldr будет четвертой и последней программой в цепи загрузки. Файл, по сути, является загрузчиком Windows, которая запускается из папки system32.

На этом рисунке отображена последовательность загрузки. Главная загрузочная запись (MBR) показана как отдельная секция в начале жёсткого диска. Для этого на жестком диске специально зарезервирован маленький раздел, который никак не связан с другими разделами. Запись загрузки раздела (PBR) показана как отдельная секция, хотя на самом деле это часть раздела. Операционная система Windows резервирует первые 16 секторов своего раздела, исключительно для использования загрузочной записи раздела.

Последовательность загрузки старой операционной системы Windows NT и Vista почти не отличается, но в последней операционной системе ntldr была изменена. В старой Windows NT, файл ntldr был и загрузчиком и менеджером загрузок, но в Windows Vista эти две функции были разделены на две разные программы.

Функцию менеджера загрузки, в обязанность которой входит поиск активной операционной системы теперь выполняет — файл bootmng . Загрузчик, который фактически запускает операционную систему, выполняет — файл winload.exe . Файл bootimg находится в корневом разделе установленной операционной системы, а файл winload.exe помещен внутрь папки system32 системной папки Windows. Все эти изменения добавляют еще один шаг в цепочку загрузки операционной системы, поэтому в Viste она составляет пять шагов.

Операционная система Windows 7 наделена огромными возможностями, которые позволяют создать дополнительный раздел для управления загрузкой и файлами BCD и bootmng . Компания Майкрософт сообщает, что изменение в загрузке новой операционной системы Windows 7, возможно в дальнейшем станет постоянным.

Продолжение следует…

А вы никогда не задумывались над тем, что же происходит с операционной системой в тот момент, когда она рисует свой логотип и говорит «Starting Windows»? И вообще, почему она долго загружается? Ведь при старте системы уж точно не решаются никакие задачи, сложные с вычислительной точки зрения!

Что тогда подразумевает под собой загрузка операционной системы? По большей части это проецирование в память исполняемых модулей и инициализация служебных структур данных. Структуры данных живут в памяти, поэтому операции с ними по идее должны быть быстрыми. Все наталкивает на мысль о том, что время съедается именно процессом загрузки исполняемых модулей в память.

Давайте интереса ради разберемся, какие модули, в каком количестве и в каком порядке загружаются при старте ОС. Чтобы выяснить это, можно, например, получить лог загрузки системы. Подопытная ОС в моем случае - Windows 7 Enterprise x64. Логировать процесс загрузки будем при помощи отладчика ядра. Существует несколько вариантов отладчиков ядра, лично я предпочитаю WinDbg. Также нам понадобятся некоторые вспомогательные средства для волшебного превращения лога в нечто более приятное глазу.

Mining and crafting

Настройка отладки хорошо гуглится, поэтому описывать подробно этот процесс я не буду. Поскольку нас интересует все происходящее с момента старта системы, нам нужно отметить пункт «Cycle Initial Break», с помощью чего отладчик остановится, как только в отлаживаемой системе будет загружена подсистема отладки ядра. Дублирование вывода в файл можно осуществить при помощи команд ".logopen" и ".logclose", это просто. Другая полезная команда - ".cls". Она очищает экран команд, и да, только экран команд.

Интересующая нас функция - «MiCreateImageFileMap». Это внутренняя функция менеджера памяти, проецирующая исполняемый файл в память. Проецирование в память происходит при создании секции, например, при запуске исполняемого файла. Однако учтите, что если исполняемый файл проецируется в память, это не гарантия того, что будет выполнен его код! Эта функция просто создает проекцию, чаще всего «про запас», чтобы, если кто-то надумает запустить модуль на исполнение, можно было сэкономить время его загрузки. На эту функцию поставим логирующую точку останова.

Если у вас достаточно маны, вводите следующую команду:
bu nt!MiCreateImageFileMap "dt nt!_EPROCESS -d ImageFileName @$proc; dt nt!_FILE_OBJECT -d FileName @rcx; g"
Магическая строчка буквально означает следующее:

  • bu (Set Unresolved Breakpoint) - установить неразрешенную точку останова. Не то чтобы кто-то или что-то не разрешал, просто для ее установки необходимо определиться, по какому адресу ее ставить. Дело в том, что заранее не известно, по какому адресу она должна располагаться. При загрузке любого модуля проверяется присутствие в нем необходимой функции, и если такая функция найдена, точка останова устанавливается автоматически. Такой способ установки незаменим при включенном ASLR - рандомизации адресного пространства, поскольку модули будут загружаться каждый раз по разным адресам, и точка останова, установленная по фиксированному адресу, с большой вероятностью окажется не у дел.
  • nt!MiCreateImageFileMap - символ, на котором нужно останавливаться. В WinDbg принята запись в форме "module_name!function_name". В данном случае nt является предопределенным псевдонимом для ntoskrnl.exe.
  • далее следует часть WinDbg-скрипта, которая будет выполняться каждый раз при остановке на этой функции. «dt nt!_EPROCESS -d ImageFileName @$proc» по-русски означает «отобразить поле ImageFileName структуры _EPROCESS из модуля nt при условии ее отображения по адресу, определенному в псевдорегистре «текущий процесс»». Следующая после разделителя ";" команда означает примерно то же самое, только адрес структуры берется из регистра rcx, в котором в Microsoft x64 ABI передается первый параметр функции. «g» означает «go», т.е. продолжить исполнение.

Небольшая рекомендация по использованию логирующих точек останова: старайтесь не использовать расширения отладчика (команды, начинающиеся с "!"), поскольку в таком случае логирование будет выполняться на порядок медленнее.

Поехали! Отжимаем тормоз точки останова и ждем. Я ждал, пока не прогрузится рабочий стол, т.е. я залогинился. Полученный «урожай» немного редактируется, обрезается все лишнее для удобства дальнейшей обработки и скармливается дружище питону. Не будем заострять внимание на парсинге лога. Отметим только, что граф укладывался в форму спирали Архимеда с дальнейшей коррекцией вручную, поскольку происходило наложение узлов друг на друга. В полученном графе учитывается порядок загрузки библиотек. К сожалению, пришлось пожертвовать учетом порядка загрузки исполняемых файлов относительно библиотек в угоду удобочитаемости графа.

Карта звездного неба


Условно выделим несколько групп загрузки.

Начинается работа OC в модуле ntoskrnl.exe, являющимся ядром ОС. А если еще конкретнее - с функции KiSystemStartup(). Вместе с загружаемыми системными компонентами она формирует фундамент ОС: разделение режимов работы, базовые сервисы для пользовательских приложений и т.п. В эту же группу входят драйверы, отмеченные для загрузки во время старта системы. В двух словах, в этой ракушке зарождается ОС Windows.

Следующий узел - менеджер сессий (session manager). Его представляет первый после системного процесс, стартующий в Windows - smss.exe. Процесс примечателен тем, что является родным (native) процессом Windows, то есть он не использует подсистему Win32, которая в общем-то еще не загружена. Этот процесс использует только нативные сервисы операционной системы посредством ntdll.dll, представляющей собой интерфейс режима пользователя для сервисов ОС. Также этот процесс является доверенным компонентом операционной системы и обладает исключительными правами, например, он может создавать маркеры безопасности (security tokens). Но главное его предназначение - создание сеансов и инициализация подсистем, как графической, так и различных исполняемых (Windows, POSIX). Эта ракушка воздает каждому по потребностям.

Группа входа в систему (logon) состоит из нескольких процессов. В целом они отвечают за инициализацию сеансов. Это включает в себя отображение экрана приветствия, создание рабочих столов, запуск процессов автозагрузки и инициализацию подсистемы безопасности и т.п. Этот веник отметает всех посторонних.

Самой массивной оказалась группа сервисов. Во многом она обязана своим объемом службе SuperFetch. Эта та самая, про которую говорят, что она по выходным заранее прогружает офисный пакет, а в начале рабочей недели - Steam с игрушками. Superfetch прогружает огромное количество модулей при старте системы, чтобы потом «все быстрее работало». Да и кроме него в системе хватает сервисных приложений и автозапускающихся драйверов. Думаю, все видели оснастку «Службы и приложения». Эта звезда жизни заводит в системе все, что нужно и не очень.

Последним отмечу любимый всеми explorer.exe. Примечательно, что к моменту его запуска все используемые им модули уже загружены в память. В скриншот также попал некий vcredist_x64.exe - бедолага лежал на рабочем столе подопытной виртуальной машины и был прогружен в память проводником.

Вообще способов оказаться загруженным в память у модуля много. Например, достаточно запросить информацию из ресурсов исполняемого файла, в том числе его иконку. Конкретно в данном примере проводник проверял, является ли эта программа требующей повышенных привилегий, т.е. стоит ли дорисовывать к иконке соответствующий рисуночек с желто-голубым щитом. Еще раз отмечу, что загрузка модуля в память не означает выполнение его кода!

Лично я держу получившуюся картинку под боком. По ней хорошо прослеживаются зависимости, например, драйверов. Также в паре с утилитой Sysinternals Autoruns можно увидеть, на каком этапе загрузки подтягиваются те или иные модули.

Граф загрузки был построен для ОС Windows 7 Enterprise x64, установленной на виртуальной машине VMware. Ниже приведены векторное изображение графа и непосредственно файл в формате gml, с которым можно поиграться в любом редакторе графов.