Немногие операции в Windows исследуются, измеряются и обсуждаются так тщательно, как загрузка. Это вполне понятно — время загрузки представляет эффективный показатель общей производительности системы. Данные исследований показывают, что 57% пользователей настольных ПК и 45 % пользователей ноутбуков завершают работу компьютеров, а не переводят их в спящий режим. То есть примерно половина всех пользователей завершают работу компьютеров, а не переводят их в спящий режим.
В качественном отношении пользователи говорят, что предпочитают завершение работы, так как хотят полностью выключить компьютер, чтобы он не потреблял энергию (для экономии заряда аккумулятора или сокращения расхода электроэнергии).
Гибернация — также неплохой вариант с этой точки зрения, так как электроэнергия при этом почти не используется, и многие пользователи предпочитают гибернацию.
Гибернация (англ. Hibernation — «зимняя спячка») — энергосберегающий режим операционной системы компьютера, позволяющий сохранять содержимое оперативной памяти на энергонезависимое устройство хранения данных перед выключением. При активировании данного режима содержимое оперативной памяти записывается на энергонезависимое устройство (жёсткий диск), а компьютер выключается полностью (в отличие от ждущего режима). При включении содержимое памяти восстанавливается (загружается с диска в память), и пользователь может продолжить работу с того же места, на котором он остановился (остаются запущенные приложения, несохранённые документы и тп.).
Многие пользователи хотят включать компьютер и видеть «чистый лист», а не систему с открытыми приложениями и документами из предыдущего сеанса. Спящий режим и возобновление работы — это лучший вариант для быстрого включения и выключения компьютеров, но он потребляет электроэнергию для сохранения содержимого оперативной памяти, что приводит к разрядке аккумулятора, пусть даже и медленной (в правильно настроенной системе).
Компания Microsoft поставила перед собой задачу - придумать решение, удовлетворяющее всем этим пожеланиям для современных компьютеров без использования дополнительного оборудования.
Поставленные цели:
· нулевое потребление энергии при отключении;
· новый сеанс после загрузки;
· очень короткое время между нажатием кнопки питания и готовностью компьютера к использованию.
В Windows 7 внесено много улучшений в способ загрузки, в том числе параллельную инициализацию драйверов устройств и службы, запускаемые определенными событиями.
Решение - новый быстрый режим запуска, представляющий собой гибрид традиционной «холодной» загрузки и возобновления работы после гибернации.
Вспомним, как реализовано завершение работы и загрузка в Windows 7.
Процедура завершения работы:
1. Пользователь инициирует завершение работы, выбирая параметр «Выключить компьютер» в меню «Пуск» или нажимая кнопку питания, либо приложение инициирует завершение работы, вызывая функцию интерфейса API, например ExitWindowsEx() или InitiateShutdown().
2. Windows транслирует сообщения запущенным приложениям, позволяя им сохранить данные и настройки. Приложения также могут запросить немного дополнительного времени на завершение своей работы.
3. Windows закрывает сеансы каждого пользователя, вошедшего в систему.
4. Windows отправляет сообщения службам, уведомляя их о начале завершения работы, а затем останавливает их. Упорядоченные службы с зависимостями отключаются последовательно, а остальные — параллельно. Если служба не отвечает, ее работа завершается принудительно.
5. Windows передает сообщения устройствам, информируя их о необходимости завершения работы.
6. Windows закрывает системный сеанс (который также называют «сеансом 0»).
7. Windows записывает все данные, ожидающие записи, на системный диск, чтобы обеспечить их полное сохранение.
8. Windows передает сигнал через интерфейс ACPI системе для отключения компьютера.
Процедура загрузки:
1. После нажатия кнопки включения питания микропрограммное обеспечение компьютера запускает тест POST и загружает настройки. Этот предварительный процесс завершается после обнаружения допустимого системного диска.
2. Микропрограммное обеспечение считывает основную загрузочную запись (MBR) и запускает программу Bootmgr.exe. Bootmgr.exe находит и запускает загрузчик Windows (Winload.exe) в загрузочном разделе Windows.
3. Загружаются драйверы, необходимые для запуска ядра Windows, после чего начинает работать ядро, загружая в память куст системного реестра и дополнительные драйверы, отмеченные как BOOT_START.
4. Ядро передает управление процессу диспетчера сеансов (Smss.exe), который инициализирует системный сеанс, загружает и запускает устройства и драйверы, не отмеченные как BOOT_START.
5. Запускается Winlogon.exe, отображается экран входа пользователя в систему, диспетчер управления службами запускает службы, и выполняются заданные сценарии групповой политики. Когда пользователь входит в систему, Windows создает сеанс для этого пользователя.
6. Запускается Explorer.exe, система создает процесс диспетчера окон рабочего стола (DWM), который инициализирует рабочий стол и отображает его.
На самом деле этот процесс намного более детальный; дополнительные сведения доступны здесь: http://msdn.microsoft.com/en-us/windows/hardware/gg463386
Главное — помнить, что при традиционном завершении работы мы закрываем все пользовательские сеансы, а в сеансе ядра мы закрываем службы и устройства для подготовки к полному выключению.
Основное отличие Windows 8: как и в Windows 7, мы закрываем пользовательские сеансы, но вместо того чтобы закрывать сеанс ядра, мы переводим его в режим гибернации. По сравнению с полной гибернацией, при которой сохраняется множество страниц памяти, используемых приложениями, объем данных гибернации сеанса 0 намного меньше, и они значительно быстрее записываются на диск. Если вы не знакомы с гибернацией, то в двух словах — система сохраняет свое состояние и содержимое памяти в файле на диске (hiberfil.sys), а затем читает его при возобновлении работы и восстанавливает содержимое памяти. Такой метод значительно сокращает время загрузки, так как чтение файла гибернации и повторная инициализация драйверов происходят значительно быстрее в большинстве систем (на 30-70 % быстрее в большинстве протестированных нами систем).
Пример результатов тестирования от System Integration.
Загрузка происходит быстрее, так как гибернация системного сеанса занимает значительно меньше времени, чем полная инициализация системы. Загрузка также осуществляется быстрее, потому что мы добавили новую возможность многоэтапного возобновления работы, которая позволяет использовать все ядра многоядерной системы параллельно для распределения чтения файла гибернации и восстановления содержимого памяти. К сведению тех, кто предпочитает гибернацию: такой метод также позволяет ускорить возобновление работы и при использовании гибернации.
Представление разных этапов «холодной» и быстрой загрузки.
Возможно, следует упомянуть о том, как обрабатывается файл гибернации (если вы сейчас читаете эту статью и выполните команду dir /s /ah hiberfile.sys, вы узнаете, как много места на диске он занимает). По умолчанию размер файла гибернации составляет 75 % от объема физической оперативной памяти. Этот файл по сути резервирует место для данных гибернации, которые будут записаны при переходе системы в режим гибернации. Обычно используется намного меньше места на диске, а при использовании нашей быстрой загрузки размер файла обычно составляет около 10-15% от объема физической оперативной памяти, но это зависит от установленных драйверов, используемых служб и других факторов.