Гибернация (операционные системы)

Гибернация (англ. hibernation, также известная как англ. suspend to disk или англ. Safe Sleep на компьютерах Macintosh[1]) — в вычислительной технике, процесс выключения компьютера с сохранением текущего состояния системы. При переходе в режим гибернации содержимое оперативной памяти (ОЗУ) копируется на жёсткий диск или в другое энергонезависимое запоминающее устройство. При последующем включении содержимое ОЗУ восстанавливается, и компьютер возвращается к состоянию, в котором находился до гибернации. Впервые гибернация была реализована и запатентована[2] компанией Compaq Computer Corporation в Хьюстоне, Техас, в 1992 году.

В операционных системах Windows 8, Windows 8.1, Windows 10 и Windows 11 используется разновидность гибернации (режим быстрого запуска, Fast Startup) по умолчанию при завершении работы[3].

Применение

После перехода в режим гибернации оборудование полностью выключается, как при обычном завершении работы[4]. Система может оставаться без питания неограниченно долго и впоследствии восстановить исходное состояние памяти. Режим гибернации наибольшее распространение получил в ноутбуках с ограниченным запасом энергии[4]. Он может автоматически активироваться при снижении заряда аккумулятора. Большинство настольных компьютеров также поддерживают гибернацию — преимущественно как общий способ энергосбережения и для быстрой замены аккумулятора. Аппаратура Google и Apple (Android, Chromebook, iOS) не поддерживает гибернацию. На оборудовании Apple с macOS режим гибернации называется англ. Safe Sleep[1].

Возможен запуск компьютера после гибернации по расписанию с помощью аппаратных часов реального времени[5].

Сравнение с режимом сна

Во многих системах поддерживается режим сна, при котором вычислительные компоненты переходят на минимальное энергопотребление, но часть энергии продолжает поступать для сохранения данных в ОЗУ и быстрого восстановления работы. К преимуществам спящего режима относится практически мгновенное возвращение к работе, в то время как при гибернации необходима загрузка данных с диска в память, что занимает больше времени и зависит от скорости накопителя. Система в режиме сна расходует незначительное количество энергии для поддержания содержимого памяти, и не может оставаться выключенной сколь угодно долго — в отличие от гибернации. Отключение питания у системы в режиме сна приведёт к потере несохранённых данных, в то время как при гибернации рисков нет: после возврата питания можно возобновить работу. Как спящий, так и выключенный/гибернированный компьютеры могут потреблять энергию в режиме ожидания, если не отключены от сети[6].

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

Первая реализация

Первое коммерческое внедрение гибернации состоялось в 1992 году в ноутбуке Compaq LTE Lite 386[7]. Это стало возможным, в частности, благодаря внедрению команд сна и защищённого режима (opcode) процессора Intel 386. Реализация выполнялась на уровне ПЗУ и работала независимо от операционной системы, без необходимости в драйверах. Компьютер LTE самостоятельно реагировал на низкий заряд, предотвращая потерю данных путём использования скрытого раздела диска. Реализация позволяла сохранять и восстанавливать состояние даже во время операций с диском или сопроцессором. Управление гибернацией обеспечивалось также через графический интерфейс или пользовательские горячие клавиши. Совместимость была подтверждена с DOS, Windows 3.1, Banyan Vines и Novell Netware. Гибернация Compaq также упоминается в патенте IBM[8] за 1993 год.

Поддержка операционными системами

undefined

Первые реализации гибернации основывались на средствах BIOS, однако в современных системах она реализуется средствами самих операционных систем. В спецификации ACPI гибернация определяется как состояние S4 («режим сна S4»)[9].

Microsoft Windows

На компьютерах под управлением Windows режим гибернации доступен только при полной совместимости оборудования и драйверов с ACPI и Plug and Play. Это позволяет некоторым настольным компьютерам гибернировать на SSD даже при сбое питания и использовать даже простейшие или стареющие ИБП. Гибернацию можно вызвать через меню «Пуск» или командной строкой[10].

Windows 95 поддерживает гибернацию при наличии соответствующих драйверов и совместимого оборудования с BIOS, но только средствами производителей устройств, поскольку Windows 95 поддерживает только APM; в этом случае гибернация называется англ. Suspend-to-Disk. Windows 98 и более поздние версии уже поддерживают ACPI. Однако на ранних этапах стандарт ACPI реализовывался недостаточно полно, и многие устройства либо не были полностью совместимы, либо не имели драйверов, соответствующих WDM. Кроме того, наблюдались проблемы с файловой системой FAT32[11], что делало режим гибернации ненадёжным.

Windows 2000 — первая версия Windows, реализовавшая гибернацию на уровне операционной системы (ACPI S4), без необходимости в специальных драйверах. Для хранения содержимого ОЗУ используется скрытый системный файл hiberfil.sys в корне загрузочного раздела, размером, равным установленной памяти.

