Что обеспечивает обычный запуск операционной системы
Процесс загрузки Windows или что спрятано под стартовым логотипом
А вы никогда не задумывались над тем, что же происходит с операционной системой в тот момент, когда она рисует свой логотип и говорит «Starting Windows»? И вообще, почему она долго загружается? Ведь при старте системы уж точно не решаются никакие задачи, сложные с вычислительной точки зрения!
Что тогда подразумевает под собой загрузка операционной системы? По большей части это проецирование в память исполняемых модулей и инициализация служебных структур данных. Структуры данных живут в памяти, поэтому операции с ними по идее должны быть быстрыми. Все наталкивает на мысль о том, что время съедается именно процессом загрузки исполняемых модулей в память.
Давайте интереса ради разберемся, какие модули, в каком количестве и в каком порядке загружаются при старте ОС. Чтобы выяснить это, можно, например, получить лог загрузки системы. Подопытная ОС в моем случае — Windows 7 Enterprise x64. Логировать процесс загрузки будем при помощи отладчика ядра. Существует несколько вариантов отладчиков ядра, лично я предпочитаю WinDbg. Также нам понадобятся некоторые вспомогательные средства для волшебного превращения лога в нечто более приятное глазу.
Mining and crafting
Настройка отладки хорошо гуглится, поэтому описывать подробно этот процесс я не буду. Поскольку нас интересует все происходящее с момента старта системы, нам нужно отметить пункт «Cycle Initial Break», с помощью чего отладчик остановится, как только в отлаживаемой системе будет загружена подсистема отладки ядра. Дублирование вывода в файл можно осуществить при помощи команд «.logopen» и «.logclose», это просто. Другая полезная команда — «.cls». Она очищает экран команд, и да, только экран команд.
Интересующая нас функция — «MiCreateImageFileMap». Это внутренняя функция менеджера памяти, проецирующая исполняемый файл в память. Проецирование в память происходит при создании секции, например, при запуске исполняемого файла. Однако учтите, что если исполняемый файл проецируется в память, это не гарантия того, что будет выполнен его код! Эта функция просто создает проекцию, чаще всего «про запас», чтобы, если кто-то надумает запустить модуль на исполнение, можно было сэкономить время его загрузки. На эту функцию поставим логирующую точку останова.
Если у вас достаточно маны, вводите следующую команду:
Небольшая рекомендация по использованию логирующих точек останова: старайтесь не использовать расширения отладчика (команды, начинающиеся с «!»), поскольку в таком случае логирование будет выполняться на порядок медленнее.
Поехали! Отжимаем тормоз точки останова и ждем. Я ждал, пока не прогрузится рабочий стол, т.е. я залогинился. Полученный «урожай» немного редактируется, обрезается все лишнее для удобства дальнейшей обработки и скармливается дружище питону. Не будем заострять внимание на парсинге лога. Отметим только, что граф укладывался в форму спирали Архимеда с дальнейшей коррекцией вручную, поскольку происходило наложение узлов друг на друга. В полученном графе учитывается порядок загрузки библиотек. К сожалению, пришлось пожертвовать учетом порядка загрузки исполняемых файлов относительно библиотек в угоду удобочитаемости графа.
Карта звездного неба
Условно выделим несколько групп загрузки.
Начинается работа 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, с которым можно поиграться в любом редакторе графов.
Граф в формате GML
Векторное изображение графа
Внимание! Бонус!
Граф загрузки для чистой ОС Windows 8 Enterprise x64 на живой машине 😉
Граф в формате GML
Векторное изображение графа
Загрузка Windows в альтернативном режиме
Лабораторная работа №11
ЗАПУСК ОС WINDOWS
Цель: изучить режимы загрузки операционной системы Windows XP. Сформировать умения по запуску Windows в разных режимах.
Теоретические сведения
Обычная загрузка Windows
Процессы, происходящие при успешном запуске компьютера, работающего под управлением Windows, перечислены ниже.
Описанная выше последовательность загрузки действует только применительно к системам, загружающимся после нормального останова. При выходе из режима ожидания (standby) или спящего (hibernate) режима эта последовательность будет другой.
Процесс запуска начинается, когда пользователь выполняет одно из следующих действий:
К моменту регистрации пользователя в системе компьютер уже завершает загрузку операционной системы и большую часть процесса инициализации. Однако полностью все процессы будут завершены только после успешной регистрации пользователя в системе.
Загрузка Windows в альтернативном режиме
При запуске ОС на экране загрузчика Windows 2000/XP и Windows Server 2003 будет расположена следующая строка в нижней части экрана:
For troubleshooting and advanced startup options for Windows, press F8
Windows Advanced Options Menu Please select an option: Safe Mode Safe Mode with Networking Safe Mode with Command Prompt Enable Boot Logging Enable VGA Mode Last Known Good Configuration (your most recent settings that worked) Directory Services Restore Mode (Windows domain controllers only) Debugging Mode Start Windows Normally Reboot Return to OS Choices Menu Use the up and down arrow keys to move the highlight to your choice.
Это меню будет оставаться на экране до выбора одной из опций.
Если пользователь выбирает эту опцию, то при запуске Windows загружаются только базовые файлы и драйверы, абсолютно необходимые для работы (стандартные драйверы мыши и клавиатуры, накопителей, базовый драйвер видеоадаптера VGA и минимальный объем стандартных системных сервисов). Например, если после инсталляции нового программного обеспечения Windows перестала запускаться, то вполне возможно, что загрузка в безопасном режиме позволит выполнить запуск операционной системы с минимальным количеством сервисов и драйверов. После загрузки вы сможете изменить параметры настройки компьютера, не позволяющие осуществить корректную загрузку, или удалить программное обеспечение, вызвавшее эти проблемы. Если Windows невозможно загрузить даже с использованием этого режима, то, вероятнее всего, потребуется выполнять процедуру восстановления поврежденной системы.
Если выбрана данная опция, то Windows загружается с использованием только базовых файлов и драйверов (как и в случае с выбором предыдущей опции), но в дополнение делается попытка запуска сетевых служб и восстановления сетевых подключений.
Выбор этой опции приводит к попытке запуска Windows с использованием только базовых файлов и драйверов, и вместо графического интерфейса Windows отображает на экране окно командной строки.
При выборе этой опции Windows Server 2003 будет записывать протокол загрузки в файл %SystemRoot%\Ntbt\bootlog.txt.
После выбора данной опции компьютер загружается с использованием стандартного драйвера VGA.
Такая опция существовала и в Windows NT 4.0/Windows 2000. Однако ее использование в более новых версиях операционной системы (Windows ХР и продуктах из семейства Windows Server 2003) имеет различия, которые необходимо рассмотреть более подробно. При выборе данной опции в Windows 2000 операционная система запускается с использованием информации реестра, сохраненной сразу же после успешного запуска (критерием успешного запуска во всех ОС, построенных на основе ядра Windows NT, является успешная регистрация в системе хотя бы одного пользователя). Следует сразу же отметить, что в Windows NT/2000 эта опция позволяет исправить только ошибки конфигурирования системы, да и то не всегда. Использовать ее рекомендуется лишь в тех случаях, когда точно известно о допущенной конфигурационной ошибке. Проблемы, вызванные отсутствием или повреждением системных файлов или драйверов, использование этой опции исправить не поможет. Помимо этого, следует помнить, что все изменения, внесенные после последнего успешного запуска Windows NT/2000, в случае применения этой опции будут потеряны.
С выпуском Windows XP в состав этой опции были введены дополнительные усовершенствования. В отличие от Windows NT/2000, Windows ХР и Windows Server 2003 перед установкой обновленных версий драйверов создают резервные копии драйверов, использующихся на текущий момент. При выборе опции будут восстановлены не только параметры реестра, сохраненные после последней успешной загрузки, но и все драйверы, которые при этом использовались. Таким образом, применение этой опции в Windows ХР и Windows Server 2003 позволит восстановить систему не только после конфигурационных ошибок, но и после установки несовместимых приложений и драйверов, приводящих к нестабильной работе или препятствующих загрузке Windows.
Если вы пытаетесь исправить проблемы с загрузкой Windows ХР или обычного сервера Windows Server 2003, эту опцию использовать не следует, поскольку она предназначена только для серверов, являющихся контроллерами домена. Как следует из ее названия, данная опция предназначена для восстановления службы каталога.
Эта опция запускает Windows и устанавливает отладочный режим, при котором отладочная информация пересылается по последовательному кабелю на другой компьютер.
Как и следует из названия этой опции, она позволяет выполнить запуск Windows XP или Windows Server 2003 в нормальном режиме. Данная опция была впервые введена в Windows XP.
Когда пользователь выбирает эту опцию, процесс загрузки повторится с самого начала (с выполнения процедуры POST). Данная опция была впервые введена в Windows XP.
Возвращает к экрану загрузчика, позволяющему выбрать загружаемую операционную систему. Данная опция была впервые введена в Windows XP.
3. Организация многовариантной загрузки
Файл boot.ini, в котором хранятся все управляющие директивы, представляет собой обычный текстовый файл. В общем виде структуру этого файла можно представить следующим образом:
default=ARC – последовательность 1
ARC – последовательность 1=”название режима загрузки” /ключи
ARC – последовательность 2=”название режима загрузки” /ключи
ARC – последовательность N=”название режима загрузки” /ключи
Путь=”название режима загрузки”
Раздел boot loader определяет конфигурацию мультизагрузчика по умолчанию. Целое число, указанное в качестве аргумента команды timeout, задает максимальный промежуток времени (в секундах), в течение которого мультизагрузчик будет ожидать действий пользователя. На протяжении этого временного интервала на экране ПК будет демонстрироваться меню многовариантной загрузки, а расположенный ниже счетчик – отсчитывать указанное вами количество секунд в обратном порядке. Если пользователь так и не выбрал какой-либо из определенных вариантов, будет автоматически загружена ОС, ссылка на которую записана в качестве аргумента команды default.
Пути к операционным системам, на которые ссылается файл boot.ini, определяются в виде так называемых ARC – последовательностей, записываемых в общем виде следующим образом:
где параметр Multi/scsi определяет тип контроллера ЖД, на котором хранится искомая ОС, а х – его номер. Для SCSI – контролеров, не использующих SCSI – BIOS, выбирается вариант scsi. А для остальных – multi. Нумерация ЖД ведется с нуля. Параметр disk(a) определяет идентификационный логический номер SCSI – адаптера. Параметр rdisk(b) определяет номер не использующего интерфейс SCSI – диска, начиная с нуля. Параметр partition(c) указывает на номер логического раздела, в котором установлена ОС, причем для всех ЖД первичные логические разделы имеют значение с=1, а дополнительные разделы и логические диски с=2 и далее. Параметр windows_directory указывает на папку в данном разделе, в которой хранятся системные файлы.
Для получения ARC – последовательностей лучше воспользоваться командой MAP ARC в консоли восстановления.
Раздел operationg systems описывает другие варианты загрузки данного ПК. Для каждого варианта загрузки указываются собственная ARC – последовательность и папка установки, далее, после символа =, в кавычках записывается произвольное название режима загрузки – именно этот текст будет отображаться в меню мультизагрузчика при запуске ПК. Справа, через пробел, можно указать все требуемые ключи, использование которых, впрочем, необязательно.
Загрузка операционной системы
В информатике начальной загрузкой называется сложный и многошаговый процесс запуска компьютера. Загрузочная последовательность — это последовательность действий, которые должен выполнить компьютер для запуска операционной системы.
Содержание
Начальная загрузка
Большинство компьютерных систем могут исполнять только команды, находящиеся в оперативной памяти компьютера, в то время как современные операционные системы в большинстве случаев хранятся на жёстких дисках, загрузочных CDROM-ах, USB дисках или в локальной сети.
После включения компьютера в его оперативной памяти нет операционной системы. Само по себе, без операционной системы, аппаратное обеспечение компьютера не может выполнять сложные действия, такие как, например, загрузку программы в память. Таким образом мы сталкиваемся с парадоксом, который кажется неразрешимым: для того, чтобы загрузить операционную систему в память, мы уже должны иметь операционную систему в памяти.
Решением данного парадокса является использование специальной маленькой компьютерной программы, называемой начальным загрузчиком, или
В современных компьютерах процесс начальной загрузки начинается с выполнения процессором команд расположенных в постоянной памяти (например на IBM PC — команд перезагрузки без какой бы то ни было помощи). Данное программное обеспечение может обнаруживать устройства, подходящие для загрузки, и загружать со специального раздела самого выбранного устройства (чаще всего загрузочного сектора) данных устройств загрузчик ОС.
Начальные загрузчики должны соответствовать специфическим ограничениям, особенно это касается объёма. Например, на IBM PC загрузчик первого уровня должен помещаться в первых 446 байт главной загрузочной записи, оставив место для 64 байт таблицы разделов и 2 байта для сигнатуры AA55, необходимой для того, чтобы BIOS выявил сам начальный загрузчик.
История
Первые компьютеры имели набор переключателей, которые позволяли оператору размещать начальный загрузчик в памяти до запуска процессора. Затем данный загрузчик считывал операционную систему со внешнего устройства, например с перфоленты или с жесткого диска.
Псевдо-ассемблерный код начального загрузчика может быть столь же простым, как и следующая последовательность инструкций:
Данный пример основан на начальном загрузчике одного из миникомпьютеров, выпущенного в 1970-х годах фирмой Nicolet Instrument Corporation.
Длина загрузчика второго уровня была такой, что последний байт загрузчика изменял команду, расположенную по адресу 6. Таким образом, после выполнения пункта 5 стартовал загрузчик второго уровня. Загрузчик второго уровня ожидал заправки в устройство считывания перфолент длиной перфоленты, содержащей операционную систему. Различием между загрузчиком первого уровня и загрузчиком второго уровня были проверки на ошибки считывания с перфоленты, которые часто встречались в то время, и, в частности, на используемых в данном случае телетайпах ASR-33.
Некоторые операционные системы, наиболее характерными их которых являются старые (до 1995 года) операционные системы компьютеров Apple Computer, настолько тесно связаны с аппаратным обеспечением компьютеров, что на данных компьютерах невозможно загрузить какую либо другую операционную систему. В данных случаях обычно разрабатывается начальный загрузчик, который работает как загрузчик стандартной ОС, а затем передает управление альтернативной операционной системе. Apple использовала данный способ для запуска A/UX версию Unix, а затем он использовался различными бесплатными операционными системами.
Устройства, инициализируемые BIOS
Загрузочное устройство — устройство, которое должно быть проинициализировано до загрузки операционной системы. К ним относятся устройства ввода (клавиатура, мышь), базовое устройство вывода (дисплей), и устройство, с которого будет произведена загрузка ОС — дисковод, жесткий диск, флэш-диск, PXE).
Загрузочная последовательность стандартного IBM-совместимого персонального компьютера
После включения персонального компьютера его процессор начинает работу. Первая выполняемая команда расположена по адресу FFFF0h и принадлежит пространству адресов BIOS.
Программа инициализации POST проверяет, что устройства компьютера работают корректно и инициализирует их.
Затем BIOS опрашивает устройства, перечисляемые в заранее созданном списке, пока не найдёт загрузочное устройство. Если такое устройство найдено не будет, будет выведено сообщение об ошибке, а процесс загрузки будет остановлен. Если
В случае жесткого диска, начальный загрузчик называется главной загрузочной записью (MBR) и часто не зависит от операционной системы. Обычно он ищет активный разделы жесткого диска, загружает загрузочный сектор данного раздела и передает ему управление. Этот загрузочный сектор, как правило, зависит от операционной системы. Он должен загрузить в память ядро операционной системы и передать ему управление. Если активного раздела не существует, или загрузочный сектор активного раздела некорректен, MBR может загрузить резервный начальный загрузчик и передать управление ему. Резервный начальный загрузчик должен выбрать раздел (зачастую с помощью пользователя), загрузить его загрузочный сектор и передать ему управление.
Другие виды загрузочных последовательностей
Некоторые процессоры имеют другие режимы загрузки. Например, большинство цифровых сигнальных процессоров могут загрузиться в следующих режимах:
См. также
Ссылки
Полезное
Смотреть что такое «Загрузка операционной системы» в других словарях:
Загрузчик операционной системы — Загрузчик операционной системы системное программное обеспечение, обеспечивающее загрузку операционной системы непосредственно после включения компьютера. Загрузчик операционной системы: обеспечивает необходимые средства для диалога с… … Википедия
Ядро (операционной системы) — У этого термина существуют и другие значения, см. Ядро. Ядро центральная часть операционной системы (ОС), обеспечивающая приложениям координированный доступ к ресурсам компьютера, таким как процессорное время, память и внешнее аппаратное… … Википедия
Диспетчер операционной системы — Для термина «Планировщик задач» см. другие значения. Планирование выполнения задач одна из ключевых концепций в многозадачности и многопроцессорности как в операционных системах общего назначения, так и в операционных системах реального… … Википедия
Дистрибутив операционной системы — это форма распространения системного программного обеспечения. Наличие дистрибутивов вызвано тем, что форма программного обеспечения, используемая для его распространения, почти никогда не совпадает с формой программного обеспечения работающей… … Википедия
Доверенная загрузка (аппаратные средства) — Доверенная загрузка функция персонального компьютера для воспрепятствования несанкционированному запуску пользователя, загрузке операционной системы (ОС) и получению возможности доступа к конфиденциальной информации. Обеспечение… … Википедия
Начальная загрузка компьютера — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей … Википедия
Начальная загрузка — Windows XP стартует в интернет телефон автомате В информатике начальной загрузкой называется сложный и многошаговый процесс запуска компьютера. Загрузочная последовательность это последовательность действий, которые должен выполнить компьютер для … Википедия
Защищённая загрузка терминальных клиентов — способность терминальных клиентов безопасно загружать операционную систему. Основным решением безопасной загрузки является проверка целостности и аутентичности файлов операционной системы, которые могут храниться на локальном жёстком диске,… … Википедия
BIOS — Основная и дублирующая микросхемы ПЗУ материнской платы Gigabyte, содержащие BIOS компании AWARD. BIOS (англ. basic input/output system «базо … Википедия
Prefetcher — Prefetcher компонент операционной системы Microsoft Windows, ускоряющий процесс её начальной загрузки, а также сокращающий время запуска программ. Prefetcher впервые появился в операционной системе Windows XP. Начиная с Windows Vista, он… … Википедия