Windows Me, последняя версия в серии Windows 9x, также поддерживает гибернацию на уровне ОС и требует дискового пространства, соответствующего объёму оперативной памяти[12][13].

Windows XP существенно улучшила работу с гибернацией[14]: процессы гибернации и восстановления ускорились за счёт сжатия страниц памяти и параллельной записи на диск, очистки неиспользуемых страниц и использования DMA при вводе-выводе[15]. Файл hiberfil.sys содержит также сведения о состоянии процессора. Его структуру документировал специалист по анализу данных Маттьё Суиш на конференции Black Hat Briefings в 2008 году[16] и разработал одноимённый форензик-фреймворк для управления и конвертации этого файла в дамп памяти[17]. Позднее механизм сжатия был официально документирован компанией Microsoft[18].

Несмотря на появление в Windows XP 64-разрядной адресации (и поддержку более 4 гбайт оперативной памяти), в этой и последующих версиях (Windows Server 2003, Windows Vista, Windows Server 2008) гибернация была отключена при установке более 4 ГБ памяти из-за низкой производительности сохранения и восстановления большого объёма данных[19]. Проблема была решена в Windows 7 и Windows Server 2008 R2.

В Windows Vista появился режим англ. hybrid sleep: содержимое памяти сохраняется на диск, однако система переходит не в гибернацию, а в спящий режим. Если произойдёт сбой питания, при включении система восстановится из состояния гибернации.

В Windows 7 добавлено сжатие файла гибернации и по умолчанию установлен его размер равным 75% от физической памяти[18]. Microsoft рекомендует увеличить этот размер с помощью утилиты powercfg.exe при некоторых сценариях, когда занимаемый объём памяти превышает заданное значение. Размер файла может регулироваться в диапазоне от 50% до 100%, однако уменьшать файл не рекомендуется.

Windows 8 внедрил англ. Fast startup: при завершении работы выбран режим гибернации, но перед сохранением памяти все программы закрываются и пользователь выходит из системы[20]. По данным Microsoft, при обычной гибернации объём сохраняемых данных больше и процесс длительнее; в Fast startup сохранение быстрее благодаря закрытию всех пользовательских сессий. Для традиционного завершения работы Windows допускается удерживать клавишу Shift при выборе Завершение работы[21] или полностью отключить Fast startup в параметрах системы.

Windows 10 повторяет подход Windows 8[3] и оптимизирован для работы с твердотельными накопителями. Та же технология используется и в Windows 11.

В корпоративной среде гибернация редко применяется — её сложно включить массово на сети, не прибегая к стороннему программному обеспечению управления питанием[22]. В результате этот недостаток Microsoft критиковался как фактор огромных потерь энергии[23].

Гибернацию и файл hiberfil.sys можно отключить и удалить[24].

Сторонние программы управления питанием предлагают дополнительные функции, отсутствующие в стандартной ОС[25][26][27]; чаще всего реализуется интеграция с Active Directory, индивидуальные настройки по пользователям и устройствам, дополнительные планы управления питанием, отчёты по энергопотреблению и др.

macOS

В компьютерах Mac используется технология англ. Safe Sleep, при которой содержимое оперативной памяти сохраняется на жёстком диске при каждом переходе в спящий режим. Если питание сохраняется, Mac просыпается мгновенно. При отключении питания (например, при замене батареи без подключения к сети) система восстанавливает память с жёсткого диска[28]. Отдельной опции «Гибернация» в меню Apple нет, поскольку процесс выполняется при переходе в обычный спящий режим.

Возможность Safe Sleep появилась в моделях Mac начиная с октября 2005 года (PowerBook G4 Double-Layer SD), а поддержка реализована в Mac OS X v10.4 и выше.

Сразу после официального внедрения пользователи выпустили специальные утилиты-«хаки» для включения Safe Sleep на более старых моделях Mac с Mac OS X v10.4[29]. В классической Mac OS также существовал режим гибернации, однако впоследствии Apple отказалась от этой функции[30].

Linux

В ядре Linux функция гибернации реализована подсистемой swsusp, входящей в ядра серии 2.6. Альтернативное решение — TuxOnIce (патчи для ядра версии 3.4), обеспечивающее дополнительные возможности, например поддержку симметричной многопроцессорности и прерываний. Другой альтернативный вариант — uswsusp. Все эти решения используют термин англ. suspend-to-disk. Если применяется systemd, управление гибернацией осуществляется через него.

Гибридный спящий режим

Гибридный спящий режим сочетает преимущества обычного сна и гибернации: содержимое оперативной памяти копируется на энергонезависимое хранилище, а система переходит в спящий режим. Такой подход обеспечивает мгновенное восстановление работы даже при отключении питания, при этом сохраняются все открытые (в том числе несохранённые) файлы. В режиме гибридного сна уровень энергопотребления совпадает с обычным режимом сна, тогда как при гибернации система полностью выключается[4][31].

Примечания